我来自C#背景,但现在我做了相当多的Python 3.x科学计算工作,所以我想听听对于Python标准来说,我的风格或语音有多"奇怪"
特别是,Python中没有“const”这样的东西让人非常恼火。 我的使用情况是这样的:我正在保存*.npz文件(数据的numpy序列化字典),传递字典,写文件等等,字典键,文件名等等需要具有一致、可靠的命名方案。
很明显,在8个地方输入相同的魔术愚蠢字符串是错误的。
因此,在我的模块根目录下,我通常会有一个名为base.py的文件:
元组是不可变的;命名元组具有语义上有意义的索引,现在:
我目前在base.py中有4个这样的“namedtuples”,这似乎已经接近有太多 - 但我不需要比这更多。它们都在语义上不同 - 我根据用法关联将常量分组。
这是普遍的做法吗?
特别是,Python中没有“const”这样的东西让人非常恼火。 我的使用情况是这样的:我正在保存*.npz文件(数据的numpy序列化字典),传递字典,写文件等等,字典键,文件名等等需要具有一致、可靠的命名方案。
很明显,在8个地方输入相同的魔术愚蠢字符串是错误的。
因此,在我的模块根目录下,我通常会有一个名为base.py的文件:
import os
from collections import namedtuple
from os import path
# This is the tuple that contains operational constants
RuntimeConstants = namedtuple("Const", " ModelDirectoryLabelName \
DefaultModelOutputDirectoryRoot \
ResultDirectoryNameFormat \
PeripheryOutputFilePrefix \
NCOutputFilePrefix \
SummaryPlotFileName \
PeripheryConfigurationName \
ResourceDirectoryName \
StimulusTemplateName")
runtime_consts = RuntimeConstants(ModelDirectoryLabelName=".model-output-root",
DefaultModelOutputDirectoryRoot="model-output",
ResultDirectoryNameFormat="%d %b %y - %H%M",
PeripheryOutputFilePrefix="periphery-output-",
NCOutputFilePrefix="nc-output-",
PeripheryConfigurationName="simulation-configuration.yaml",
SummaryPlotFileName="summary-plots.pdf",
ResourceDirectoryName="resources",
StimulusTemplateName="default_stimulus.yaml"
)
# This is the path of __this file__, which we can then base location on
rootPath = os.path.dirname(os.path.abspath(__file__))
元组是不可变的;命名元组具有语义上有意义的索引,现在:
- 我可以创建多个字典以便在传递数据时知道它们的键
- 我可以使用已知的文件名和位置编写和检索文件。
- 重构意味着我只需要在一个地方修改一个魔术字符串。
- 即使模块已安装,我也知道我的目录在哪里。
我目前在base.py中有4个这样的“namedtuples”,这似乎已经接近有太多 - 但我不需要比这更多。它们都在语义上不同 - 我根据用法关联将常量分组。
这是普遍的做法吗?