获取参数名称

时间:2015-02-16 06:38:33

标签: python python-2.7

我搜索了它并得到了以下内容,python obtain variable name of argument in a function但是我没有得到必要的答案,实际上我得到一个错误,当我使用kwargs时,add()接受0个参数。如果有的话,转而去找答案。

我有以下代码,

def add ( arg1, arg2):  
     z = arg1 + arg2
     print arg1Name, arg2Name, z

x = 10
y = 5  
add( x,y )

我希望输出为

x y 15

4 个答案:

答案 0 :(得分:7)

您应该使用函数的func_code.co_varnames属性来访问参数名称:

def add(arg1, arg2):
    z = arg1 + arg2
    print ' '.join(add.func_code.co_varnames[:2]) + ' ' + str(z)

add(10, 5)

输出:

arg1 arg2 15

您可以在此处详细了解内部属性: https://docs.python.org/2/library/inspect.html#types-and-members

答案 1 :(得分:4)

我认为你能得到的最接近你想要的是:

def add (**kwargs):    

    assert len(kwargs) == 2, "Not enough arguments"    

    keys = kwargs.keys()
    z = kwargs[keys[0]] +  kwargs[keys[1]]
    print keys[0], keys[1], z


x = 10
y = 5  
add(x=x,y=y)
add(w=11,t=11)

结果:

y x 15
t w 22

答案 2 :(得分:2)

这里有一个班轮解决方案,**kwargs返回一个字典,用;

检查
def add(**kwargs):
    print (kwargs)

add(x=5,y=10)

>>> 
{'y': 10, 'x': 5}
>>> 

这是一个正常的词典。您可以使用基本的dict方法访问每个元素。

print (kwargs.keys())

>>> 
dict_keys(['y', 'x'])
>>> 

实际上使用kwargs是一种传统,你可以使用你想要的任何东西而不是它。这是解决方案,打印字典键和值的总和;

def add(**ChuckNorris): #instead of **kwargs
    print (" ".join(ChuckNorris.keys()),sum(list(ChuckNorris.values())))

add(x=5,y=10)

>>> 
x y 15
>>> 

答案 3 :(得分:1)

您可以使用traceback模块执行此操作。

def get_current_arg_names():
  import traceback, re
  tb = traceback.extract_stack()
  method = tb[-2][2]
  func_call = tb[-3][3]
  args = re.search('%s\s*\((.*?)\)' % method, func_call).group(1)
  return [ x.strip() for x in args.split(',') ]

def add(arg1, arg2):
  z = arg1 + arg2
  print get_current_arg_names(), z
  return z

x = 1
y = 3
print add(x, y)

然而,正则表达式需要进行改进和事件,因此要求函数调用不要分布在多行中。

如果可能的话,最好修改代码,因为这很麻烦。