谈python函数的参数处理

以下几种函数定义
def funcion(a,b):
   print a,b

function(1,2)

def function1(*a):
   print a       <=打印元组

function1(1,2,3)

def function2(**a):
   print a       <=打印字典

function2(name='zzj',age=30)

def function3(*a,**b):
   print a,b     <=打印元组+字典

function3(1,2,3,name='zzj',age=30)

调用,需要人为的构造实参.如果我们有现成的元组和字典,想作为实参应该怎么办?

如我们经过一系列的动作得知了一个元组aTuple,想将其作为实参,

难道function1(aTuple)?
返回是一个((aTuple),)将其aTuple作为一个元组元素,不是我们想要的,我们想要的是将aTuple元组元素作为*a的元素,所以,我们这里需要调用apply函数来处理这样的事情
apply(function1,aTuple)

code
>>> aTuple=(1,2,3,4)
>>> function1(aTuple)
((1, 2, 3),)
>>> apply(function1,aTuple)
(1, 2, 3, 4)

同样的道理我们的实参是一个字典aDict呢?如果以function2(aDict),呵呵,不能以aDict作为实参,那么可以用apply来实现吗?可以,请看如下code演示,所以后期如果你的参数是以元组或者字典组成或者参数,元组,字典三者混合,那么不需要考略如何将其转换成原始调用模式,可以考略下使用apply功能来完成.

code
>>> aDict
{'age': 30, 'name': 'zzj'}
>>> function2(name='zzj',age=30)
{'age': 30, 'name': 'zzj'}
>>> function2(aDict)            
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: function2() takes exactly 0 arguments (1 given)

>>> apply(function2,(),aDict)
{'age': 30, 'name': 'zzj'}

最后展示下用apply函数来处理参数,元组,字典三者混合的案例

code
>>> def function4(a,b,c,*d,**e):
...     print a,b,c,d,e
...
>>> arg1=1
>>> arg2=2
>>> arg3=3
>>> aTuple=(4,5,6)
>>> aDict={'name':'zzj','age':30}
>>> apply(function4,(arg1,arg2,arg3,aTuple),aDict)
1 2 3 ((4, 5, 6),) {'age': 30, 'name': 'zzj'}
>>>
注意,实参与形参的顺序,一定要对应上,否则就不是你想要的值了.

通过以上实例相信大家对python中函数定义的参数有一定的玩法了(包括可变参数的概念*a,**b),并且提供apply函数来实现更加灵活的调用.

如果想了解更多,请关注我们的公众号
公众号ID:opdevos
扫码关注

gongzhouhao.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值