1. 程式人生 > >Python學習筆記DAY3---函式

Python學習筆記DAY3---函式

         關於函式,程式設計哪裡少的了函式,Python裡的函式呢,使用def 來定義,如下例子:

def fun():
    print('這是一個函式')

         用def來定義,下面縮排的為函式體,呼叫的話直接呼叫函式名來實現。

         提到函式自然會想到引數,Python裡的引數很靈活,很神奇。首先,引數是一個變數,所以呢,元組自然是不能用來傳值的。Python的函式有三種特殊的引數,分別是關鍵字引數,預設引數,收集引數,下面程式碼說明:

        首先是一般的引數形式:

def power(x,n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
呼叫power(2,2)後,會返回2的2次方,如果只給函式一個值2的話,編譯器就會報錯。

#報錯內容
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    power(2)
TypeError: power() missing 1 required positional argument: 'n'
少了一個引數n,為了防止這樣的出現,或者大多數情況下n的值是一樣的,每次都要輸入的話很麻煩,這個時候預設引數就出現了:

def power(x,n = 2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
這樣的話n的值已經被默認了,可以只傳X的值就可計算,當需要的n的值不是2時,再用正常的傳值方式即可。

        有時候,需要的引數的數量是不一定的,就像給了一堆數字,然後求他們的和,這一堆的的數字數量是不一定的,這個時候怎麼辦呢,可變引數(收集引數)就出現了,定義可變引數的時候再引數前加上*號,這樣傳給函式的值就是一個元組,裡邊可以是任意個值,0個也可以。如果要傳入的值是一個元組或者列表,可以直接在列表和元組名之前加上*直接傳入即可。程式碼示例如下:

def fun1(*x):
    sum = 0
    for i in x:
        sum += i
    return sum
呼叫時使用fun1(1,2,3),即可輸出結果6.
        對於前面求平方的例子,有另一種傳值方式,power(n = 3, x = 2)也能正確的返回,把每個量都標明瞭關鍵字,這就叫關鍵字引數

        再來個例子:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
        這個輸入時輸入name和Age後,後面一個即為關鍵字引數,可由輸入者自行決定引數的名稱和值傳值時傳入person('a',12,love = 'man'),便能返回

name: a age: 12 other: {'love': 'man'},將新的關鍵字和引數放入dict中。

        如果要限制關鍵字引數的名字,就可以用命名關鍵字引數,例如,只接收 city 和 job 作為關鍵字引數。這種方式定義的函式如下:

def person(name, age, *, city,job):
    print( name, age, city, job)
        *後面的是關鍵字引數
        在 Python 中定義函式,可以用必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這 5 種引數都可以組合使用,除了可變引數無法和命名關鍵字引數混合。但是請注意,引數定義的順序必須是:必選引數、預設引數、可變引數/命名關鍵字引數和關鍵字引數。在函式呼叫的時候, Python 直譯器自動按照引數位置和引數名把對應的引數傳進去。