我是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相关但没有成功的事情。有人可以对此有所了解吗?我觉得我错过了一些明显的东西。 谢谢!
答案 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 函数的变量名,而是关键字的名称。