このスタイルのようなコードを常に心配していたので、なぜこの質問をするのか
def callsomething(x):
if x in (3,4,5,6):
#do something
関数 callsomething が頻繁に呼び出された場合、(3,4,5,6) はスペースと時間を浪費しすぎましたか? C のような言語では、定数のようにデータ セグメントに入れられるかもしれませんが、Python ではそうではありません。それがどのように機能するかを知っているので、私はこのようなコードを書く傾向がありました
checktypes = (3,4,5,6)#cache it
def callsomething(x):
global checktypes
if x in checktypes:
#do something
しかし、テストの後、この方法でプログラムが遅くなることがわかりました。より複雑なケースでは、コードは次のようになります。
types = (3,4,5,6)
def callsomething(x):
global types
for t in types:
t += x
#do something
これよりまだ遅い
def callsomething(x):
for t in (3+x,4+x,5+x,6+x):
#do something
この場合、プログラムは (3+x,4+x,5+x,6+x) を作成する必要がありますが、それでも最初のバージョンよりは高速ですが、頭が大きくなりすぎることはありません。
Python でのグローバル var アクセスがプログラムの速度を低下させることは知っていますが、構造体の作成と比べてどうですか?