1. 程式人生 > >python3 函式(基礎知識二)

python3 函式(基礎知識二)

1. python 函式的引數傳遞
    1.傳遞方式:
        位置傳參
        序列傳參
        關鍵字傳參
        字典關鍵字傳參
    2. 位置傳參:
        實際呼叫引數(實參)的對應關係與形式引數(形參)的對應關係
        是按位置來一次對應的
        示意:
def fx(a,b,c):
    pass
fx(1, 2, 3)
    3.序列傳參:
        序列傳參是批在函式呼叫過程中,用*將序列拆解後按位置進行
        傳遞的傳參方式,實參和形參通過序列傳遞和匹配
        示例1:
def fx(a, b, c):
    pass
s1 = [11, 22, 33]  #列表
fx(*s1)  # 將s1序列拆解後按位置傳入fx中
        示例2:
def fx(a, b, c):
    print('a = ', a)
    print("b = ", b)
    print('c = ', c)
s1 = [11, 22, 33]
# fx(s1[0],s1[1],s1[2]) # 用索引傳參
fx(*s1) # 序列傳參,*代表將s1 拆解後再依次傳入
fx(*"ABC")  # A  B  C
fx(*(101,102,103))
    4.關鍵字傳參
        是指傳參時,按著形參的名稱給形參賦值
        實參和形參按名稱進行匹配
        示例:
def fx(a, b, c):
    pass
fx(b=22, c=33, a=11) # 11--->a, 22---->b, 33---->c
    注:
            實參和形參按形參名進行匹配,可以不按位置進行匹配
# 此示例示關鍵字列傳參
def fx(a, b, c):
    print('a = ', a)
    print("b = ", b)
    print('c = ', c)
fx(b=22, c=33, a=11)
    5.字典關鍵字傳參:
        實參為字典,用**拆解字典後再進行關鍵字傳參
        示例:
def fx(a, b ,c):
    pass
d = {'c':33, 'b': 22, 'a':11}
fx(**d) # 拆解字典內依次按關鍵字傳參
      說明:
            字典的鍵名和形參名必須一致
            字典的鍵名必須為字串
            字典的鍵名必須在形參中存在
# 此示例示字典關鍵字列傳參
def fx(a, b, c):
    print('a = ', a)
    print("b = ", b)
    print('c = ', c)
d = {'c':33, 'b': 22, 'a':11}
fx(**d)
    6.綜合傳參:
        函式的傳參方式子能確定形參能唯一匹配到相應實參的情況下
        可以任意組合
        注:
            通常位置傳參和序列傳參先傳遞,其次關鍵字傳參和字典關鍵字傳參
        示例:
def fx(a,b,c,e,f):
    pass
fx(10, *[20,30],e=50,**{'d':40,'f':60})
# 以下是錯誤的做飯
fx(e=50,**{'d':40,'f':60},10, *[20,30])
2.函式的形參
    1.函式的預設引數
        語法:
            def 函式名(形參名1=預設實參1,形參名2=預設實參2,....):
                  語句
        示例:
def info(name,age=1,address="不詳"):
      print("我叫",name, '我今年:',age, '歲,家庭住址:',address)
info("張飛",30,"中原")
info("Tarena",10)
info('趙雲')
# 我叫 張飛 我今年: 30 歲,家庭住址: 中原
# 我叫 Tarena 我今年: 10 歲,家庭住址: 不詳
# 我叫 趙雲 我今年: 1 歲,家庭住址: 不詳
        說明:
            預設引數必須自右至左(倒序)依次存在
            預設引數可以有0個,1個,多個,甚至全部都有預設引數
            預設引數的繫結物件存在於函式內,同函式的生命週期一致
        示例:
def fn(a,lst=[]):
    lst.append(a)
    print(lst)
L = [1,2,3,4]
fn(5,L) # [1, 2, 3, 4, 5]
fn(6,L) # [1, 2, 3, 4, 5,6]

fn(1.1)  # [1.1]
fn(2.2)  # [1.1, 2.2]
fn(3.3)  # [1.1, 2.2, 3.3]
fn(4.4)  # [1.1, 2.2, 3.3, 4.4]
    2.函式的形參定義方式:
        1.位置形參
        2.星號元組形參
        3.命名關鍵字形參
        4.雙星號字典形參
    3.位置形參:
        def 函式名(形參名1,形參名2...)
            語句塊
    4.星號元組形參:
        語法:
            def 函式名(*元組形參名):
                語句塊
        作用:
            收集位置多餘的位置傳參
        示例:
# 此示例示意星號元組形參
def func(*args):
      print("實參個數是:",len(args))
      print("args的值是:",args)
func(1,2,3)
func("ABCD",3.14,100,True,None)
    5.命名關鍵字形參
        語法:
            def 函式名(*,命名關鍵字形參):
                語句塊
            或
            def 函式名(*arge,命名關鍵字形參):
                語句塊
        作用:
            所有的命名關鍵字形參都是強調採用者採用關鍵字傳參或字典關鍵字傳
            參的方式呼叫
        示例1:
# 此示例示意命名關鍵字形參
def myfun(a,*,k):
    print("a =", a)
    print("k =", k)
myfun(100,k=200) # k強調使用關鍵字傳參
myfun(10,**{'k':20})
    示例2:
def myfun2(b, *args, c, d):
    print("b=",b)
    print("args=",args)
    print("c=",c)
    print("d=",d)
myfun2(100,200,300,400,d=600,c=500)
    6.雙星號字典形參:
        語法:
            def 函式名(**字典形參名):
                語句塊
        作用:
            收集多餘的關鍵字傳參
        注:
            字典形參名通常叫kwargs
        示例:
# 此示例示意雙星號字典形參的用法:
def func(**kwargs):
    print("關鍵字傳參的個數是:",len(kwargs))
    print("kwargs=",kwargs)
func(name='tarena',age=15)
func(a=1, b='BBBB',c=[2,3,4],d=True)
3.函式引數說明:
    位置形參,預設引數,星號元組形參,命名關鍵字形參,雙星號字典形參,
    可以混合使用

    函式引數自左至由的順序為:
        1.位置形參
        2.星號元組形參
        3.命名關鍵字形參
        4.雙星號字典形參
    示例:
def fn(a,b,*args,c,**kwargs):
    pass
fn(100,200,300,400,*"AB",**{'d':"D"},c=100)
4.可以接受任意位置傳參和關鍵字傳參的函式:
def fn(*args,**kwargs):
 	print(args,kwargs)
fn(100,200,300,400,a=100,b=200,**{'c':3,'d':5})
# (100, 200, 300, 400) {'c': 3, 'b': 200, 'd': 5, 'a': 100}