有没有办法在Python中获得对象的名称?例如:
my_list = [x, y, z] # x, y, z have been previously defined
for bla in my_list:
print "handling object ", name(bla) # <--- what would go instead of `name`?
# do something to bla
编辑:一些上下文:
我实际要做的是创建一个可以通过命令行指定的函数列表。
我有:
def fun1:
pass
def fun2
pass
def fun3:
pass
fun_dict = {'fun1': fun1,
'fun2': fun2,
'fun3': fun3}
我从命令行中获取函数的名称,并希望调用相关的函数:
func_name = parse_commandline()
fun_dict[func_name]()
我想要函数名的原因是因为我想创建fun_dict
而不编写两次函数名,因为这似乎是一个创建bug的好方法。我想做的是:
fun_list = [fun1, fun2, fun3] # and I'll add more as the need arises
fun_dict = {}
[fun_dict[name(t) = t for t in fun_list] # <-- this is where I need the name function
这样,我只需要写一次函数名。
发布于 2009-10-08 14:58:41
发布于 2009-10-08 15:01:40
这是不可能的,因为可能有多个变量具有相同的值,或者一个值可能没有变量,或者一个值可能只是偶然地与变量具有相同的值。
如果你真的想这样做,你可以使用
def variable_for_value(value):
for n,v in globals().items():
if v == value:
return n
return None
但是,如果您首先遍历名称会更好:
my_list = ["x", "y", "z"] # x, y, z have been previously defined
for name in my_list:
print "handling variable ", name
bla = globals()[name]
# do something to bla
发布于 2013-04-22 11:53:40
这一行代码适用于所有类型的对象,只要它们在globals()
字典中,它们应该是:
def name_of_global_obj(xx):
return [objname for objname, oid in globals().items()
if id(oid)==id(xx)][0]
或者,等效地:
def name_of_global_obj(xx):
for objname, oid in globals().items():
if oid is xx:
return objname
https://stackoverflow.com/questions/1538342
复制相似问题