我想做这样的事情:
fib = 1
foo = (arg):
print arg, argName # the name of the variable that was put in for arg
foo(fib)
得到这个回复:
1, fib
答案 0 :(得分:4)
你不能这样做(正如Ignacio Vazquez-Abrams已经回答的那样),但你可以用类似的方式做到这一点:
>>> def foo(**kwargs):
for arg_name in kwargs:
return kwargs[arg_name], arg_name
>>> foo(fib=1)
(1, 'fib')
唯一的区别是你必须使用关键字参数,否则它将无效。
另一种解决方案也是访问传递变量的__name__
属性,这将导致获得函数,类或名称的名称(或任何其他将定义此名称的名称)。您唯一应该注意的是,默认情况下,这不是变量的名称,而是函数/类/模块的原始名称(在定义时指定的名称)。请参阅此处的示例:http://ideone.com/MzHNND
答案 1 :(得分:3)
无法完成。 Python不区分该级别的名称。
答案 2 :(得分:0)
def print_args(**kwargs):
for name,value in kwargs.iteritems():
print name, value
答案 3 :(得分:0)
您现在可以使用python-varname
包中的值包装器来完成此操作。
from varname import Wrapper
fib = Wrapper(1)
def foo(arg):
print(arg.value, arg.name)
foo(fib)
# 1, "fib"
该程序包托管在https://github.com/pwwang/python-varname
我是包裹的作者。如果您有任何疑问,请告诉我。