小能豆

创建单独变量字典的更简单方法?

javascript

我希望能够以字符串形式获取变量的名称,但我不知道 Python 是否具有那么多的自省功能。类似于:

>>> print(my_var.__name__)
'my_var'

我想这样做是因为我有一堆变量想转换成字典,例如:

bar = True
foo = False
>>> my_dict = dict(bar=bar, foo=foo)
>>> print my_dict 
{'foo': False, 'bar': True}

但我想要一些比这更自动化的东西。

Python 有locals()vars(),所以我想有一种方法。


阅读 24

收藏
2024-07-10

共1个答案

小能豆

虽然 Python 没有直接提供获取变量名称的功能,但你可以使用一些技巧结合 locals()globals() 来实现你想要的功能。

一种方法是定义一个函数来自动检测当前作用域中的变量,然后将这些变量转换成字典:

def get_variable_names_as_dict(*variable_names):
    caller_locals = locals()
    return {name: caller_locals[name] for name in variable_names}

# 定义你的变量
bar = True
foo = False

# 调用函数获取字典
my_dict = get_variable_names_as_dict('bar', 'foo')

print(my_dict)  # 输出: {'bar': True, 'foo': False}

然而,由于 locals() 在函数内部调用时只返回函数内部的局部变量,以上方法在实际使用中可能会有局限性。另一种方法是利用函数的 globals() 函数:

def get_variable_names_as_dict(*variable_names):
    caller_globals = globals()
    return {name: caller_globals[name] for name in variable_names}

# 定义你的变量
bar = True
foo = False

# 调用函数获取字典
my_dict = get_variable_names_as_dict('bar', 'foo')

print(my_dict)  # 输出: {'bar': True, 'foo': False}

如果你想自动获取所有局部变量,可以使用以下方法:

def get_all_locals_as_dict():
    return {k: v for k, v in globals().items() if not k.startswith('_') and not callable(v)}

# 定义你的变量
bar = True
foo = False
baz = 42

# 获取所有局部变量
my_dict = get_all_locals_as_dict()

print(my_dict)  # 输出: {'bar': True, 'foo': False, 'baz': 42}

这样,你可以避免手动列出变量名,而是自动获取所有符合条件的变量。如果你只想获取某些特定的变量,可以修改过滤条件。

2024-07-10