此线程讨论如何在Python中以字符串形式获取函数名称:如何在Python中以字符串 形式获取函数名称?
如何对变量执行相同操作?与函数相反,Python变量没有__name__
属性。
换句话说,如果我有一个变量,例如:
foo = dict()
foo['bar'] = 2
我正在寻找一个功能/属性,例如retrieve_name
:
retrieve_name(foo)
返回字符串 'foo'
更新:
由于人们在问我为什么要这样做,这里有一个例子。我想从此列表在Pandas中创建一个DataFrame,其中列名称 由实际字典的名称给出:
# List of dictionaries for my DataFrame
list_of_dicts = [n_jobs, users, queues, priorities]
安装
pip install python-varname
用法
在函数内部检索变量名
from varname import varname
def function():
return varname()
func = function()
# func == 'func'
# available calls to retrieve
func = function(
# ...
)
func = \
function()
func = function \
()
# calls lead to failure of retrieving
func = [function()]
具有长参数列表的函数
def function(*args):
return varname()
func = function(
1, # I
2, # have
3, # a
4, # long
5, # argument
6, # list
)
# func == 'var_0'
def function(*args):
return varname(context = 20)
func = function(
1, # I
2, # have
3, # a
4, # long
5, # argument
6, # list
)
# func == 'func'
varname 来电被深深掩埋
def function():
# I know that at which stack this will be called
return varname(caller = 3)
def function1():
return function()
def function2():
return function1()
func = function2()
# func == 'func'
检索类对象的实例名称
class Klass:
def __init__(self):
self.id = varname()
def copy(self):
return varname()
k = Klass()
# k.id == 'k'
k2 = k.copy()
# k2 == 'k2'
varname调用被深埋在类中
class Klass:
def __init__(self):
self.id = self.some_internal()
def some_internal(self):
return varname(caller = 2)
def copy(self):
return self.copy_id()
def copy_id(self):
return self.copy_id_internal()
def copy_id_internal(self):
return varname(caller = 3)
k = Klass()
# k.id == 'k'
k2 = k.copy()
# k2 == 'k2'
如果无法检索名称
varname静态索引的起始位置是0将变量名称标记为失败。
func = [function()]
# func == ['var_0']
func = function \
()
# func == 'var_1'
局限性
def function():
return varname()
func = function
x = func() # unable to detect
误报
def func(**kwargs):
return varname()
x = func(
y = func()
)
# x == 'y'
# to avoid this, you have to write the kwargs
# in the same line where the is called
x = func(y=func())
# x == 'x'
问题内容: 我有一个分配了字符串的变量,我想根据该字符串定义一个新变量。 问题答案: 你可以使用exec:
问题内容: 我有任何字符串。像“水牛” 我想将此字符串转换为某些变量名称,例如, 不仅是这个例子,我还想将任何输入字符串转换为某个变量名。我该怎么做(在python中)? 问题答案: 之后,你可以通过以下方式进行检查: 作为输出,你将看到:
本文向大家介绍如何在Python中获取变量名称作为字符串?,包括了如何在Python中获取变量名称作为字符串?的使用技巧和注意事项,需要的朋友参考一下 实际上,这不是您在Python中所做的事情,因为变量实际上是对象的名称映射。Python中唯一具有规范名称的对象是模块,函数和类,并且在定义函数或类或导入模块后,当然不能保证此规范名称在任何命名空间中都具有任何含义。这些名称也可以在创建对象之后进行
问题内容: 我试图创建一个唯一文件名的文件,每次运行脚本时,它只打算每周或每月执行一次。所以我选择使用日期作为文件名。 是我收到此错误的地方。 如果我使用静态文件名,它可以工作,打开功能是否存在问题,这意味着您不能传递这样的字符串? name是一个字符串,其值包括: 非常感谢您的帮助 问题答案: 您需要在字符串后面直接输入: 您的代码不起作用的原因是,您正在尝试的文件不是字符串格式,而且也是无效的
问题内容: 我想将python变量名称转换为等效的字符串,如图所示。有什么想法吗? 问题答案: TL; DR:不可能。参见最后的“结论”。 在一个使用场景中,您可能需要此场景。我并不是在暗示没有更好的方法或实现相同的功能。 为了在调试,模式和其他类似情况下出现错误时“转储”任意词典列表,这将很有用。 需要的是该功能的反向功能: 它将以标识符名称(“变量”,“字典”等)作为参数,并返回包含标识符名称
问题内容: 是否可以使用String作为变量名。 问题答案: 您可以做的是将这些值关联(映射)到Music对象。这是示例: