[python]关于函数传入参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[python]关于函数传入参数相关的知识,希望对你有一定的参考价值。

  

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

def foo(*args, **kwargs): 
    print args = , args 
    print kwargs = , kwargs 
    print ---------------------------------------
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()
        return re
    else:
        b.append(a)
        return fo

 





























以上是关于[python]关于函数传入参数的主要内容,如果未能解决你的问题,请参考以下文章

Python函数的定义参数传入与函数的调用

python获取外部传入多个参数

Python代码阅读(第26篇):将列表映射成字典

在android中动态创建选项卡并使用传入的参数加载片段

Thymeleaf引用片段传入参数

Python中将函数作为另一个函数的参数传入并调用