1. 程式人生 > >python :函式的引數傳遞

python :函式的引數傳遞

函式的傳參(把資料給函式) 函式的形參(接收函式呼叫傳過來的資料)

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. 全域性變數所有的函式都可以直接訪問(但函式內部不能將
   		其直接賦值)
說明:
	函式內部賦值語句不會對全域性變數造成影響