函数参数
函数之参数
参数:实参和形参
实参:位置实参、关键字实参
形参:位置形参、默认形参、可变长形参、关键字形参、可变长关键字形参
定义:实参:就是传值给形参的,是在函数被调用阶段()内的参数,有常量、变量、表达式三种组合
fn(10,20,23,34) fn(a,b,c,d,e) fn(a=10,b=20,c=30)
形参:就是函数用来接收外界传值,是在函数被定义阶段()内的参数,通常为变量
#形参随着函数的调用而产生,也随着函数的结束而销毁
def fn(a,b):
print(a)
print(b)
fn(a,b)
在执行函数的时候,a和b的值随着函数被调用而产生,传出来一个形式上的值,随着函数的结束,a和b的值也被销毁。
实参:位置实参和关键字实参
位置实参:使用位置来对形参进行传值,从左到右依次传值
def fn(a,b,c):
print(a)
print(b)
print(c)
fn(10,20,30)
结果就是(10,20,30)
关键字实参:使用关键字实参来对形参传值,可以不按照顺利来,形参按照名字取值
def fn(a,b,c):
print(a)
print(b)
print(c)
fn(a=20,c=40,b=29)
结果就是(20,29,40)
#位置实参和关键字实参两者的混用
位置实参:位
关键字实参:位,关键字
***1.位置实参必须在关键字实参的前面2.多个位置实参还是按照位置进行传值3.关键字实参是给没有从位置实参拿到值给形参传值,可以不按照顺序
总结:位置实参不用明确实参名的传值方式,一定是按照位置对形参进行传值
关键字实参要明确名字与值,为形参传值,可以不按照顺利
形参:位置形参、默认形参、可变长形参、关键字形参、可变长关键字形参
位置形参:是按照位置来接受实参的传值,可以接受位置实参和关键字实参的传值。
默认形参:使用‘=’来对形参进行赋值,可接受位置实参和关键字实参的传值,还可以不用传值
#位置形参和默认形参同时存在的时候,默认形参必须在位置形参之后
依据:位置形参必须传值,默认形参可以不用传值
可变长位置形参:只能由位置实参来传值
可变长位置形参用来接收没有被位置形参和默认形参接受的值,会以元组的方式接受传入的位置实参
def fn(*args):
print(args)
fn() #不传值的时候就是个空元组
fn() #传值的时候按照位置接受没有被位置形参和默认形参接受的值,已元组的方式存储
###小细节:三者混用的时候1.可变长位置形参只能由位置实参进行传值2.位置实参必须在关键字实参前3.关键字实参只能已位置进行传值
###总结:位置形参:位置实参、关键字实参
默认形参:位置实参、关键字实参、不用传值
可变长位置形参:位置形参
***小技巧:
def fn(*args):
print(args)
fn(1,2,3,4,5) 结果:(1,2,3,4,5)
x='abcde' fn(x) ('abcde',)
y=['egon',18] fn(y) (['egon',18],)
z={'a':1,'b':2} fn(z) ({'a':1,'b':2},)
如果要打印出一个列表里面的多个值的话,可以在实参的位置加一个分隔符*,就会将列表,字符串,字典打散传入
fn(*x) ('a','b','c','d','e')
fn(*y) ('egon',18)
fn(*z) ('a','b')
关键字形参:只能由关键字实参来传值
*为分割线,可以用*args来接受值,也可以只用来分割,不用来接收值
*之后的所有值都是关键字形参
def fn(a,b=10,*,c,d=30,e):
a:位置形参
b:默认形参
c,d,e都是关键字形参,可以不按照顺序来,但是必须由关键字实参进行传值
可变长关键字形参:**kwargs,使用字典来进行存储
用来接收没有被关键字形参接受完的关键字实参的传值,也只能由关键字实参来传值
def fn(*,a,b=20,c,**kwargs):
print(a,b) (20,10)
print(kwargs) {30,10,45}
fn(a=20,c=30,d=10,e=45)
整体赋值
dic={'name':'egon','age':18}
def fn(**kwargs):
print(kwargs)
fn(**dic) #{'name':'egon','age':18}
总结:出现在*之后的参数都是关键字形参,必须由关键字实参进行传值,没有顺序要求
可变长关键字形参使用字典来存放数据
8888
整体总结:
def fn(a,b=10,*args,d,f=20,**kwargs):
print(a)
print(b)
print(args)
print(d)
print(f)
print(kwargs)
#1有位置实参的传值,a必须传值,*args和**kwargs如果都要能接收到值,则默认参数必须使用位置实参来传值,f可以不用传值
#2全部为关键字传值
fn(ax=100,y=10,z=20,b=29,a=200)
#位置形参和默认形参:位置实参和关键字实参
#可变长位置形参:只能用位置实参传值
#所有关键字形参:必须使用关键字实参传值