实参和形参
今日内容
实参和形参:
''' 实参:调用函数,在括号内传入的实际值,值可以为常量、变量、表达式或三者的组合 ***** 形参:定义函数,在括号内声明的变量名,用来接受外界传来的值,外部提前产生了的变量,内部可以使用 '''''' 注:形参随着函数的调用而产生,随着调用结束而销毁 '''
实参:
''' 位置实参:不用明确形参名的传参方式,一定按照位置给形参传值 关键字实参:必须明确形参名字与值为形参传值,可以不用按照位置 ***** 注:混用 1.关键字实参必须出现在位置实参后 2.多个位置实参还是按照位置传参 3.关键字实参为没有从位置实参拿到值的形参传值,可以不用按照指定顺序 ''' def fn2(a, b, c, d, e, f): print(a, b, c, d, e, f) fn2(10, 20, 30, e=100, f=500, d=200)
位置形参的范畴:
- 位置形参
# positional argument def fn(a, b, c): print(a, b, c) # 位置形参可以由 位置实参 与 关键字实参 来传值 fn(10, 20, 30) fn(a=10, b=20, c=30)
- 默认形参的
def fn(a=10,b=20): print(a, b) # 默认形参可以由 位置实参 与 关键字实参 来传值,还可以不用传值(采用自身默认值) fn() fn(20, 30) fn(a=200, b=300) fn(100) # 就给a传 fn(b=100) # 就给b传 # 混用 # 位置形参与默认形参同时存在,默认形参必须在后 def fn1(a,b,c=10,d=20): print(a, b, c, d) # 位置形参必须传值,默认形参分情况传值 fn1(100, 200, d=1000)
- 可变长形参
# 可变长形参会以 元组 形式接受 位置形参与默认形参未接受完的 所有传入的位置实参,用索引来取第几个 # 可变长形参只能由 位置实参 来传值 ***** def fn(a, b=10, *args): print(a, b) print(args) # 小细节:可变长形参只能接受位置实参的值,位置实参还必须在关键字实参前, # 导致默认形参只能由位置实参来传值 fn(1, 20, 100, 200) # 1给a 20给b,不能用b=20传 100,200给args
关键字形参范畴:
# 前提:出现在 * 之后的形参 def fn(a, b=10, *, c, d=20, e): pass # c,d,e都是出现在*之后,都是关键字形参,由于必须由 关键字实参 来传值,没有顺序的强行要求 # 可变长关键字形参:用来接收没有被关键字形参接收完的关键字形参,也只能由关键字实参来传值 # 用字典来存放数据 def fn(**kwargs): print(kwargs) fn(a=10,b=20) # {'a': 10, 'b': 20} dic = {'x': 100, 'y': 200} fn(**dic) # {'x': 100, 'y': 200}
参数总结:
def fn(a, b, c=10, *args, d, e=20, f, **kwargs): pass # 位置形参:a、b # 默认形参:c # 可变长位置形参:args # 无初值关键字形参:d、f # 有初值关键字形参:e # 可变长关键字参数:kwargs # 1.位置形参与默认形参: 能用 位置实参 关键字实参 传值 # 2.可变长位置形参:只能 位置实参 传值 # 3.所以关键字形参:只能 关键字实参 传值