python在函数中获取参数的变量名

时间:2012-07-20 16:37:00

标签: python

我想做这样的事情:

fib = 1
foo = (arg):
    print arg, argName # the name of the variable that was put in for arg
foo(fib)

得到这个回复:

1, fib

4 个答案:

答案 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

我是包裹的作者。如果您有任何疑问,请告诉我。