実際にはいです。まず最初に、Pythonには象徴的なswitch
ステートメントがありません。このステートメントは、ステートメントが長くなり、リニア検索よりもはるかに速い場合にバイナリ検索を行います。 (これはOを持って
def call(a, x):
return functions[a](x)
:
def other_case(x):
'''We can store non-lambdas too'''
return 8
functions = {
'd': lambda x: 4*x,
'!': lambda x: 5,
'k': lambda x: (1-2*x+x**2),
'Z': lambda x: (1/x),
'*': other_case,
}
はちょうど短いラッパー、これを呼び出すために:
Pythonでは、あなたは正確な値、またはカスタム関数のいずれかで、辞書を使用することができます1)時間、または複雑さが一定であるため、読み易くなるだけでなく、時間も大幅に短縮されます。
編集
あなたはすべてのその全範囲を超えることができ、特定の範囲の数字を持っている場合は、リストや変換を使用することができます。私は100 Daの間隔で、2000 Daの質量から5000 Daまで(私は生物学者です)何かを処理したいとします。 500項目のリストをエンコードするのは意味がありませんが、30項目のリストを使用して範囲全体を検討できます。
from __future__ import division # for //, floor division
def mass2000(x):
'''Do something for mass of 2000'''
return 1/x
def mass2100(x):
'''Do something for mass of 2100'''
return x
def mass2200(x):
'''Do something for mass of 2200'''
return x**2
lookup = [
mass2000,
mass2100,
mass2200,
# ....
]
def call(mass, x):
if (mass < 2000 or mass > 5000):
raise ValueError("Mass out of range")
return lookup[(mass - 2000) // 100](x)
ええ、それを複数の機能に変換してください。 'def all_funcs(operation、operand)'はpythonicではありません – TemporalWolf