python - 保存相关变量的 Pythonic 方式?
问题描述
我经常有一组(语义上)相关的动态变量,它们可以通过多种方法访问并在运行时进行更改。我目前在三种突出其“家族”的方式之间波动,并减少 main 中的概念混乱:变量名前缀、使用类或使用字典。
这些中的任何一个通常是首选(即pythonic)还是完全是其他东西?我对课程有一点偏好:
# Prefix
key_bindings_chars = {'right': '->', 'left':'<-'}
key_bindings_codes = ['smooth', 'spiky']
key_bindings_hints = ['Smooth protrutions', 'Spiky protrutions']
print(key_bindings_chars['right'])
# As a class
class key_bindings(object):
chars = {'right': '->', 'left':'<-'}
codes = ['smooth', 'spiky']
hints = ['Smooth protrutions', 'Spiky protrutions']
print(key_bindings.chars['right'])
# As a dict
key_bindings = {
'chars': {'right': '->', 'left':'<-'},
'codes': ['smooth', 'spiky'],
'hints': ['Smooth protrutions', 'Spiky protrutions']
}
print(key_bindings['chars']['right'])
解决方案
如果您决定添加功能,则创建不同的变量不能很好地扩展。没有行为(即没有方法)的类也毫无意义。我的意见是你应该使用字典或命名元组。
>>> from collections import namedtuple
>>> KeyBindings = namedtuple('KeyBindings', 'chars codecs hints')
>>> Chars = namedtuple('Chars', 'right left')
>>>
>>> key_bindings = KeyBindings(Chars('->', '<-'), ['smooth', 'spiky'], ['Smooth protrutions', 'Spiky protrutions'])
>>>
>>> key_bindings.hints
['Smooth protrutions', 'Spiky protrutions']
>>> key_bindings.chars.left
'<-'
推荐阅读
- numpy - 无法在 Python 3.9 上安装带有 Poetry 的 Numpy 1.20.2
- ruby-on-rails - 如何使用 rails 控制台将 Url 数据添加到现有表中?
- javascript - JavaScript 运行时错误:对象不支持属性或方法“get_items”
- python - 根据列名中的字符串列表过滤大型 Pandas DataFrame
- javascript - 想通过在一行的 td 中添加事件监听器来调用 javascript 函数
- c++ - 使用 Tensorflow Lite C,数字分类器
- sql - CTE获取每个父母的所有孩子和嵌套孩子
- javascript - 是否可以在 nuxt static 中启用 gzip 压缩?
- npm - 如何在 m1 上使用 chromedriver err 解决 npm install
- linux - 使用 linux command/srcipting 在 HTML 的特定单词之后提取单词