小知识:Python函数传递变长

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小知识: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的key
Kwargs是字典
也可以说*可以取出任意字典的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函数传递变长的主要内容,如果未能解决你的问题,请参考以下文章

Python函数

python小知识片段

python小知识片段

android小知识点代码片段

如何将 C 变长数组代码转换为 Rust?

Python中的基本函数及其常用用法简析