我搜索了它并得到了以下内容,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
答案 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)
然而,正则表达式需要进行改进和事件,因此要求函数调用不要分布在多行中。
如果可能的话,最好修改代码,因为这很麻烦。