函式下
引數
以下是呼叫函式時可使用的正式引數型別:
必需引數
關鍵字引數
預設引數
不定長引數
必需引數
必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。
呼叫 printme() 函式,你必須傳入一個引數,不然會出現語法錯誤:
例題:
def printme( str ):
print (str)
return
呼叫 printme 函式,不加引數會報錯
printme()
輸出結果:
Traceback (most recent call last):
File “test.py”, line 10, in
printme()
TypeError: printme() missing 1 required positional argument: ‘str’
關鍵字引數
關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。
使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 Python 直譯器能夠用引數名匹配引數值。
以下例項在函式 printme() 呼叫時使用引數名:
例題一:
def printme( str ):
print (str)
return
printme( str = “菜鳥教程”)
以上例項輸出結果:
菜鳥教程
以下例題演示了函式引數的使用不需要使用指定順序:
例題二:
def printinfo( name, age ):
print ("名字: ", name)
print ("年齡: ", age)
return
printinfo( age=50, name=“runoob” )
以上例項輸出結果:
名字: runoob
年齡: 50
預設引數
呼叫函式時,如果沒有傳遞引數,則會使用預設引數。以下例項中如果沒有傳入 age 引數,則使用預設值:
例題一:
def printinfo( name, age = 35 ):
print ("名字: ", name)
print ("年齡: ", age)
return
printinfo( age=50, name=“runoob” )
print ("------------------------")
printinfo( name=“runoob” )
以上例項輸出結果:
名字: runoob
年齡: 50
名字: runoob
年齡: 35
不定長引數
你可能需要一個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數,和上述 2 種引數不同,宣告時不會命名。基本語法如下:
def functionname([formal_args,] *var_args_tuple ):
“函式_文件字串”
function_suite
return [expression]
加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。
例題一:
def printinfo( arg1, *vartuple ):
print ("輸出: ")
print (arg1)
print (vartuple)
printinfo( 70, 60, 50 )
輸出結果:
輸出:
70
(60, 50)
如果在函式呼叫時沒有指定引數,它就是一個空元組。我們也可以不向函式傳遞未命名的變數。
例題二:
def printinfo( arg1, *vartuple ):
print ("輸出: ")
print (arg1)
for var in vartuple:
print (var)
return
printinfo( 10 )
printinfo( 70, 60, 50 )
輸出結果:
輸出:
10
輸出:
70
60
50
還有一種就是引數帶兩個星號 **基本語法如下:
def functionname([formal_args,] **var_args_dict ):
“函式_文件字串”
function_suite
return [expression]
加了兩個星號 ** 的引數會以字典的形式匯入。
例題三:
def printinfo( arg1, **vardict ):
print ("輸出: ")
print (arg1)
print (vardict)
printinfo(1, a=2,b=3)
以上例項輸出結果:
輸出:
1
{‘a’: 2, ‘b’: 3}
宣告函式時,引數中星號 * 可以單獨出現,例如:
def f(a,b,*,c):
return a+b+c
如果單獨出現星號 * 後的引數必須用關鍵字傳入。
例題四:
def f(a,b,*,c):
return a+b+c
f(1,2,3)
輸出:Traceback (most recent call last):
File “”, line 1, in
TypeError: f() takes 2 positional arguments but 3 were given
f(1,2,c=3)
輸出:6
匿名函式
python 使用 lambda 來建立匿名函式。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。
lambda 只是一個表示式,函式體比 def 簡單很多。
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。
雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。
語法
lambda 函式的語法只包含一個語句,如下:
lambda [arg1 [,arg2,…argn]]:expression
例題:
sum = lambda arg1, arg2: arg1 + arg2
print ("相加後的值為 : ", sum( 10, 20 ))
print ("相加後的值為 : ", sum( 20, 20 ))
輸出結果:
相加後的值為 : 30
相加後的值為 : 40
return語句
return [表示式] 語句用於退出函式,選擇性地向呼叫方返回一個表示式。不帶引數值的return語句返回None。之前的例子都沒有示範如何返回數值。
例題:
def sum( arg1, arg2 ):
total = arg1 + arg2
print ("函式內 : ", total)
return total
total = sum( 10, 20 )
print ("函式外 : ", total)
以上例項輸出結果:
函式內 : 30
函式外 : 30
強制位置引數
Python3.8 新增了一個函式形參語法 / 用來指明函式形參必須使用指定位置引數,不能使用關鍵字引數的形式。
在以下的例子中,形參 a 和 b 必須使用指定位置引數,c 或 d 可以是位置形參或關鍵字形參,而 e 或 f 要求為關鍵字形參:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
以下使用方法是正確的:
f(10, 20, 30, d=40, e=50, f=60)
以下使用方法會發生錯誤:
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用關鍵字引數的形式
f(10, 20, 30, 40, 50, f=60) # e 必須使用關鍵字引數的形式
相關文章
- <Openssl下hash函式>函式
- 關閉 linux下的umask( )函式、setsid( )函式Linux函式
- linux下C語言中的mkdir函式與rmdir函式LinuxC語言函式
- c++回撥函式(下)C++函式
- async函式,瞭解一下函式
- Linux下getopt函式的使用Linux函式
- 第八章 函式(下)函式
- linux下的c庫函式Linux函式
- linux下getopt函式的用法Linux函式
- Linux下的時間函式Linux函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- ajax 下載Excel 新增回撥函式Excel函式
- 使用 cURL 函式下載B站字幕函式
- js基礎函式(下)(小白自用5)JS函式
- python檢視模組下的函式Python函式
- inux程式設計下signal()函式UX程式設計函式
- windows命令列下如何呼叫main函式Windows命令列AI函式
- 部分liunx下字串操作函式(轉載)字串函式
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- 字元函式、數字函式和日期函式字元函式
- 【函式】Oracle EXTRACT()函式與to_char() 函式函式Oracle
- 【函式】ORACLE函式大全函式Oracle
- (譯) 函式式 JS #2: 函式!函式JS
- 核函式 多項式核函式 高斯核函式(常用)函式
- 函式名/函式地址/函式指標函式指標
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- 重新學習一下陣列函式陣列函式
- ES6 箭頭函式下的this指向函式
- algorithm標頭檔案下的常用函式Go函式
- Linux下getopt()函式的簡單使用Linux函式
- linux程式設計下signal()函式Linux程式設計函式
- 學習一下閉包函式 - Closures函式