2016-09-12 2 views
3

Ich lerne gerade Python (3), mit meist Erfahrung mit R als Hauptprogrammiersprache. Während in R for -loops die gleiche Funktionalität wie in Python haben, wurde mir beigebracht, es nicht für große Operationen zu verwenden und stattdessen apply zu verwenden, was effizienter ist.Effizienz von for-Schleifen in python3

Meine Frage ist: wie effizient sind for -loops in Python, gibt es Alternativen und lohnt es sich, diese Möglichkeiten als Python-Neuling zu erkunden?

Zum Beispiel:

p = some_candidate_parameter_generator(data) 
for i in p: 
    fit_model_with paramter(data, i) 

Bare mit mir, es ist schwierig, ein Beispiel zu geben, ohne spezifischen Code geht zu sehr in. Aber das ist etwas, das ich in R schreiben würde mit apply, vor allem wenn groß ist.

+1

können Sie ein Beispiel für eine große Operation verwenden? – depperm

+0

in Sigle sentance, sie sind so effizient wie Ihre Logik –

+0

nach dem Dokument, gelten Funktion "Veraltet seit Version 2.3": https://docs.python.org/2.7/library/functions.html?highlight=apply# sich bewerben. und es existiert einfach nicht in Python 3 – Tryph

Antwort

2

Die Kommentare weisen richtig darauf hin, dass for-Schleifen "nur so effizient wie Ihre Logik" sind; Allerdings haben die range und xrange in Python Auswirkungen auf die Leistung, und dies könnte sein, was Sie im Sinn hatten, wenn Sie diese Frage stellen. Diese Methoden haben nichts mit der intrinsischen Leistung von for-Schleifen zu tun.

In Python 3.0 ist xrange jetzt implizit nur range; In Python-Versionen kleiner als 3.0 gab es jedoch eine Unterscheidung: range lud die gesamte iterierbare Zahl in den Speicher und iterierte dann über jedes Element, während xrange eher einem Generator ähnelte, bei dem jedes Element nur bei Bedarf in den Speicher geladen wurde und dann aus dem Speicher entfernt, nachdem es über iteriert wurde.

Nach dem aktualisierten Frage:

Mit anderen Worten, wenn Sie eine riesige Liste von Elementen, die Sie benötigen für die Schleife über eine iterieren, ist es oft mehr Speicher effizienter, einen Generator zu verwenden, nicht eine Liste oder ein Tupel, usw. Das hat wiederum nichts damit zu tun, wie die Python-for-Schleife funktioniert, sondern eher mit dem, was Sie über iterieren. Verwenden Sie im Zweifelsfall einen Generator, und Ihre Speichereffizienz wird so gut sein, wie es mit Python möglich ist.

+0

Hmm, ich bin Generatoren nicht vertraut, also werde ich definitiv mehr darüber lesen müssen. – JAD