首页 > 解决方案 > 将文件中的所有变量导入列表

问题描述

有没有办法将文件中的所有变量导入列表?

简化,这正是我想要实现的目标:

我知道使用通配符并不是一个很好的做法,但由于内部变量数量巨大(大约 500+),我现在别无选择config.py。我也无法编辑配置文件。我可能遗漏了一些明显的东西,但是如果有人可以帮助我解决这个问题,那就太好了。

标签: pythonpython-3.x

解决方案


from config import *执行以下步骤:

  1. 它导入config(不将其绑定到该名称),
  2. 它检查是否config.__all__存在,
  3. 如果存在,请使用这些名称导入对象,
  4. 否则,导入不以下划线开头的所有内容。

因此,您可以执行以下操作:

import config

if hasattr(config, '__all__'):
    x = [getattr(config, name) for name in config.__all__]
else:
    x = [getattr(config, name) for name in dir(config) if not name.startswith('_')]

这只是大致等价的,因为 ifconfig.py定义了__dir__then this 用于 while 的结果,dir(config)from config import *仍会导入不以下划线开头的每个名称,而不管__dir__.

注意: )的结果dir(config是按字母顺序排列的,即dir(config) == sorted(dir(config)). 这意味着列表的元素不一定按照它们在原始config.py文件中定义的顺序出现。for name in config.__dict__由于字典保留了自 Python 3.7 以来的插入顺序,如果这很重要(这也回避了__dir__差异) ,您可以使用它。


推荐阅读