繁体   English   中英

Python - 从 same.py 文件中的所有变量创建列表

[英]Python - Create list out of all variables in same .py file

所以我在类别下面有这个代码,有时我会通过添加一个新类别来更新它,然后我必须手动将该类别添加到底部的列表INITIAL_GOAL_CATEGORIES如果这个列表在我创建时自动更新会容易得多一个新的dict变量。 有没有办法做到这一点? 我导出INITIAL_GOAL_CATEGORIES变量并在其他地方使用它,所以如果我可以将该变量名称设置为所有其他变量的列表,那将是很好的。 该文件将仅包含类别字典和底部的所有类别列表。

categories.py

# Categories
ART = dict(name='Art', emoji='🎨')
CULINARY = dict(name='Culinary', emoji='🍳')
DIET = dict(name='Diet', emoji='🥗')
DIY = dict(name='DIY', emoji='🔨')
FINANCE = dict(name='Finance', emoji='💰')
FITNESS = dict(name='Fitness', emoji='👟')
GAMING = dict(name='Gaming', emoji='🕹️')
MARTIAL_ARTS = dict(name='Martial Arts', emoji='🥋')
MUSIC = dict(name='Music', emoji='🎵')
RELATIONSHIP = dict(name='Relationship', emoji='💗')
SELF_CARE = dict(name='Self-Care', emoji='🤗')
SELF_IMPROVEMENT = dict(name='Self-Improvement', emoji='✨')
STREAMING = dict(name='Streaming', emoji='⏺️')
TRAVEL = dict(name='Travel', emoji='✈️')
WEIGHT_TRAINING = dict(name='Weight Training', emoji='🏋️')

INITIAL_GOAL_CATEGORIES = [ART, CULINARY, DIET, DIY, FITNESS, GAMING, MARTIAL_ARTS, MUSIC,
                           RELATIONSHIP, SELF_IMPROVEMENT, SELF_CARE, STREAMING, TRAVEL,
                           WEIGHT_TRAINING]

如果您想创建一个在添加此类全局值时自行更新的列表,您需要以下内容:

# Categories
ART = dict(name='Art', emoji='🎨')
CULINARY = dict(name='Culinary', emoji='🍳')
DIET = dict(name='Diet', emoji='🥗')
DIY = dict(name='DIY', emoji='🔨')
FINANCE = dict(name='Finance', emoji='💰')
FITNESS = dict(name='Fitness', emoji='👟')
GAMING = dict(name='Gaming', emoji='🕹️')
MARTIAL_ARTS = dict(name='Martial Arts', emoji='🥋')
MUSIC = dict(name='Music', emoji='🎵')
RELATIONSHIP = dict(name='Relationship', emoji='💗')
SELF_CARE = dict(name='Self-Care', emoji='🤗')
SELF_IMPROVEMENT = dict(name='Self-Improvement', emoji='✨')
STREAMING = dict(name='Streaming', emoji='⏺️')
TRAVEL = dict(name='Travel', emoji='✈️')
WEIGHT_TRAINING = dict(name='Weight Training', emoji='🏋️')

INITIAL_GOAL_CATEGORIES = [value for name, value in globals().items() if
                           name.isupper()]

这个 go 通过globals()中的所有值并检查值的名称是否为大写。 如果它符合标准,它就是一个类别,我们将它添加到类别列表中。

但正如评论中所说:字典更好:

# Categories
INITIAL_GOAL_CATEGORIES = {
    'Art': {'emoji': '🎨'},
    'Culinary': {'emoji': '🍳'},
    'Diet': {'emoji': '🥗'},
    'DIY': {'emoji': '🔨'},
    'Finance': {'emoji': '💰'},
    'Fitness': {'emoji': '👟'},
    'Gaming': {'emoji': '🕹️'},
    'Martial Arts': {'emoji': '🥋'},
    'Music': {'emoji': '🎵'},
    'Relationship': {'emoji': '💗'},
    'Self-Care': {'emoji': '🤗'},
    'Self-Improvement': {'emoji': '✨'},
    'Streaming': {'emoji': '⏺️'},
    'Travel': {'emoji': '✈️'},
    'Weight Training': {'emoji': '🏋️'},
}

它可以通过类和全局变量来实现。 它是一种常见的设计模式 Singleton。 https://refactoring.guru/design-patterns/singleton

class GoalCategories:
    def __init__(self):
        self._memory = list()


GOAL_CATEGORY_LIST = GoalCategories()._memory

class Category:
    def __init__(self, item):
        GOAL_CATEGORY_LIST.append(item)



ART = Category(dict(name='Art', emoji='🎨'))
CULINARY = Category(dict(name='Culinary', emoji='🍳'))
DIET = Category(dict(name='Diet', emoji='🥗'))
# etc...

# now you can use:

print(len(GOAL_CATEGORY_LIST)) # 3

# if later added :

STREAMING = Category(dict(name='Streaming', emoji='⏺️')) # 4

print(len(GOAL_CATEGORY_LIST))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM