2017-11-21 2 views

Antwort

0

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) 
Verwandte Themen