当前位置: 首页 > 面试题库 >

Python-将变量名作为字符串获取

刘浩思
2023-03-14
问题内容

此线程讨论如何在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对象。这是示例: