[英]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.