Python ohne die Switch-Syntax (Select) kann stattdessen ein Wörterbuch verwenden. Ein Hinweis zur Ausführungszeit.
Wenn die Funktionsargumente unterschiedlich sind
(* args, ** kwargs)
als Argument der Funktion im Voraus vor und absorbieren Sie die Differenz.dict_kwargs = { 1: { 'arg1': arg1 }, 2: { 'arg2': arg2 } }
Die Methode ist denkbar.
Stellen Sie sich den Fall vor, in dem die folgenden beiden Funktionen separat ausgeführt werden. (Ich möchte die Ausführungszeit wissen, also schreibe ich sie so, dass sie langsam ist.)
def myfunc1():
nx, ny = 50, 40
arr = np.empty( ( nx, ny ) )
for iy in range( ny ):
for ix in range( nx ):
arr[ix,iy] = ix * ix + iy * iy
return arr
def myfunc2():
nx, ny = 50, 40
arr = np.empty( ( nx, ny ) )
for iy in range( ny ):
for ix in range( nx ):
arr[ix,iy] = 1
return arr
Danach haben wir die Zeit gemessen, die für die folgenden drei Ausführungsmethoden erforderlich ist (unter Verwendung von %% timeit von JupyterLab, unten ist nur myfunc1).
#Funktion direkt ausführen
myfunc1()
# { key: func }Aus dem Typwörterbuch ausführen
key = 1
dict_func = { 1: myfunc1, 2: myfunc2 }
dict_func[ key ]()
# { key: func() }Aus dem Typwörterbuch ausführen
dict_return = { 1: myfunc1(), 2: myfunc2() }
dict_return[ key ]
Das Ergebnis war wie folgt. Sie können sehen, dass der Typ {key: func ()} eine Zeit in der Nähe der Zeit benötigt, in der beide Funktionen ausgeführt werden.
#Direkte Ausführung
1: 488 µs ± 26.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2: 286 µs ± 925 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# { key: func }Schimmel
1: 461 µs ± 332 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2: 298 µs ± 22.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# { key: func() }Schimmel
1: 763 µs ± 3.96 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2: 771 µs ± 31.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)