python函数不传入参数_[python]关于函数传入参数

在传入参数时有两个特殊参数,*args,**kwargs,功能如下:

def foo(*args, **kwargs):print 'args =', argsprint 'kwargs =', kwargsprint '---------------------------------------'

if __name__ == '__main__':

foo(1,2,3,4)

foo(a=1,b=2,c=3)

foo(1,2,3,4, a=1,b=2,c=3)

foo('a', 1, None, a=1, b='2', c=3)

输出结果如下:

args = (1, 2, 3, 4)

kwargs={}---------------------------------------args=()

kwargs= {'a': 1, 'c': 3, 'b': 2}---------------------------------------args= (1, 2, 3, 4)

kwargs= {'a': 1, 'c': 3, 'b': 2}---------------------------------------args= ('a', 1, None)

kwargs= {'a': 1, 'c': 3, 'b': '2'}---------------------------------------

也就是说*args是传入一个tuple,*kwargs是传入一个dict。

利用这个特性,我们可以仿造出一个switch关键字来。

python中没有类似

switch():

Case 1:pass

Case 2:pass

这类的switch语句,因此要转换一下。

这里有两种方法

(1) lambda法,适合case是单语句的:

switch={

'case1': lambda: pass,

'case2': lambda: pass,

'case3': lambda: pass

}

switch['case1']()

(2) dict法,适合case是多行语句或者带参数的:

def switch (case, *args, **kwargs):

def case1(a):

pass

def case2(a,b):

pass

go ={

'case1': case1,

'case2': case2

}

go[case](*args, **kwargs)

switch(case ,args)

关于python的参数还有一点,默认参数只在函数定义(即执行def语句)时被求值一次,以后每次调用函数时都使用以前的值(参考 function definitions)。由此可知,当默认参数的默认值是一个可变对象的时候,如果函数内部对默认参数有修改,就会影响到下一次调用函数时的默认值(一般情况下,这可能不是你想要的行为)。

形如

def fo(a,b=[]):

pass

每次调用fo,b都指向了同一对象

可以这么试验:

def fo(a,b=[]):print(id(b))

fo(1)

fo(5)

fo(10)

得到的结果都是同样的。

这个特性可以实现这么一个函数,f(3)(2)(1)(0)=6,就是说有这么一个函数f(a)(b)(c)(0)=a+b+c,当传入0时触发。

def fo(a,b=[]):if(a==0):

re=sum(b)

b.clear()returnreelse:

b.append(a)return fo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值