我希望能够返回变量/对象的名称作为海峡这样的功能:如何编写一个函数在Python
def get_variable_name (input_variable):
## some codes
>>get_variable_name(a)
'a'
>>get_variable_name(mylist)
'mylist'
看起来很傻,但我需要的功能来构建关于'exec()'后面的变量的表达式。有人可以帮助如何编写'get_variable_name'吗?
我希望能够返回变量/对象的名称作为海峡这样的功能:如何编写一个函数在Python
def get_variable_name (input_variable):
## some codes
>>get_variable_name(a)
'a'
>>get_variable_name(mylist)
'mylist'
看起来很傻,但我需要的功能来构建关于'exec()'后面的变量的表达式。有人可以帮助如何编写'get_variable_name'吗?
我已经看到几个这种类型的问题在SO现在几个变种。答案是不要。 学习如何在需要名称与对象之间的关联时使用dict
。你稍后会感谢你。
在回答这个问题:“我的代码如何可以发现一个对象的名称?”,这里的a quote从弗雷德里克Lundh开发(在comp.lang.python):
相同的方式,你得到的你在门廊找到的那只猫的名字: 这只猫(物体)本身不能告诉你它的名字,而且它并不是 真的很在意 - 所以唯一的办法是找出它的名字是 你所有的邻居命名空间)如果它是他们的猫(对象)...
...。并且不要惊讶,如果你会发现在众所周知的名字中, 或者根本没有名字!
注:这是技术上可能得到这必将为对象,在CPython的实现,至少在名称的列表。如果你有兴趣看到演示,看到我的答案在这里所示的inspect
模块的使用:
Can an object inspect the name of the variable it's been assigned to?
这种技术只在一些疯狂的调试会话使用,不使用任何类似这在你的设计中。
请注意,即使该链接也会给出一个对象名称* s *(复数)的列表。没有像对象的“*名称”这样的事情。 – BrenBarn
一般来说这是不可能的。当你传递某个函数时,你传递的是对象,而不是名称。同一个对象可以有许多名字或没有名字。如果您致电get_variable_name(37)
,应该做的功能是什么?你应该考虑你为什么要这样做,并试图找到另一种方式来完成你的真实任务。
编辑:如果您想get_variable_name(37)
返回37,那么如果你a=37
,然后做get_variable_name(a)
,这也将返回37.一旦里面的功能,它无法知道什么对象的“名”在外面的道路。
def getvariablename(vara):
for k in globals():
if globals()[k] == vara:
return k
return str(vara)
可能在某些情况下工作......但很容易破损......我就基本上都不在任何类型的生产代码中使用它......
基本上我想不出什么好理由做到这一点... ...和大约一百万不到
也许你可以使用traceback.extract_stack()来获取调用堆栈,然后从条目中提取变量名?
def getVarName(a):
stack = extract_stack()
print(stack.pop(-2)[3])
bob = 5
getVarName(bob);
输出:
getVarName(bob)
,如果你只是想返回基于用户输入所选择的变量的名字......这样他们就可以跟踪他们的意见,在添加一个变量名代码,因为他们除了从他们的选择中产生的值之外还进行选择。例如:
temp = raw_input('Do you want a hot drink? Type yes or no. ')
size = raw_input('Do you want a large drink? Type yes or no. ')
if temp and size == 'yes':
drink = HL
name = 'Large cafe au lait'
if temp and size != 'yes':
drink = CS
name = 'Small ice coffee'
print 'You ordered a ', name, '.'
MJ
根据用户输入返回一个变量名称以提供交互式反馈。 – MJWoodwardGreene
这是* FAR *更多的工作比你想这样做。 –
http://stackoverflow.com/questions/582056/getting-list-of-parameters-inside-python-function – squiguy
你为什么要这样做?我几乎肯定有一个更好的方法来做你想做的事(我的意思是超出你给出的简短解释) –