@ python 函數的參數傳遞
不可變(immutable)類型:類似 c++ 的值傳遞,如 整數、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。
可變(mutable)類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(a),將a真正的傳過去,修改後函數外部的a也會受影響。
python 中一切都是對象,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變對象和傳可變對象。
因此,可變對象在函數裏修改了參數,那麼在調用這個函數的函數裏,原始的參數也被改變了。
@ 調用函數時缺少必須參數,程序會報錯;關鍵字參數是在調用函數時指定參數名;默認參數是在定義函數時給參數一個默認值
@ 不定長參數
(1)加了星號 * 的參數會以元組(tuple)的形式導入,存放所有未命名的變量參數。
def functionname([formal_args,] *var_args_tuple ):
"函數_文檔字符串"
function_suite
return [expression]
[例]
#!/usr/bin/python3
# 可寫函數說明
def printinfo( arg1, *vartuple ):
"打印任何傳入的參數"
print ("輸出: ")
print (arg1)
print (vartuple)
# 調用printinfo 函數
printinfo( '番茄鍋底', '牛肉', '五花肉','蝦滑','魚豆腐','土豆','生菜')
輸出:
番茄鍋底
('牛肉', '五花肉', '蝦滑', '魚豆腐', '土豆', '生菜')
(2)加了兩個星號 ** 的參數會以字典的形式導入。
#!/usr/bin/python3
# 可寫函數說明
def printinfo( arg1, **vardict ):
"打印任何傳入的參數"
print ("輸出: ")
print (arg1)
print (vardict)
# 調用printinfo 函數
printinfo('鴛鴦鍋', '肉類'=['牛肉', '五花肉', '蝦滑'],'素食'=['凍豆腐', '土豆', '生菜'])
輸出報錯!
File "test.py", line 11
printinfo('鴛鴦鍋', '肉類'=['牛肉', '五花肉', '蝦滑'],'素食'=['凍豆腐', '土豆', '生菜'])
^
SyntaxError: keyword can't be an expression
修改一下。把關鍵字的引號去掉
#!/usr/bin/python3
# 可寫函數說明
def printinfo( arg1, **vardict ):
"打印任何傳入的參數"
print ("輸出: ")
print (arg1)
print (vardict)
# 調用printinfo 函數
printinfo('鴛鴦鍋', 肉類=['牛肉', '五花肉', '蝦滑'],素食=['凍豆腐', '土豆', '生菜'])
輸出:
鴛鴦鍋
{'肉類': ['牛肉', '五花肉', '蝦滑'], '素食': ['凍豆腐', '土豆', '生菜']}
@ 匿名函數
語法:lambda [arg1 [,arg2,.....argn]]:expression
[例]
>>> sum = lambda arg1, arg2: arg1 + arg2;
>>> sum(1,2)
3
>>> sum = lambda arg1=6, arg2: arg1 + arg2; #有默認值的參數要寫在最後,不僅匿名函數如此!
SyntaxError: non-default argument follows default argument
>>>
>>> sum = lambda arg1=6, arg2=6: arg1 + arg2;
>>> sum(1,)
7
>>>
>>> sum = lambda arg1, arg2=6: arg1 + arg2
>>>
>>>
@ 不帶參數值的return語句返回None
@ 裝飾器
https://www.runoob.com/w3cnote/python-func-decorators.html
@ Python3 內置函數
https://www.runoob.com/python3/python3-built-in-functions.html