6

我想做这样的事情:

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

并得到这个返回:

1, fib
4

4 回答 4

6

你不能那样做(正如 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

于 2012-07-20T16:41:06.323 回答
4

做不到。Python 不区分该级别的名称。

于 2012-07-20T16:38:04.847 回答
2

您现在可以使用 package.json 中的值包装器来完成此操作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

我是包的作者。如果您对使用它有任何疑问,请告诉我。

于 2020-07-09T19:56:44.203 回答
0
def print_args(**kwargs):
    for name,value in kwargs.iteritems():
        print name, value
于 2012-07-20T16:40:58.117 回答