Python: Pythonic 导入具有特定标识符的所有变量的方法?
Python: Pythonic way to import all variables with a specific identifier?
我想将名称中包含“_COLUMN”的文件中的所有变量整齐地导入。我这样做是因为有 20 多个变量,并且 normal 导入语句会很大。我还希望可以直接访问变量,例如TIME_COLUMN
而不是 earthquakes.tools.TIME_COLUMN
以下代码有效:
import earthquakes.tools
for item in dir(earthquakes.tools):
if '_COLUMN' in item:
exec(f'from earthquakes.tools import {item}')
这被认为是 Pythonic 吗?如果没有,是否有更好的方法或者甚至不应该这样做?
有关信息,我尝试在导入语句和其他解决方案中搜索正则表达式,但没有找到任何重要信息。
请不要提及 from ... import *
因为它不被认为是 Pythonic
你可以使用这个技巧
from earthquakes.tools import *
您可以覆盖模块的 __all__
变量:
tools.py
__all__ == ['var1_COLUMN', 'var2_COLUMN', 'var3_COLUMN']
main.py
:
from earthquakes.tools import *
所有 _COLUMN
前缀的变量可能首先应该是 dict
,但是如果您自己不能在 earthquake.tools
中这样做,您可以构建一个本地变量一个使用 getattr
.
import earthquake.tools
column_names = ["foo", "bar", "baz", ...]
columns = {k: getattr(earthquake.tools, f'{k}_COLUMN') for k in column_names}
不要使用 dir
来“推断”列名。如果不知道 earthquake.tools
首先定义了什么,阅读 scipt 的人不会知道定义了什么变量,所以要明确并列出您 期望 使用的名称。 (创建一个您永远不会实际使用的变量是没有意义的。)
我想将名称中包含“_COLUMN”的文件中的所有变量整齐地导入。我这样做是因为有 20 多个变量,并且 normal 导入语句会很大。我还希望可以直接访问变量,例如TIME_COLUMN
而不是 earthquakes.tools.TIME_COLUMN
以下代码有效:
import earthquakes.tools
for item in dir(earthquakes.tools):
if '_COLUMN' in item:
exec(f'from earthquakes.tools import {item}')
这被认为是 Pythonic 吗?如果没有,是否有更好的方法或者甚至不应该这样做?
有关信息,我尝试在导入语句和其他解决方案中搜索正则表达式,但没有找到任何重要信息。
请不要提及 from ... import *
因为它不被认为是 Pythonic
你可以使用这个技巧
from earthquakes.tools import *
您可以覆盖模块的 __all__
变量:
tools.py
__all__ == ['var1_COLUMN', 'var2_COLUMN', 'var3_COLUMN']
main.py
:
from earthquakes.tools import *
所有 _COLUMN
前缀的变量可能首先应该是 dict
,但是如果您自己不能在 earthquake.tools
中这样做,您可以构建一个本地变量一个使用 getattr
.
import earthquake.tools
column_names = ["foo", "bar", "baz", ...]
columns = {k: getattr(earthquake.tools, f'{k}_COLUMN') for k in column_names}
不要使用 dir
来“推断”列名。如果不知道 earthquake.tools
首先定义了什么,阅读 scipt 的人不会知道定义了什么变量,所以要明确并列出您 期望 使用的名称。 (创建一个您永远不会实际使用的变量是没有意义的。)