函數的定義和使用

函數的定義和使用

 1 def test(x):       # x表明形參
 2     '''
 3     2*x+1
 4     :param x:整形數字
 5     :return:返回計算結果
 6     '''
 7     y = 2*x+1
 8     return y
 9 p = test(3)     # test()表示運行名爲test函數,3表明實參,給x進行賦值
10 print(p)

 

函數的定義:python

  • def: 表示函數的關鍵字
  • 函數名: 函數的名稱, 根據函數名調用函數
  • 函數體: 函數中進行一系列的邏輯計算
  • 參數: 爲函數執行完畢後, 能夠給調用者返回數據

一. 爲何要用函數?

  1. 減小代碼量
  2. 保持一致性
  3. 易維

二. 函數的參數

函數有三種不一樣的參數:函數

  • 普通參數
    # ######### 定義函數 #########spa

     # name 叫作函數func的形式參數,簡稱:形參
      def func(name):
          print name
    
      # ######### 執行函數 ######### 
      #  'wupeiqi' 叫作函數func的實際參數,簡稱:實參
      func('wupeiqi')

     

  • 默認參數code

    def func(name, age = 18):
    
          print "%s:%s" %(name,age)
    
      # 指定參數
      func('wupeiqi', 19)
      # 使用默認參數
      func('alex')
    
      注:默認參數須要放在參數列表最後

     

  • 動態參數 *argshtm

    def func(*args):
    
          print args
    
    
      # 執行方式一
      func(11,33,4,4454,5)
    
      # 執行方式二
      li = [11,2,2,3,3,4,54]
      func(*li)

     

  • 動態參數 **kwargsblog

    def func(**kwargs):
    
          print args
    
    
      # 執行方式一
      func(name='wupeiqi',age=18)
    
      # 執行方式二
      li = {'name':'wupeiqi', age:18, 'gender':'male'}
      func(**li)

     

 

  重點: 位置 > *args > 默認值 > **kwargs遞歸

  *, ** 在形參. 表示聚合, 在實參, 表示打散作用域

三. 函數的變量

函數的變量可分爲 全局變量和局部變量get

全局變量(大寫)

定義:沒有縮進的變量

局部變量(小寫)

定義:子程序下定義的變量

name = 'lhf'                 # 這裏就指全局變量


def change_name():
    name = '帥了一比'      # 這裏就指局部變量
    print('change_name', name)


change_name()
print(name)    

結果
change_name 帥了一比
lhf

 

global和nolocal

global聲明是全局變量,nolocal指定上一級變量

未聲明全局變量

x = 99
def func():
    x = 88
func()
print(x)     #輸出99

 

聲明全局變量
x = 99
def func()
    global x
    x = 88
func()
print(x)    #輸出88

 

未指定上一級變量

def func():
    count = 1
    def foo():
        count = 12
    foo()
    print(count)
func()    #輸出1

 

指定上一級變量

def func():
    count = 1
    def foo():
        nonlocal count
        count = 12
    foo()
    print(count)
func()     #輸出12

 

 

名稱空間:
1. 內置名稱空間 -> 放解釋器內部的一些東西. print, input, len
2. 全局名稱空間 -> 在全局py文件中... 全局變量(變量, 函數 )
3. 局部名稱空間 -> 在函數內部的 變量, 函數

做用域:
1. 全局做用域: 隨便用. 全局名稱空間+內置名稱空間 -> globals
2. 局部做用域: 局部使用. 函數內部. 局部名稱空間 -> locals 查看當前做用域

global
1. 在局部引入全局變量
2. 在局部建立全局變量

nonlocal
在局部. 內層函數引入外層函數的局部變量

 

四. 遞歸函數

ps: 用的好的都是大牛~

就是函數本身調用本身

特性:

  1. 必須有一個明確的結束條件,

  2. 每次進入深一層遞歸時,問題規模都應有所減小

    def calc(n):
         print(n)
         if int(n / 2) == 0:
             return n # 當上面的條件成立後一個真值,返回到函數
         res = calc(int(n / 2))    
         print(n,res) 
         return res # 返回res的值,要將真值一層一層傳遞回去
    
     calc(10)   

     

五. lamabda匿名函數

lambda用法,冒號以前的是入參,冒號以後的是表達式,返回的值,最簡單的函數

print [(lambda x:x*x)(x)for x in range(11)]
#結果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print (lambda x:x*x)(3)
#結果:9
g=lambda x:x*x
print g(4)
#結果:16
相關文章
相關標籤/搜索