Python函數的使用
1.創建函數
在Python中,創建一個函數需要用def,格式為 def 函數名(形式參數): 多個參數用逗號隔開,例如
注意函數體的縮進和函數頭最后要加冒號
默認參數
在創建一個函數時,我們可以給形參默認值,在調用的時候,若沒有給該形參值,則將使用默認值,但和c語言相同,所有沒有默認值的形參,都必須在有默認值的的左邊,例如:
def add(a,b,c=3):
print(a,b,c)
add(1,2)
結果為
1 2 3
單星號參數(收集參數)
當我們不知道我們這個函數需要多少個參數時,可以使用單星號參數,它在參數前加一個*
單星號形參表示:此處接受任意多個非關鍵字參數,且這些參數以元組形式存儲。
單星號實參表示:將可迭代對象轉為多個非關鍵字參數。
兩者可以視為互逆關系,只是單星號實參使用類型更廣,而單星號形參只會作為元組
def add(a,*b,c):
for i in b:
print(i,end=' ')
print(a,c)
add(*[1,2,3,4,5],c=6)
結果為
2 3 4 5 1 6
多星號參數
與單星號參數類似的還有多星號參數
多星號形參表示:此處接受任意多個關鍵字參數,這些參數以字典形式保存
多星號實參表示:將字典類型轉換為多個關鍵字參數,再傳遞給函數作為參數
這兩者就是簡單的互逆關系,一個將關鍵字參數轉為字典,另一個將字典轉為關鍵字參數,例如
def fun(b, **a):
print(type(a))
for k in a:
print(k+":"+str(a[k]))
print(b)
dict1 = {"hello":1, "world":2}
fun(b="hh",**dict1, myname=3)
結果為
<class ‘dict’>
hello:1
world:2
myname:3
hh
單星號參數和多星號參數可以組成Python中的萬能參數
def fun(*args, **kwargs):
pass
參數注解
在python3.5后引入的新用法,因為python函數的參數沒有規定類型,所以就存在一些問題,比如:
由於沒有規定類型,所以一些類型不對的問題很難發現
其他人在使用你的函數時,不知道應該傳入什么參數
對函數的參數進行類型注解 ,對函數的返回值進行類型注解 ,只對函數參數做一個輔助的說明,並不對函數參數進行類型檢查 , 提供給第三方工具,做代碼分析,發現隱藏的bug ,函數注解的信息,保存在__annotations__屬性中
語法例子如下:
def fun(a: int, b: int)->int:
return a+b
其中:a和b后面跟着:加一個類型。函數參數后面,冒號前面用->指出返回類型
例如
def add(x: int, y: int)->int:
return x+y
print(add(2, 1))
print(add('hello', 'world'))
print(add.__annotations__)
'''
結果為:
helloworld
3
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
'''
可見,程序並不會警告也不會報錯,但程序的可讀性和可維護性會提高
可以用inspect模塊來進行類型檢查,詳情見:https://www.cnblogs.com/s-p-l/p/10246149.html
2.調用函數
調用函數和c語言一樣,格式為 函數名(實際參數)
在我們調用的時候,為了防止參數順序出錯等問題,可以使用關鍵字參數,就是在實際參數前加上形式參數的名字,這樣就算交換順序也無所謂了,注意:關鍵字參數必須在非關鍵字參數的左邊,比如
def add(a,b):
print(a,b)
add(b=1,a=3)
結果為
3 1
3.函數文檔
函數文檔是函數的一個特殊屬性,它在函數體的開頭,是一個字符串
在函數執行時不會執行,用於說明函數的功能
查看函數文檔可以使用help或者直接輸出_ _ doc _ _(為避免markdown語法,中間加了空格),例如
def add(a,b):
'我就是函數文檔,add函數可以返回兩個數相加的結果'
c = a+b
return c
print(add.__doc__+"print")
help(add)
結果為
我就是函數文檔,add函數可以返回兩個數相加的結果print
Help on function add in module __main__:
add(a, b)
我就是函數文檔,add函數可以返回兩個數相加的結果
從結果可以看出,help其實就是美化后的函數文檔
4.函數的返回值
在Python中,函數可以返回多個返回值,只需要在return中寫多個值,中間用逗號隔開即可,相當於組成了一個元組,然后返回這個元組。
函數可以沒有return,但這不意味着這個函數沒有返回值,它會返回一個Nonetype類型的None
5.內嵌函數
python中允許在函數內定義函數,但在函數內定義的內嵌函數只能在該函數中調用,例如
def fun():
x = 50
def fun2():
print('a:',x)
fun2()
return x
x = 100
fun()
print('b:',x)
結果為
a: 50
b: 100
原文鏈接:https://blog.csdn.net/qq_43713303/article/details/106765533