python :函式的引數傳遞
阿新 • • 發佈:2018-12-19
函式的傳參(把資料給函式) 函式的形參(接收函式呼叫傳過來的資料)
python 函式的引數傳遞
傳遞方式:
1. 位置傳參
1.1 序列傳參
2. 關鍵字傳參
2.1 字典關鍵字傳參
**位置傳參:**
實際引數(實參) 的對應關係與形式引數(形參)的對應關係是
按位置來依次對應的.
說明:
實參和形參通過位置進行傳遞和匹配
實參的個數必須與形參的個數相同
序列傳參
序列傳參是指在函式呼叫過程中,用*(星號) 將序列拆解後
按位置進行傳遞的傳參方式
說明:
序列傳參時,序列拆解的位置將與形參一一對應
關鍵字傳參:
關鍵字傳參是指傳參時,按著形參名稱給形參賦值 實參和形參按名稱進行匹配 說明: 可以不按位置進行匹配
字典關鍵字傳參:
是指實參為字典,將字典用** 拆解後進行關鍵字傳參的傳
遞方式
說明:
字典的鍵名和形參名必須一致
字典的鍵名必須為符合識別符號命名規則的字串
字典的鍵名要在形參中存在
函式的綜合傳參
1. 函式的傳參方式在能確定形參能唯一匹配到相應實參的情
況下可以任意組合
2. 函式的位置傳參要先於關鍵字傳參
示例: def myfun(a, b, c): pass myfun(100, *[200, 300]) myfun(100, *"BC") myfun(*"AB", 300) myfun(*[100], 200, *[300]) myfun(100, c=300,b=200) myfun(a=100, 200, c=300) # 錯誤的 myfun(100, **{'c':300, 'b':200}) myfun(100, **{'c':300}, b=200) myfun(100, b=200, **{'c':300})
-------- 以下講的內容是函式的形參-------
函式的預設引數
語法:
def 函式名(形參名1=預設實參1, 形參名2=預設實參2,
形參名3=預設實參3, .....)
作用:
讓函式的呼叫者少傳遞引數來呼叫函式
說明:
1. 預設引數必須自右至左依次存在,如果一個引數有預設
引數, 則其右側的所有引數都必須有預設引數
2. 預設引數可以有0個,1個或多個,甚至全部都有預設引數
如: def fn(a, b=10, c): # 錯誤 pass def fn(a=0, b=None, c=False): # 是這對的 pass
**函式的可變實參和不可變實參的傳遞**
說明:
當一個可變物件通過函式實參傳入函式內時,在函式內
可以通過區域性變數來操作可變物件(列表,字典,集合...)
函式形參的定義方式
位置形參
星號元組形參
命名關鍵字形參
雙星號字典形參
位置形參:
語法:
def 函式名(形參變數1, 形參變數2, ....):
語句塊
星號元組形參
語法:
def 函式名( * 元組形參名):
語句塊
作用:
收集多餘的位置傳參
說明:
元組形參名一般命名為'args'
* 元組形參一個函式只能有一個
命名關鍵字形參
語法
def 函式名(*,命名關鍵字形參1, 命名關鍵字形參2,..):
語句塊
或
def 函式名(*args,命名關鍵字形參1, 命名關鍵字形參2,..):
語句塊
作用:
強制所有的命名關鍵字形參都必須用關鍵字傳參或字典關
鍵字傳參
雙星號字典形參
語法:
def 函式名(**字典形參名):
語句塊
作用:
收集多餘的關鍵字傳參
說明:
字典形參名一般命名為'kwargs'
一個函式內字典形參最多隻有一個
函式的形參說明:
位置形參,預設引數,星號元組形參,雙星號字典形參可以混
合使用
函式形參自左至右的定義順序為:
位置形參
星號元組形參
命名關鍵字形參
雙星號字典形參
函式的不定長引數: 有兩種: 星號元組形參,雙星號字典形參 用不定長引數可以接收任意的傳參
如:
def fn(*args, **kwargs):
print(args, kwargs)
全域性變數和區域性變數
**區域性變數**
1. 定義在函式內部的變數稱為區域性變數(函式的形參也是
區域性變數)
2. 區域性變數只能在函式內部使用
3. 區域性變數在函式呼叫時才能建立,在函式呼叫之後會
自動銷燬
**全域性變數**
1. 定義在函式外部,模組內部的變數稱為全域性變數
2. 全域性變數所有的函式都可以直接訪問(但函式內部不能將
其直接賦值)
說明:
函式內部賦值語句不會對全域性變數造成影響