Quali sono i vantaggi di Python a 64 bit rispetto a Python a 32 bit?

Migliore risposta

** Prima cosa **:

Python a 64 bit può essere installato solo su sistemi a 64 bit, che possono essere installati solo su computer a 64 bit.

** Seconda cosa: **

Dire che il computer / programma è n bit non significa “che utilizza variabili di dimensione n. Significa che può indirizzare fino a 2 ^ n blocchi di memoria (solitamente byte). Questo è il motivo per cui Windows XP, o qualsiasi altro sistema operativo a 32 bit, non può utilizzare più di 3,5 GB di ram. Calcoliamolo: ne abbiamo 32 bit binari, quindi possiamo indirizzare fino a 2 ^ 32 byte. 2 ^ 32 = 4294967296 [byte] = 4096 [MB] = 4 [GB]. Come puoi vedere, in teoria il sistema dovrebbe indirizzare fino a 4 GB di RAM. Questa parte “mancante” di circa 0,5 [GB] viene utilizzata per indirizzare la memoria dei dispositivi PCI (AGP, USB ecc.). Con il sistema a 64 bit, possiamo indirizzare fino a 16777216 [TB] di memoria. Abbastanza interessante, eh?

** tl; dr **

I programmi vengono eseguiti con unistanza a 32 bit di python potrebbe utilizzare fino a (idealmente) 4 [GB] di memoria, che di solito è sufficiente, ma a volte può causare problemi. Daltro canto, listanza a 64 bit di python (quindi anche i programmi vengono eseguiti con esso) può indirizzare e utilizzare una quantità illimitata * di memoria, il che è bello. Ma ancora, alla risposta di Adam Jorgensen: lo stesso programma eseguito su python a 32 e 64 bit utilizzerà la stessa quantità di memoria, purché sia ​​inferiore a circa 4 [GB]. Non sarebbe più lento su 64 bit anche python.

* non è del tutto vero. Vedi la seconda cosa se sei interessato.

Spero che questo aiuti. 🙂

Risposta

La tua domanda mostra una mancanza di comprensione da quello che sta succedendo, quindi mi prenderò il tempo per parlarne in dettaglio.

Nella prima riga, scrivi for loop in range(1, 11). Il nome loop non ha alcun senso. Lintera costruzione è un loop , cioè fai un loop solo una volta attraverso i numeri da 1 a 10. Ciò che hai scritto fa sembrare che tu esegua un loop 10 volte, il che non è vero. Quindi, sebbene il tuo codice sia corretto, il nome della variabile indica una mancanza di comprensione di cosa sta succedendo.

for number in range(1, 11):

print(number)

Lintera cosa (quelle due righe di codice complete) è for loop. Uno for loop.

Io non ” t capire cosa vuoi ottenere con il ciclo while per una serie di motivi. In primo luogo, se vuoi scorrere tutti i numeri e dare allutente la possibilità di uscire dal ciclo dopo ogni numero, puoi semplicemente farlo con un ciclo for.

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

Puoi correggere la stampa di range(1, 11) avvolgendolo in list(), ma non sembra essere quello che vuoi. Presumo che tu voglia fare la stessa cosa del ciclo for, vale a dire stampare ogni numero, ma dando unopzione per uscire dal ciclo dopo ogni numero. Perché altrimenti avresti un ciclo, per stampare la stessa cosa più e più volte di nuovo?

Se non vuoi usare un ciclo for, puoi usare qualcosa come:

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

o

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

Nota luso di iter. range(1, 11) è non un iteratore , ma un iterabile , ovvero un oggetto che può produrre un iteratore . Questa è una distinzione molto sottile ma importante. Un list è un iterabile, ma non un iteratore. Un iteratore mantiene lo stato, il che significa che ricorda quale valore produrre successivamente. Non puoi farlo con un elenco, ma puoi trasformare un elenco in un iteratore.

Ad esempio:

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

Se vuoi sapere come funziona” dietro le quinte “, guardiamo i seguenti esempi:

>>> 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 è un iteratore , poiché mantiene lo stato (ricorda dove si trova, per così dire). In particolare, ha un metodo \_\_next\_\_() definito. Può produrre il valore successivo in qualsiasi momento. È anche un iterabile , poiché ha \_\_iter\_\_( ) metodo definito.

Un generatore è un iteratore che produce pigramente valori, ad esempio:

def counter(current=1):

while True:

yield current

current += 1

E sì, i generatori hanno quindi lo stato:

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

Ciò che è interessante ora è che range è non un generatore , contrariamente alla credenza popolare. range è un iterabile , ma non un iteratore , e quindi sicuramente non un generatore . Potrebbe sembrare fastidioso, ma ci sono alcune buone ragioni per questo (attributi extra come start, stop e step, immutabilità (non può” essere cambiato; affinché qualcosa mantenga lo stato, deve essere mutevole)). Ovviamente è possibile implementare range come generatore:

>>> 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]

Spero di aver fornito informazioni sufficienti per iniziare a capire il tuo problema, piuttosto che limitarti a correggerlo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *