首页 > 代码库 > 小知识:Python函数传递变长
小知识:Python函数传递变长
先来实践一把:
def f1(*args): print(args)f1(1,2,3,4)得出:(1, 2, 3, 4) ----- 是一个元祖
Part 1:
*args可以传递任意多的数,args返回的是一个元祖,可迭代
如果要传入一个列表或元祖,变成多个参数传递,比方说我输入[1,2,3,4],传入到f1变成f1(1,2,3,4)四个参数
def f1(*args):print(args)f1([1,2,3,4])
得出:([1,2,3,4],),如果我这么做传入的只是一个参数,对于args,只是元祖中的一个元素*args可以看作多参数类型,把元祖拆成一个个参数,就像下面这样print(*args)得出:1 2 3 4
如果我传一个参数给一个函数,这个函数把参数传递给另一个函数,就可以像上面这样用
def f1(*args): f2(*args) #这样a,b,c,d都会被赋值def f2(a,b,c,d): print(a,b,c,d)f1([1,2,3,4])
Part 2:
**args为自定参数传值,args为字典类型,**args拆开args字典,如果要二次传递也是这么组:
def f3(**kwargs): f2(**kwargs)def f2(a,b,c,d): print(a,b,c,d)f3(a=1,b=2,c=3,d=4)
*kwargs是什么鬼?
def f4(*args,**kwargs):print(args,kwargs)f4(1,2,a=3,b=4)如果这样的函数,好理解,第一个是元祖(1,2),第二个是字典{‘a‘: 3, ‘b‘: 4}def f4(*args,**kwargs):print(*args,*kwargs)第一眼看:擦,这能执行,但是这个执行的结果是:1 2 a b来一个三段论:*取出kwargs的keyKwargs是字典也可以说*可以取出任意字典的key。推测:也就是任意的key都可以被*拆分,来执行一个:print(*{‘a‘: 3, ‘b‘: 4})得出a b也就是说*类似运算符,列表来试试:print(*[1,2,3,4])得出1 2 3 4字符串来试试:print(*"fdfdsfd")得出f d f d s f d可以扩展为任意迭代器?确实,不行,*只能和字符串,列表,字典,集合合作,只能在函数中传递参数,字典只能传key,那我要传value就两个**
小知识:Python函数传递变长
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。