打印变量的名称

时间:2015-03-10 18:47:44

标签: python

我是python新手的程序员,试图编写一个简单的test1()函数,该函数使用arg(或* arg)打印出如何使用传递给它的参数的“name”调用它,而不是列表或我传递的任何其他变量。

以下示例:

def test1(arg):

    print "name of arg is %r" % arg


alphabet = ['a', 'b', 'c']

test1(alphabet) # prints name of arg is ['a', 'b', 'c']

我想打印出来:arg的名字是字母 我研究并尝试了几个与使用* argv相关但没有成功的事情。有人可以对此有所了解吗?我觉得我错过了一些明显的东西。 谢谢!

2 个答案:

答案 0 :(得分:1)

这有点难看,但它是实现你所追求目标的一种方式:

import traceback
import re

alphabet = ['a', 'b', 'c']

def test(arg):
    stack = traceback.extract_stack()
    arg_name = re.sub('test\((.*)\)', '\g<1>', stack[-2][-1])
    print arg_name

test(alphabet)
test('foo')

结果是

alphabet
'foo'

答案 1 :(得分:0)

我不太确定,为什么你想要这个,无论如何......

如果希望函数中的参数名称可用,则必须将参数的名称传递给函数。在所有情况下,Python都是通过引用调用

在您的函数中,arg将始终在函数内命名为arg。它的外部变量名在函数内部不可用。

def test1(arg):
    print "name of arg is %r" % arg

然而,python具有可变关键字参数,并且存在可能的问题解决方案。让我重新定义test1()

def test1(**kwargs):
   param_name = iter(kwargs).next()
   print "name of parameter is %s" % param_name

您可以使用关键字参数调用此函数:

alphabet = ['a', 'b', 'c']
test1(alphabet=alphabet)

但请注意,打印的内容不是 outside 函数的变量名,而是关键字的名称。

相关问题