python算法专项(八)——函数的外部传参(形参、实参)

python 的传参可以很自由和很灵活,如果在不知道要接收的参数是多少个的情况下一般使用形参传参,常用方式是参数列表或者参数字典来接收

参考链接:
argparse传参模块调用

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])
输出:
>>传入的参数个数: 50参数:1231参数:3452参数:abc
第3参数:9.94参数:[1, 2, 3, 4]

2.2、使用列表进行一个列表传参

x = [123,"xyz",[3,4,5]]
m2(x)
输出:
>>
传入的参数个数: 10参数:[123, 'xyz', [3, 4, 5]]

结论:不对列表进行任何操作,它会认为只传入了一个参数

2.3、使用列表进行一个列表传参,在列表前面加*号

x = [123,"xyz",[3,4,5]]
m2(*x)
输出:
>>传入的参数个数: 30参数:1231参数: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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值