Care sunt avantajele Python pe 64 de biți față de Python pe 32 de biți?

Cel mai bun răspuns

** Primul lucru **:

Python pe 64 de biți poate fi instalat numai pe un sistem pe 64 de biți, care poate fi instalat numai pe computerul pe 64 de biți.

** Al doilea lucru: **

A spune că computerul / programul este n-bit nu înseamnă că folosește variabile de dimensiune n. Înseamnă că poate adresa până la 2 ^ n bucăți de memorie (de obicei octeți). Acesta este motivul pentru care Windows XP sau orice alt sistem de operare pe 32 de biți nu poate folosi mai mult de aproximativ 3,5 GB RAM. Să calculăm: avem 32 biți binari, deci putem adresa până la 2 ^ 32 octeți. 2 ^ 32 = 4294967296 [octeți] = 4096 [MB] = 4 [GB]. După cum puteți vedea, teoretic sistemul ar trebui să abordeze până la 4 GB de RAM. Această parte „lipsă” de aproximativ 0,5 [GB] este utilizată pentru a adresa memoria dispozitivelor PCI (AGP, USB etc.). Cu sistemul pe 64 de biți, putem adresa până la 16777216 [TB] de memorie. Destul de grozav, nu?

** tl; dr **

Programele rulează cu instanță pe 32 de biți de python ar putea utiliza până la (în mod ideal) 4 [GB] de memorie, ceea ce este de obicei suficient, dar uneori poate cauza probleme. Pe de altă parte, instanța python pe 64 de biți (deci și programele rulează cu ea) poate adresa și utiliza o cantitate nelimitată de memorie, ceea ce este frumos. Dar, din nou, la răspunsul lui Adam Jorgensen: același program rulat pe 32 și 64 biți python va folosi aceeași cantitate de memorie, atâta timp cât ar fi mai puțin de aproximativ 4 [GB]. Nu ar fi mai lent pe 64 biți și python.

* nu este complet adevărat. Consultați al doilea lucru dacă sunteți interesat.

Sper că vă va ajuta. 🙂

Răspuns

Întrebarea dvs. arată o lipsă de înțelegere din ceea ce se întâmplă, așa că voi lua timp să vorbesc despre toate acestea în detaliu.

În prima linie, scrieți for loop in range(1, 11). Numele loop nu are deloc sens. Întreaga construcție este o buclă , adică faceți o buclă o singură dată prin numerele de la 1 la 10. Ceea ce ați scris face să pară că faceți o buclă de 10 ori, ceea ce nu este adevărat. Deci, în timp ce codul dvs. este corect, numele variabilei indică o lipsă de înțelegere a ce se întâmplă.

for number in range(1, 11):

print(number)

Întregul lucru (acele două linii complete de cod) este for loop. Un for loop.

Nu ” Înțelegeți ce doriți să obțineți cu bucla while din mai multe motive. În primul rând, dacă doriți să repetați toate numerele și să dați utilizatorului opțiunea de a ieși din buclă după fiecare număr, puteți face acest lucru pur și simplu cu o buclă 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

Puteți remedia tipărirea range(1, 11) înfășurându-l în list(), dar acest lucru încă nu pare să fie ceea ce doriți. Presupun că doriți să faceți același lucru ca și în bucla for, și anume imprimarea fiecărui număr, dar oferind o opțiune de a ieși din buclă după fiecare număr. De ce ați avea o buclă altfel, pentru a imprima același lucru din nou și din nou din nou?

Dacă nu doriți să utilizați o buclă for, puteți utiliza ceva de genul:

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

sau

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

Rețineți utilizarea iter. range(1, 11) nu nu este un iterator , ci un iterabil , adică un obiect care poate produce un iterator . Aceasta este o distincție foarte subtilă, dar importantă. Un list este un iterabil, dar nu un iterator. Un iterator deține starea, ceea ce înseamnă că își amintește ce valoare să producă în continuare. Nu puteți face asta cu o listă, dar puteți transforma o listă într-un iterator.

De exemplu:

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

Dacă doriți să știți cum funcționează„ sub capotă ”, să examinăm următoarele exemple:

>>> 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 este un iterator , deoarece deține starea (își amintește unde este, ca să spunem așa). Mai exact, are definită o metodă \_\_next\_\_(). Poate produce următoarea valoare în orice moment. De asemenea, este un iterabil , deoarece are \_\_iter\_\_( ) metodă definită.

Un generator este un iterator care produce leneș valori, de exemplu:

def counter(current=1):

while True:

yield current

current += 1

Și da, generatoarele au astfel starea:

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

Ceea ce este interesant acum este că range nu este nu un generator , contrar credinței populare. range este un iterabil , dar nu un iterator și, prin urmare, cu siguranță nu este un generator . Acest lucru poate părea enervant, dar există câteva motive întemeiate pentru acest lucru (atribute suplimentare, cum ar fi start, stop și step, imuabilitate (nu se poate schimba; pentru ca ceva să se mențină în stare, trebuie să fie modificabil)). Desigur, este posibil să implementați range ca 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]

Sper că am primit suficiente informații pentru a începe să înțeleg problema dvs., mai degrabă decât să o corectați.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *