函數傳參
- 位置傳參
- 序列傳參
- 關鍵字傳參
- 字典關鍵字傳參
位置傳參: 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)
說明:
- 字典的鍵名和形參名必須一致
- 字典的鍵名必須為字符串,且鍵名附合標識符規則
- 字典的鍵名要在形參中存在
函數的綜合傳參
函數的傳參方式在能確定形參能唯一匹配到相應實參的情況,可以任意組合
說明:
位置傳參和序列傳參要先於關鍵字傳參和字典關鍵字傳參
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讀取一些整數
把所有的奇數放入到列表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
函數傳參