Python immer gut fuer eine Ueberraschung

Hi! Python versetzt mich doch immer wieder in Erstaunen: Ich wollte ein kurzen Code schreiben der große Zahlen überprüft ob sie Primzahlen sind. Doch es gab Probleme mit Großen Zahlen. So robbte ich langsam ran. Der Folgender Code verursacht 1 % Systemlast und knallt den Speicher mit 80% zu und wird dann nach einiger Zeit ohne zwischen Ergebnisse vom System getötet (Fedora2 GNU/Linux). <Py-Code> #! /usr/bin/python for i in range(1, 177319754): print i </Py-Code> Das machte mich stutzig und ich macht das Experiment mit C++ <C++-Code> # include <iostream> int main(){ for(unsigned long i = 0; i<177319754; ++i){ std::cout << i << std::endl; } return 1; } </C++-Code> Das Ergebnis war verblüffend. 80% Systemlast und 1,5% landete im RAM. Und es wurde munter Zwischen Ergebnisse ausgespuckt. Nach 5 Min. habe ich das Prog gestoppt weil nichts darauf hin wies das es noch abstürzen würde. Was macht Python eigendich mit dem ganzen Speiche? MfG Olaf _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Olaf 'Rübezahl' Radicke wrote:
Hi! Python versetzt mich doch immer wieder in Erstaunen: Ich wollte ein kurzen Code schreiben der große Zahlen überprüft ob sie Primzahlen sind. Doch es gab Probleme mit Großen Zahlen. So robbte ich langsam ran. Der Folgender Code verursacht 1 % Systemlast und knallt den Speicher mit 80% zu und wird dann nach einiger Zeit ohne zwischen Ergebnisse vom System getötet (Fedora2 GNU/Linux).
<Py-Code> #! /usr/bin/python for i in range(1, 177319754):
Hier erzeugst du im Arbeitsspeicher eine Liste mit 177319754 Elementen. Versuch es stattdessen doch mal mit xrange(). -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Python versetzt mich doch immer wieder in Erstaunen: for i in range(1, 177319754):
Hier erzeugst du im Arbeitsspeicher eine Liste mit 177319754 Elementen. Versuch es stattdessen doch mal mit xrange().
Mal eine dumme Frage zurück, warum gibt es dann range() und xrange() parallel??? reicht nicht xrange() alleine? Genrich _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Mal eine dumme Frage zurück, warum gibt es dann range() und xrange() parallel??? reicht nicht xrange() alleine?
xrange() erzeugt keine Liste, sondern liefert einen Iterator, d.h. die Elemente werden ohne den Speicher vollzuschreiben "on the fly" erzeugt. range() liefert eine Liste, was ja auch praktisch sein kann, man muss range() ja nicht zwingend im Zusammenhang mit "for" benutzen. Gruß, Uwe _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Am Tue, 24 Aug 2004 20:29:51 +0200 Schrieb genrich <Genrich@gmx.net>:
Mal eine dumme Frage zurück, warum gibt es dann range() und xrange() parallel??? reicht nicht xrange() alleine?
Genrich
Hi Genrich, manchmal will man vielleicht doch eine echte Liste mit n elementen. Gruß Fritz _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

On Tuesday 24 August 2004 20:19, Georg Mischler wrote:
Olaf 'Rübezahl' Radicke wrote:
Hi! Python versetzt mich doch immer wieder in Erstaunen: Ich wollte ein kurzen Code schreiben der große Zahlen überprüft ob sie Primzahlen sind. Doch es gab Probleme mit Großen Zahlen. So robbte ich langsam ran. Der Folgender Code verursacht 1 % Systemlast und knallt den Speicher mit 80% zu und wird dann nach einiger Zeit ohne zwischen Ergebnisse vom System getötet (Fedora2 GNU/Linux).
<Py-Code> #! /usr/bin/python for i in range(1, 177319754):
Hier erzeugst du im Arbeitsspeicher eine Liste mit 177319754 Elementen. Versuch es stattdessen doch mal mit xrange().
Ah! Das sieht scon besser aus: CPU: 31% RAM: 0,5% Olaf _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hi, es gibt relativ gute Primtests, zB den Miller Rabin Test http://www.google.com/search?q=python+miller+rabin Notfalls hilft auch der prime number shitting bear: http://members.surfeu.fi/kklaine/primebear.html Gruss Frank Olaf 'Rübezahl' Radicke wrote:
Hi! Python versetzt mich doch immer wieder in Erstaunen: Ich wollte ein kurzen Code schreiben der große Zahlen überprüft ob sie Primzahlen sind. Doch es gab Probleme mit Großen Zahlen. So robbte ich langsam ran. Der Folgender Code verursacht 1 % Systemlast und knallt den Speicher mit 80% zu und wird dann nach einiger Zeit ohne zwischen Ergebnisse vom System getötet (Fedora2 GNU/Linux).
<Py-Code> #! /usr/bin/python for i in range(1, 177319754): print i </Py-Code>
Das machte mich stutzig und ich macht das Experiment mit C++
<C++-Code> # include <iostream>
int main(){ for(unsigned long i = 0; i<177319754; ++i){ std::cout << i << std::endl; } return 1; } </C++-Code>
Das Ergebnis war verblüffend. 80% Systemlast und 1,5% landete im RAM. Und es wurde munter Zwischen Ergebnisse ausgespuckt. Nach 5 Min. habe ich das Prog gestoppt weil nichts darauf hin wies das es noch abstürzen würde.
Was macht Python eigendich mit dem ganzen Speiche?
MfG Olaf
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (6)
-
Frank Timmermann
-
Fritz Cizmarov
-
genrich
-
Georg Mischler
-
Olaf 'Rübezahl' Radicke
-
Uwe Schmitt