C# arka planından geliyorum ama şimdi Python 3.x'te saygın bir miktarda bilimsel bilgi işlem işi yapıyorum, bu yüzden stilimin veya aksamın python standartlarına göre ne kadar "garip" olduğuna dair bazı fikirler istiyorum. Özellikle, Python'da const
diye bir şey olmadığı sonucuna varmamı sağlıyorum. Kullanım durumum şudur: *.npz
dosyalarını (numpy seri hale getirilmiş sözlükler) kaydetme, dikteleme, dosya yazma, vb. Aktarma ve sözlük anahtarları, dosya adları vb. Tutarlı, güvenilir bir adlandırma şemasına sahip olmamız gerekir.- akıllı mı yoksa aptal mı?
8 dilde aynı sihirli aptal dizeyi yazmak yanlıştır.
Yani benim modül kök i normalde base.py
dediğimiz bir dosya var:
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__))
Tuples değişmez olan, adlandırılmış küpe şimdi semantik olarak anlamlı indicies ve sahiptirler:
- ben anında veri aktarmak için birden fazla sözlükleri oluşturmak, ama onların tuşları ile
- yazabilirim dosyalardır biliyor ve Bilinen dosya adları ile dosyaları alabilirsiniz ve yerleri.
- Refactoring aracı Sadece bir sihirbazı tek bir yerde değiştirmek zorundayım.
- Modüllerim kurulduğunda bile dizinlerimin yerini biliyorum. c In #
, bir veya daha fazla Constants
sınıf public static const string Foo = "some magic string value";
ile dolu olması oldukça normal bir uygulamadır, böylece burada yeniden çalıştığım buydu.
Şu anda base.py
numaralı 412 gibi namedtuples
ürünüm var, bu çok fazla sahip olmanın sınırında gibi görünüyor - ama bundan daha fazlasına ihtiyacım yok. Hepsi anlamsal olarak farklılar - kullanım derneği tarafından sabit grupları gruplandırdım.
Bu yaygın ish uygulaması mıdır?
Yaygın değil. Ayrıca nadir fakat ilgi çekici bir konuya bakınız. [_Can Python'da bir nesneyi değiştirmeyi engelleyebilir miyim? _] (Http://stackoverflow.com/questions/3711657/can-i-prevent-modifying-an-object-in-python) – martineau