Was sind die Vorteile von 64-Bit-Python gegenüber 32-Bit-Python?

Beste Antwort

** Als erstes **:

64-Bit-Python kann nur auf einem 64-Bit-System installiert werden, das nur auf einem 64-Bit-Computer installiert werden kann.

** Zweitens: **

Zu sagen, dass Computer / Programm n-Bit ist, bedeutet nicht, dass Variablen mit einer Größe von n verwendet werden Es kann bis zu 2 ^ n Speicherblöcke (normalerweise Bytes) adressieren. Aus diesem Grund kann Windows XP oder ein anderes 32-Bit-Betriebssystem nicht mehr als etwa 3,5 GB RAM verwenden. Berechnen wir es: Wir haben 32 Binärbits, so dass wir bis zu 2 ^ 32 Bytes adressieren können. 2 ^ 32 = 4294967296 [Bytes] = 4096 [MB] = 4 [GB]. Wie Sie sehen können, sollte das System theoretisch bis zu 4 GB RAM adressieren. Dieser „fehlende“ Teil von ca. 0,5 [GB] wird zum Adressieren des Speichers von PCI-Geräten (AGP, USB usw.) verwendet. Mit einem 64-Bit-System können wir bis zu 16777216 [TB] Speicher adressieren. Ziemlich cool, oder?

** tl; dr **

Programme, die mit einer 32-Bit-Instanz von ausgeführt werden Python kann bis zu (idealerweise) 4 [GB] Speicher belegen, was normalerweise ausreicht, aber manchmal Probleme verursachen kann. Auf der anderen Seite kann eine 64-Bit-Instanz von Python (also auch Programme, die damit ausgeführt werden) eine unbegrenzte * Speichermenge adressieren und verwenden, was sehr schön ist. Aber noch einmal zu Adam Jorgensens Antwort: Dasselbe Programm, das auf 32- und 64-Bit-Python ausgeführt wird, benötigt dieselbe Speichermenge, solange es weniger als etwa 4 [GB] beträgt. Bei 64-Bit wäre es nicht langsamer Python auch.

* es ist nicht ganz wahr. Siehe Zweitens, wenn Sie interessiert sind.

Hoffe, das hilft. 🙂

Antwort

Ihre Frage zeigt einen Mangel an Verständnis für die Vorgänge, daher werde ich mir die Zeit nehmen, um ausführlich darüber zu sprechen.

In der ersten Zeile schreiben Sie for loop in range(1, 11). Der Name loop macht überhaupt keinen Sinn. Die gesamte Konstruktion besteht aus einer Schleife Das heißt, Sie durchlaufen die Zahlen von 1 bis 10 nur einmal. Was Sie geschrieben haben, lässt es so erscheinen, als würden Sie 10 Mal durchlaufen, was nicht der Fall ist. Während Ihr Code korrekt ist, weist der Name der Variablen auf ein Unverständnis von hin Was ist los?

for number in range(1, 11):

print(number)

Diese ganze Sache (diese zwei vollständigen Codezeilen) ist die for loop. Eine for loop.

I don “ Ich verstehe aus mehreren Gründen nicht, was Sie mit der Schleife while erreichen möchten. Erstens, wenn Sie alle Zahlen durchlaufen und dem Benutzer die Möglichkeit geben möchten, nach jeder Zahl aus der Schleife auszubrechen, können Sie dies einfach mit einer for-Schleife tun.

for number in range(1, 11):

print(number)

user\_input = input("Do you want to break? (Y/N)")

if user\_input.lower().startswith("y"): #allow for variations and upper/lower case

break

Sie können den Druck von range(1, 11) korrigieren, indem Sie ihn in list() einschließen, aber das scheint immer noch nicht das zu sein, was Sie wollen. Ich gehe davon aus, dass Sie das Gleiche wie in der for-Schleife tun möchten, nämlich jede Zahl drucken, aber die Option geben, nach jeder Zahl aus der Schleife auszubrechen. Warum sollten Sie sonst eine Schleife haben, um immer wieder dasselbe zu drucken? wieder?

Wenn Sie keine for-Schleife verwenden möchten, können Sie Folgendes verwenden:

current = 1

while True:

print(current)

current += 1

user\_input = input("Do you want to break? (Y/N)")

if user\_input.lower().startswith("y") or current == 10:

break

oder

numbers = iter(range(1, 11))

while True:

current = next(numbers)

print(current)

user\_input = input("Do you want to break? (Y/N)")

if user\_input.lower().startswith("y") or current == 10: #avoid StopIteration

break

Beachten Sie die Verwendung von iter. range(1, 11) ist nicht ein Iterator , aber ein iterable , dh ein Objekt, das einen Iterator erzeugen kann. Dies ist eine sehr subtile, aber wichtige Unterscheidung. Ein list ist ein iterierbarer, aber kein Iterator. Ein Iterator enthält den Status, dh er merkt sich, welcher Wert als Nächstes erzeugt werden soll. Sie können dies nicht mit einer Liste tun, aber Sie können eine Liste in einen Iterator verwandeln.

Zum Beispiel:

>>> my\_list = [1, 2, 3, 4, 5]

>>> my\_list\_iterator = iter(my\_list)

>>> first\_value = next(my\_list\_iterator)

>>>

>>> first\_value

1

>>> second\_value = next(my\_list\_iterator)

>>> second\_value

2

>>> type(my\_list)

>>> type(my\_list\_iterator)

Wenn Sie wissen möchten, wie es“ unter der Haube „funktioniert, sehen wir uns die folgenden Beispiele an:

>>> class Counter:

... def \_\_init\_\_(self, start=1):

... self.current = start

... def \_\_next\_\_(self):

... value = self.current

... self.current += 1

... return value

... def \_\_iter\_\_(self):

... return self

...

>>> my\_counter = Counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

my\_counter ist ein Iterator , da er den Status hält (er merkt sich sozusagen, wo er sich befindet). Insbesondere ist eine \_\_next\_\_() -Methode definiert. Es kann jederzeit den nächsten Wert erzeugen. Es ist auch eine iterable , da es die \_\_iter\_\_( ) hat Methode definiert.

Ein Generator ist ein Iterator, der träge Werte erzeugt, zum Beispiel:

def counter(current=1):

while True:

yield current

current += 1

Und ja, Generatoren haben also den Status:

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

Interessant ist jetzt, dass range nicht ein Generator , entgegen der landläufigen Meinung. range ist ein iterierbarer , aber kein Iterator und somit definitiv kein Generator . Dies mag ärgerlich erscheinen, aber es gibt einige gute Gründe dafür (zusätzliche Attribute wie start, stop und step, Unveränderlichkeit (kann nicht geändert werden; damit etwas den Zustand beibehält, muss es veränderbar sein)). Es ist natürlich möglich, range als zu implementieren Generator:

>>> def my\_range\_generator(start, stop, step=1):

... current = start

... while current

... yield current

... current += step

...

>>> test\_range = my\_range\_generator(1, 11, 2)

>>> list(test\_range)

[1, 3, 5, 7, 9]

Ich hoffe, ich habe genügend Hintergrundinformationen gegeben, um Ihr Problem zu verstehen, anstatt es nur zu beheben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.