Ah, Sie treffen einen der Randfall der Magie, $variable
und {variable}
sind gemeint, Python-Variable zu interpolieren. Das heißt, {foo}
wird durch den Wert str(foo)
ersetzt. Das ist nützlich für die Shell-Ausführung, zum Beispiel %bash rm {myfile}
. Überzeugen Sie sich davon, laufen timeit mit -n1 -r1
(laufen nur eine Schleife -r1
, einmal -n1
) und Druck S
:
In [1]: def f(S):
...: print(S)
...:
...: %timeit -r1 -n1 f({3})
3
92.6 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
Oh, haben wir 3
statt {3}
.... Lösung, die doppelte {}
:
In [2]: def f(S):
...: print(S)
...:
...: %timeit -r1 -n1 f({{3}})
{3}
25.9 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
Gut! Lassen Sie uns Ihr Beispiel beheben:
In [3]: def f(S):
...: for x in S:
...: pass
...: %timeit f({{3}})
234 ns ± 3.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Und Sie können einen Fehler auf https://github.com/ipython/ipython öffnen, ich bin ziemlich sicher, dass es bereits geöffnet, wenn es genug beklagen sind wir das Verhalten irgendwann ändern kann; oder dokumentieren Sie es zumindest. Es ist wahrscheinlich ausgelöst durch {3}
und nicht {1,2}
, weil {3}
ist "Klammer-Bezeichner-Klammer" wie {foo}
, aber {1,2}
ist nicht.
Beachten Sie, dass {k}
Nutzen sein können, Optionen für sich timeit, wenn Sie völlig diese Antwort verstanden haben:
In [4]: r=1
...: n=2
...: %timeit -n{n} -r{r} 1+1
292 ns ± 0 ns per loop (mean ± std. dev. of 1 run, 2 loops each)