国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python函數參數類型*、**的區別

2020-02-23 00:38:44
字體:
來源:轉載
供稿:網友

剛開始學習python,python相對于java確實要簡潔易用得多。內存回收類似hotspot的可達性分析, 不可變對象也如同java得Integer類型,with函數類似新版本C++的特性,總體來說理解起來比較輕松。只是函數部分參數的"*"與"**",閉包等問題,著實令人迷糊了一把,弄清概念后寫下此文記錄下來,也希望本文能夠幫助其他初學者。

所以本文是一篇學習筆記,著重于使用的細節和理解上,首先分別介紹了函數各種參數類型在調用和聲明時的區別,及其在混用時需要注意的一些細節,之后講了閉包相關的內容。如果有不對的地方歡迎指正。

函數參數不帶“*”,"*" 與 "**"的區別
理解這個問題得關鍵在于要分開理解調用和聲明語法中3者得區別.

函數調用區別

1. 不同類型的參數簡述
#這里先說明python函數調用得語法為:
代碼如下:
func(positional_args, keyword_args,
 *tuple_grp_nonkw_args, **dict_grp_kw_args)
 
 #為了方便說明,之后用以下函數進行舉例
 def test(a,b,c,d,e):
  print a,b,c,d,e

舉個例子來說明這4種調用方式得區別:
代碼如下:
#-------------------------------
#positional_args方式
>>> test(1,2,3,4,5)
1 2 3 4 5

#這種調用方式的函數處理等價于
a,b,c,d,e = 1,2,3,4,5
print a,b,c,d,e

#-------------------------------
#keyword_args方式
>>> test(a=1,b=3,c=4,d=2,e=1)
1 3 4 2 1

#這種處理方式得函數處理等價于
a=1
b=3
c=4
d=2
e=1
print a,b,c,d,e

#-------------------------------
#*tuple_grp_nonkw_args方式
>>> x = 1,2,3,4,5
>>> test(*x)
1 2 3 4 5

#這種方式函數處理等價于
代碼如下:
a,b,c,d,e = x
print a,b,c,d,e
#特別說明:x也可以為dict類型,x為dick類型時將鍵傳遞給函數
>>> y
{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}
>>> test(*y)
a c b e d

#---------------------------------
#**dict_grp_kw_args方式
>>> y
{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}
>>> test(**y)
1 2 6 1 1

#這種函數處理方式等價于
a = y['a']
b = y['b']
... #c,d,e不再贅述
print a,b,c,d,e

2. 不同類型參數混用需要注意的一些細節
  接下來說明不同參數類型混用的情況,要理解不同參數混用得語法需要理解以下幾方面內容.

  首先要明白,函數調用使用參數類型必須嚴格按照順序,不能隨意調換順序,否則會報錯. 如 (a=1,2,3,4,5)會引發錯誤,; (*x,2,3)也會被當成非法.

  其次,函數對不同方式處理的順序也是按照上述的類型順序.因為#keyword_args方式和**dict_grp_kw_args方式對參數一一指定,所以無所謂順序.所以只需要考慮順序賦值(positional_args)和列表賦值(*tuple_grp_nonkw_args)的順序.因此,可以簡單理解為只有#positional_args方式,#*tuple_grp_nonkw_args方式有邏輯先后順序的.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临朐县| 晴隆县| 彝良县| 谢通门县| 三穗县| 子长县| 兰州市| 寿阳县| 万年县| 林周县| 威远县| 遵化市| 鄂伦春自治旗| 利辛县| 平顶山市| 西吉县| 天峨县| 揭东县| 大庆市| 无锡市| 谢通门县| 彰化市| 青海省| 元氏县| 财经| 剑川县| 广宁县| 安远县| 曲麻莱县| 达拉特旗| 陇川县| 兴化市| 隆回县| 德清县| 当阳市| 乌海市| 长阳| 盘锦市| 志丹县| 唐山市| 无锡市|