python 的传参可以很自由和很灵活,如果在不知道要接收的参数是多少个的情况下一般使用形参传参,常用方式是参数列表或者参数字典来接收
目录
- 1 、常用传参方式
- 1.1、一般常数传参
- 1.2、一般列表传参,把列表p进行传参
- 1.3、使用*p进行传参,则会进行自动解译
- 2、使用参数列表传参(不确定参数个数)
- 2.1、一个参数列表直接传参
- 2.2、使用列表进行一个列表传参
- 2.3、使用列表进行一个列表传参,在列表前面加*号
- 2.4、使用直接传参和列表传参,混合传参写法
- 3、使用参数字典传参(不确定参数个数)
- 3.1、常规写法
- 3.2、传入字典
- 3.3、混合写法1(常规写法和字典传参混合)
- 3.4、混合写法2(常规写法、列表传参和字典传参混合)
1 、常用传参方式
1.1、一般常数传参
def m(a,b=123,c="abc"):#普通的定义方式
print("a=",a)
print("b=",b)
print("c=",c)
m(1,2,3)
输出:
>>a= 1
b= 2
c= 3
1.2、一般列表传参,把列表p进行传参
p = [1,2,3]
m(p)
输出:
>>a= [1, 2, 3]
b= 123
c= abc
1.3、使用*p进行传参,则会进行自动解译
p = [1,2,3]
m(*p)
输出:
>>a= 1
b= 2
c= 3
2、使用参数列表传参(不确定参数个数)
2.1、一个参数列表直接传参
def m2(*a):#直接放入一个形参,是可以的
print("传入的参数个数:",len(a))
for i,value in enumerate(a) :
print("第%s参数:%s"%(i,value))
m2(123,345,"abc",9.9,[1,2,3,4])
输出:
>>传入的参数个数: 5
第0参数:123
第1参数:345
第2参数:abc
第3参数:9.9
第4参数:[1, 2, 3, 4]
2.2、使用列表进行一个列表传参
x = [123,"xyz",[3,4,5]]
m2(x)
输出:
>>
传入的参数个数: 1
第0参数:[123, 'xyz', [3, 4, 5]]
结论:不对列表进行任何操作,它会认为只传入了一个参数
2.3、使用列表进行一个列表传参,在列表前面加*号
x = [123,"xyz",[3,4,5]]
m2(*x)
输出:
>>传入的参数个数: 3
第0参数:123
第1参数:xyz
第2参数:[3, 4, 5]
2.4、使用直接传参和列表传参,混合传参写法
def m3(a,*b):#形参可以放在函数传参的最后一个
print("a=",a)
print("b=",b)
m3(123,"abc","def",5.5)
输出:
>>a= 123
b= ('abc', 'def', 5.5)
注意:如果使用混合写法,参数列表需放在常规传参后面,可以接收不定长度的参数,如果先写参数列表,再写常规参数,是非法的
3、使用参数字典传参(不确定参数个数)
3.1、常规写法
def m5(**a):
print("共传入%d个参数"%len(a))
for k in a:
print("a[%s] = %s"%(k,a[k]))
m5(a=123,b ="abc",ccc=[1,2,3])#a传入进去后是字符串
输出:
>>共传入3个参数
a[a] = 123
a[b] = abc
a[ccc] = [1, 2, 3]
3.2、传入字典
f = {"a":456,"bb":"xyz","c":(11,222)}
m5(**f)#形参字典和实参字典一起调用
输出:
>>共传入3个参数
a[a] = 456
a[bb] = xyz
a[c] = (11, 222)
3.3、混合写法1(常规写法和字典传参混合)
def m6(a,b = 555,**c):#参数字典只能放在后面
print("a = ",a)
print("b = ",b)
print("c = ",c)
m6(123,x=1,y=2,z = 3)
输出:
>>a = 123
b = 555
c = {'x': 1, 'y': 2, 'z': 3}
m6(123,b=1,y=2,z = 3)
输出:
>>a = 123
b = 1
c = {'y': 2, 'z': 3}
通过上面代码可以清晰知道字典传参的好处,如果有常规传参的情况下,注意把字典传参放在后面
3.4、混合写法2(常规写法、列表传参和字典传参混合)
def m7(a,b=333,*c,**d):#参数列表在倒数第二个,参数字典放在最后
print("a=",a)
print("b=",b)
print("c=",c)
print("d=",d)
m7(1,2,3,4,5,n1=5,n2=6,n3=7)
输出:
>>a= 1
b= 2
c= (3, 4, 5)
d= {'n1': 5, 'n2': 6, 'n3': 7}
m7(1.2,*[3,4],**{'n':5,"n2":6,"n3":7})
a= 1.2
b= 3
c= (4,)
d= {'n': 5, 'n2': 6, 'n3': 7}