python中可以將某些具備一定功能的代碼寫成一個函數,通過函數可以在一定程度上減少代碼的冗余,節約書寫代碼的時間。因為有一些代碼實現的功能我們可能會在很多地方用到。
1、函數的聲明與定義
通過def關鍵字聲明函數,函數名可以自定義,一般時要求做到見名知義,在函數體內我們可以書寫實現功能的代碼
函數一般分為無參函數,有參函數。無參函數就像下面這樣
'''
函數定義:
def 函數名():
函數體
'''
def fun():
pass
簡單的有參函數一般是下面這樣
def fun(x,y):
pass
其中x,y成為函數的形參
2、函數參數的划分
函數參數一般分為,位置參數,默認值參數,可變長度參數
當定義函數時,參數的順序一般是位置參數在前,默認值參數隨后,可變長度參數最后。可變長度參數一般有分為兩種,擁有不同的寫法。
僅含有位置參數的例子,如下
def fun(name, age): # name, age 是位置參數,也是函數的形參
print(name, age)
fun('ajune', 18) # 'ajune', 18是函數的實參,分別對應name, age
含有位置參數和默認值參數的例子,如下
def fun(name, age, gender='男'): # gender 為默認參數,在函數定義時賦初值,僅調用時才可能會變化
print(name, age, gender)
fun('ajune', 18) # ajune 18 男
fun('ajune', 18, '男') # ajune 18 男
fun('ajune', 18, '女') # ajune 18 女
默認值參數在調用函數時如果不賦予新的值,那么其值將不會變化。其中函數的參數可以全部是位置參數也可以全部是默認參數。
含有不定長參數的例子之一
def fun(name, *args):
print(name, args)
fun('ajune', 18) # ajune (18,)
fun('ajune', 18, '男') # ajune (18, '男')
當含有多個參數時,*args會接收除了位置參數剩余的參數,並且是元組的形式接收,而且當我們傳入一個列表時也會被*args接收,可以將額外的參數寫成一個元組或者列表,通過下面的方式可以得到相同的效果。
def fun(name, *args):
print(name, args)
info = (18, '男')
info1 = [18, '男']
fun('ajune', *info)
fun('ajune', *info1)
含有不定長參數的例子之二
另外一種不定長參數就是**kwargs類型的,特點是只接收鍵值對形式的額外參數,接收參數也有兩種形式,可以直接寫成鍵值對的形式,也可以寫成一個字典,將字典作為參數傳入
def fun(name, **kwargs):
print(name, kwargs)
info = {'age': 18, 'gender': '男'}
fun('ajune', age=18, gender='男')
fun('ajune', **info)
可以看出傳入的參數從左至右對應,首先位置參數分配完參數,由於后面的就是*args,所以3,4,5會全部被*args接收,而a的值依然是默認值沒有改變,如果想要修改的話,在調用時需要鍵值對的形式,例如這樣子寫
foo(1, 2, 3, 4, 5, a=9, b=3, c=4, d=5)
。由於后面的是b=3所以會對應形參的b,最后的c=4,d=5便會被**kwargs接收。
3、函數的返回值
python函數可以具備返回值,其中返回值的類型是多種多樣的,可以是列表,元組,字典......
使用return可以將某個值返回,但是如果函數中沒有寫return語句,那么默認返回None,一個函數中只會有一條return語句被執行
函數的返回值可以被其他變量接收。
def fun():
return 'haha'
result = fun()
print(result)
函數的返回值可以是一個函數,多用於函數的嵌套
def fun():
def fun1():
return 'haha'
return fun1()
result = fun()
print(result)
其中函數的返回值還可以是函數名,下面的例子與上面的例子結果是一樣的,不同的是返回的是函數名,其實返回的還是函數的內存地址,當被變量接收后,通過變量名()的方式進行調用
def fun():
def fun1():
return 'haha'
return fun1
result = fun()
print(result())
函數的return語句里面可以寫多個值,當返回時,隱式的以元組方式返回
def fun():
x, y = 1, 2
return x, y
result = fun()
print(result) # 打印結果(1, 2)