python 中参数*args, **kwargs

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‘}

可以看到,这两个是Python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个 dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b=‘2‘, c=3,
a‘, 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。

-------------------------------------------------------------------------------------------这里看下网上github的代码:

def layer(op):    ‘‘‘Decorator for composable network layers.‘‘‘

def layer_decorated(self, *args, **kwargs):        # Automatically set a name if not provided.        name = kwargs.setdefault(‘name‘, self.get_unique_name(op.__name__))        # Figure out the layer inputs.        if len(self.terminals) == 0:            raise RuntimeError(‘No input variables found for layer %s.‘ % name)        elif len(self.terminals) == 1:            layer_input = self.terminals[0]        else:            layer_input = list(self.terminals)        # Perform the operation and get the output.        layer_output = op(self, layer_input, *args, **kwargs)        # Add to layer LUT.        self.layers[name] = layer_output        # This output is now the input for the next layer.        self.feed(layer_output)        # Return self for chained calls.        return self

return layer_decorated

参考:http://blog.csdn.net/anhuidelinger/article/details/10011013

继续

python @ 用法

def funA(arg):
    print ‘A‘
    a=arg()

@funA
def funB():
    print ‘B‘

此处的@相当于funA(funB())

装饰器背后的主要动机源自python面向对象编程,装饰器是在函数调用之上的修饰,这些修饰仅是当声明一个函数或者方法的时候,才会应用的额外调用。 
装饰器的语法以@开头,接着是装饰器韩式的名字和可选的参数。紧跟着装饰器声明的是被修饰的函数,和修饰函数的可选参
				
时间: 2024-11-09 03:04:50

python 中参数*args, **kwargs的相关文章

python函数参数*args **kwargs

毕业多年,把C++都就饭吃了....今天居然在纠结什么是形参什么是实参..... 定义函数里面写的参数就是形参,因为没有内存占用,实际调用时写的参数就是实参,因为有内存占用和传值 然后就是位置参数,可变参数和关键字参数 def foo(a,*b,**c): print(a) print(b) print(c) if __name__=="__main__": foo(1,2,3,4,k=1,g=2) 如上图程序,a,*b,**c这三个是形参,a,*b这两个是位置参数,**c是关键字参数

python 位置参数和关键字参数 *args **kwargs

#!/usr/bin/env pythondef foo(*args,**kwargs): print('args: {0}'.format(args)) print('kwargs {0}'.format(kwargs)) foo(1,2,3,a='first',b='second') 运行结果: args: (1, 2, 3)     #位置参数是一个元组kwargs {'b': 'second', 'a': 'first'}   #关键字参数是一个字典 原文地址:https://www.c

(转)Python中的*args和**kwargs

本文转自:http://kodango.com/variable-arguments-in-python 作者:团子的小窝 Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two test_defargs(1) # result: # Required argument: 1 # Opti

理解 Python 中的 *args 和 **kwargs

Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two test_defargs(1) # result: # Required argument: 1 # Optional argument: 2 test_defargs(1, 3) # result: # Required argum

python中的*args和**kwargs

def foo(*args,**kwagrs): print('args=',args) print('kwargs=',kwagrs) 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)#*kwargs用来接收关键字传参其余类型都由*args接收 *args和*

Python中的args和kwargs

有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你.本文会告诉你在python中如何使用args和kwargs,来增加函数的灵活性. 1.传递多个参数给函数*args和*kwargs允许你给一个参数传递多个参数或者keyword参数.考虑下面的例子.这是一个简单的函数,需要获取两个参数并返回它们之和: def my_sum(a, b): retur

Python中的*args和**kwarg

可变参数 *args 允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple, 而 关键字参数 **kw 允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict. 可变参数*args def calc(*numbers): sum = 0 for n in numbers: sum = sum + n*n return sum calc(1, 2) calc() 另一种用法: numbers = [1, 2, 3] calc(numbers[0

python中参数组 *args,**kwargs,位置参数(一个星*返回元祖),关键字参数(两个星*返回字典)

# 参数组 *args def send_mail(*names): for name in names: print('%s发测试报告!'%name) send_mail() # 不传参数!send_mail('路明') # 传一个参数:发测试报告! ('路明',) 返回元祖send_mail('曹雪莲','dxl','zhangshan') # 传多个参数:发测试报告! ('曹雪莲', 'dxl', 'zhangshan') def szz(name,age,sex,addr,phone,q

python中的*args 和**kwargs

*args是可变长参数,在函数内部以tuple形式存储: def fun_var_args(farg, *args): print "arg:", farg print(type(args)) >>> fun_var_args(1, 'two', 3)arg: 1<type 'tuple'> def fun_var_args(farg, *args): print "arg:", farg for value in args: prin