Python3 菜鳥教程 筆記6 -- 函數

@ 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章