1. 程式人生 > >函數傳參

函數傳參

block ber 特殊 數據 語句 示例 規則 2個 開頭

python函數參數傳遞的方式:

  1. 位置傳參
  2. 序列傳參
  3. 關鍵字傳參
  4. 字典關鍵字傳參

位置傳參: position argument
實際調用傳遞參數(實參)的對應關系與形式參數(形參)的對應關系是按位置依次對應的
示意:
def myfun(a, b, c):
pass

^ ^ ^

| | |

myfun( 1, 2, 3)
myfun(100, 200, 300)

示例見:argument_give.py

序列傳參
序列傳參是指在函數調用過程中,用*將序列拆解後按位置進行傳遞的傳參方式

示例:
def myfun1(a, b, c):
pass

s1 = [10, 20, 30]

關鍵字傳參 keyword argument

關鍵字傳參是指傳參時,按著形參的名稱給形參賦值
實參和形參按名稱進行匹配

示例見: keyword_argument.py

字典關鍵字傳參:
是指實參為字典,將字典用 拆解後進行關鍵字傳參
示例:
def myfun1(a, b, c):
pass
d1 = {"c":33, "b":22, "a":11}
myfun1(
d1)

說明:

  1. 字典的鍵名和形參名必須一致
  2. 字典的鍵名必須為字符串,且鍵名附合標識符規則
  3. 字典的鍵名要在形參中存在

函數的綜合傳參
函數的傳參方式在能確定形參能唯一匹配到相應實參的情況,可以任意組合

說明:
位置傳參和序列傳參要先於關鍵字傳參和字典關鍵字傳參

示例:
def myfun1(a, b, c):
pass

myfun1(100, (200,300))
myfun1(
[100, 200], 300)
myfun1([100], [200, 300])

myfun1(100, c=3, b=2)
myfun1(*[100], {‘c‘:3, ‘b‘:2})
myfun1(
{‘c‘:3, ‘b‘:2}, a=100)
其它組合同學們自己嘗試

錯誤傳參:

myfun1(c=3, b=2,100)

可變類型作為函數的實參
當一個可變類型作為函數的實參數傳入時,此對象可以在函數內將其改變.通常用來函數返回多個類型的數據
示例:
見 variable_argument.py

練習:
寫一個函數read_numbers, 在函數內部用 input讀取一些整數

把所有的偶數放入到列表even中
把所有的奇數放入到列表odd中
函數原型 如下:
def read_numbers(o, e):
...

odd=[]
even=[]
read_numbers(odd, even)
print("第一次讀取後", odd, even)
read_numbers(odd, even)
print("第二次讀取後", odd, even)

函數的缺省參數
語法
def 函數名(形參名1=默認實參1, 形參名2=默認實參2, ...):
語句

示例見 :
default_args.py
說明:
缺省參數必須自右至左依次存在,如果一個參數有缺省參數,則其右側的所有參數都必須有缺省參數
如:
def test_fn(a, b=10, c): # 此函數是錯的
pass

練習:
寫一個類似於range() 的函數myrange,此函數返回生成整數的列表.
myrange函數可以用1個,2個或3個參數來調用
def myrange(.....):
.... # 此處不能用range函數

for x in myrange(10):
print(x)
for x in myrange(5, 10):
print(x)
for x in myrange(5, 10, 2):
print(x)

函數的文檔字符串:
函數內,第一行沒有賦值給任何變量的是文檔字符串
此文檔字符串可以用 >>> help(函數名) 查看

示例:
def myfun(a, b, c=0):
"""myfun函數用於測試文檔字符串
此函數有三個參數a,b,c
狗年快樂!
"""
pass

函數的屬性
name屬性
用來記錄函數名
說明:
以雙下劃線"__"開頭, 以下劃線結尾的的標識符通常代表python的特殊變量(屬性)
示例:
def abc():
pass

fn = abc
print("fn綁定的函數名是", fn.name)
print("abc綁定的函數名是", abc.name)

doc屬性:
doc屬性用於記錄文檔字符串:
示例:
def cba():
"我是cba函數的文檔字符串!!!"
pass

>> help(cba)
>> print("cba.doc")
>> cba.doc

函數傳參