Hvad er fordelene ved 64-bit Python i forhold til 32-bit Python?

Bedste svar

** Første ting **:

64-bit Python kan kun installeres på 64-bit System, som kun kan installeres på 64-bit computer.

** Anden ting: **

At sige, at computer / program er n-bit betyder ikke, at det bruger variabler af n-størrelse. Det betyder, at det kan adressere op til 2 ^ n hukommelsesbiter (normalt bytes). Derfor er Windows XP eller ethvert andet 32-bit operativsystem ikke mere end 3,5 GB RAM. Lad os beregne det: vi har 32 binære bits, så vi kan adressere op til 2 ^ 32 byte. 2 ^ 32 = 4294967296 [bytes] = 4096 [MB] = 4 [GB]. Som du kan se, skal teoretisk system adressere op til 4 GB ram. Denne “manglende” del af ca. 0,5 [GB] bruges til at adressere PCI-hukommelse (AGP, USB osv.). Med 64-bit system kan vi adressere op til 16777216 [TB] hukommelse. Temmelig cool, hva?

** tl; dr **

Programmer køres med 32-bit instans af python kunne bruge op til (ideelt set) 4 [GB] hukommelse, hvilket normalt er nok, men nogle gange kan det medføre problemer. På den anden måde kan 64-bit forekomst af python (så programmer kører med det også) adressere og bruge ubegrænset * mængde hukommelse, hvilket er rart. Men igen, til Adam Jørgensens svar: det samme program kørt på 32 og 64 bit python bruger den samme mængde hukommelse, så længe det ville være mindre end ca. 4 [GB]. Det ville ikke være langsommere på 64-bit. også python.

* det er ikke helt sandt. Se den anden ting, hvis du er interesseret.

Håber det hjælper. 🙂

Svar

Dit spørgsmål viser en manglende forståelse af, hvad der foregår, så jeg vil tage mig tid til at tale om alt dette detaljeret.

I den første linje skriver du for loop in range(1, 11). Navnet loop giver overhovedet ikke mening. Hele konstruktionen er en sløjfe , dvs. du sløjfer kun én gang gennem tallene fra 1 til 10. Det, du skrev, får det til at virke som om du sløjfer 10 gange, hvilket ikke er sandt. Så mens din kode er korrekt, indikerer navnet på variablen manglende forståelse for hvad sker der.

for number in range(1, 11):

print(number)

Det hele (de to fulde kodelinjer) er for loop. Én for loop.

Jeg don ” t forstå, hvad du vil opnå med while -sløjfen af ​​en række årsager. For det første, hvis du vil gentage alle numrene og give brugeren mulighed for at bryde ud af sløjfen efter hvert nummer, kan du bare gøre det med en for-loop.

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

Du kan rette udskrivningen af ​​range(1, 11) ved at indpakke den i list(), men det ser stadig ikke ud til at være det, du vil have. Jeg antager, at du vil gøre det samme som i for-løkken, nemlig at udskrive hvert nummer, men at give en mulighed for at bryde ud af løkken efter hvert nummer. Hvorfor ville du have en løkke ellers at udskrive den samme ting igen og igen igen?

Hvis du ikke vil bruge en for-loop, kan du bruge noget som:

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

eller

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

Bemærk brugen af ​​iter. range(1, 11) er ikke og iterator , men en iterabel , hvilket betyder et objekt, der kan producere en iterator . Dette er en meget subtil, men vigtig skelnen. En list er en iterabel, men ikke en iterator. En iterator holder tilstand, hvilket betyder at den husker hvilken værdi der skal produceres næste. Du kan ikke gøre det med en liste, men du kan gøre en liste til en iterator.

For eksempel:

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

Hvis du vil vide, hvordan det fungerer” under emhætten “, så lad os se på følgende eksempler:

>>> 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 er en iterator , da den holder tilstand (den husker, hvor den er, for at sige det). Specifikt har den en \_\_next\_\_() -metode defineret. Det kan producere den næste værdi til enhver tid. Det er også en iterabel , da den har \_\_iter\_\_( ) metode defineret.

En generator er en iterator, der dovent producerer værdier, for eksempel:

def counter(current=1):

while True:

yield current

current += 1

Og ja, generatorer har således tilstand:

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

Hvad der er interessant nu er, at range er ikke en generator , i modsætning til almindelig tro. range er en iterabel , men ikke en iterator , og dermed bestemt ikke en generator . Dette kan virke irriterende, men der er nogle gode grunde til dette (ekstra attributter såsom start, stop og step, uforanderlighed (kan ikke ændres; for at noget skal holdes, skal det tå være ændret)). Det er selvfølgelig muligt at implementere range 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]

Jeg håber, jeg har givet tilstrækkelig baggrund til at forstå dit problem snarere end blot at rette det.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *