2009-10-14 172 views
1

我希望能够获得传递给函数的所有参数的字典。是否有一个包含Python中函数参数的字典?

def myfunc(param1, param2, param3): 
    print 'Param1=%(param1)s, Param2=%(param2)s Param3=%(param3)' % __method_param_dict__ 

所以我的问题是不字典method_param_dict存在,如果有的话是什么所谓。

感谢

+2

你为什么需要它?你究竟想要完成什么? – SilentGhost

+0

嗯......这是源代码。问题是什么? –

回答

7

一种特定示例解决方案:

def myfunc(param1, param2, param3): 
    dict_param = locals() 

但一定要在this article看看对possiblities的完整解释(参数,kwargs,混合等)

+0

+1作为具体示例的参数定位可能很重要,并且每个人都忘记本地人()。 –

+0

谢谢杰德 - 我一直盯着我的Python食谱和谷歌找到答案! 我知道* args和* kwargs,但我不想要一个变量arg列表,只是一个简写,以阻止我不得不再次输入参数。 – Paul

+0

糟糕 - 感谢ChristopheD - 道歉和感谢。 – Paul

1

你可以这样做:

def myfunc(*args, **kwargs): 
    # Now "args" is a list containing the parameters passed 
    print args[0], args[1], args[2] 

    # And "kwargs" is a dictionary mapping the parameter names passed to their values 
    for key, value in kwargs.items(): 
    print key, value 
3

如果您需要做的是,你应该使用*args**kwargs

def foo(*args, **kwargs): 
    print args 
    print kwargs 

foo(1,2,3,four=4,five=5) 
# prints [1,2,3] and {'four':4, 'five':5} 

使用locals()也是一种可能性,将允许你通过的位置参数名称重复,但你必须记住的范围定义任何新的名称前可以访问它,你应该知道,它会包括方法self

0

如果要接受可变参数,可以使用*args**kwargs

*args是所有非关键字参数的列表。 **kwargs是所有关键字参数的字典。所以:

def myfunc(*args, **kwargs): 
    if args: 
     print args 
    if kwargs: 
     print kwargs 


>>> myfunc('hello', 'goodbye') 
('hello', 'goodbye') 

>>> myfunc(param1='hello', param2='goodbye') 
{'param1': 'param2', 'param2': 'goodbye'} 
相关问题