函數定義
在Python中,定義一個函數要使用`def`語句,依次寫出函數名、括號、括號中的參數和冒號`:`,然后,在縮進塊中編寫函數體,函數的返回值用`return`語句返回。
~~~
我們以自定義一個求絕對值的`my_abs`函數為例:
def my_abs(x):
if x >= 0:
return x
else:
return -x
~~~
#### 遞歸函數
~~~
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
~~~
### 可變參數
參數前面加了一個`*`號。在函數內部,參數`numbers`接收到的是一個tuple
~~~
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
~~~
關鍵字參數
關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。請看示例:
~~~
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
~~~
### 命名關鍵字參數
要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收`city`和`job`作為關鍵字參數。這種方式定義的函數如下:
~~~
def person(name, age, *, city, job):
print(name, age, city, job)
~~~
和關鍵字參數`**kw`不同,命名關鍵字參數需要一個特殊分隔符`*`,`*`后面的參數被視為命名關鍵字參數。
如果函數定義中已經有了一個可變參數,后面跟著的命名關鍵字參數就不再需要一個特殊分隔符`*`了:
~~~
def person(name, age, *args, city, job):
print(name, age, args, city, job)
~~~
### 參數組合
在Python中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數都可以組合使用。但是請注意,參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。
比如定義一個函數,包含上述若干種參數:
~~~
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
~~~