Quels sont les avantages de Python 64 bits par rapport à Python 32 bits?

Meilleure réponse

** Première chose **:

Python 64 bits ne peut être installé que sur un système 64 bits, qui ne peut être installé que sur un ordinateur 64 bits.

** Deuxième chose: **

Dire que lordinateur / programme est à n bits ne signifie pas quil utilise des variables de taille n. Cela signifie que il peut adresser jusquà 2 ^ n blocs de mémoire (généralement des octets). Cest pourquoi Windows XP, ou tout autre système dexploitation 32 bits ne peut pas utiliser plus de 3,5 Go de RAM. Calculons-le: nous en avons 32 bits binaires, nous pouvons donc adresser jusquà 2 ^ 32 octets. 2 ^ 32 = 4294967296 [octets] = 4096 [Mo] = 4 [Go]. Comme vous pouvez le voir, en théorie, le système devrait gérer jusquà 4 Go de RAM. Cette partie « manquante » denviron 0,5 [Go] est utilisée pour adresser la mémoire des périphériques PCI (AGP, USB, etc.). Avec un système 64 bits, nous pouvons adresser jusquà 16777216 [To] de mémoire. Assez cool, hein?

** tl; dr **

Les programmes fonctionnent avec une instance 32 bits de python pourrait utiliser jusquà (idéalement) 4 [Go] de mémoire, ce qui est généralement suffisant, mais peut parfois causer des problèmes. Dun autre côté, une instance 64 bits de python (donc les programmes fonctionnent avec lui aussi) peut adresser et utiliser une quantité illimitée * de mémoire, ce qui est bien. Mais encore une fois, à la réponse dAdam Jorgensen: le même programme exécuté sur 32 et 64 bits python utilisera la même quantité de mémoire, tant quelle serait inférieure à environ 4 [Go]. Il ne serait pas plus lent sur 64 bits python aussi.

* Ce nest pas tout à fait vrai. Voir Deuxième chose si vous « êtes intéressé.

Jespère que cela vous aidera. 🙂

Réponse

Votre question montre un manque de compréhension de ce qui se passe, donc je vais prendre le temps de parler de tout cela en détail.

Sur la première ligne, vous écrivez for loop in range(1, 11). Le nom loop na pas du tout de sens. Lensemble de la construction est une boucle , cest-à-dire que vous ne parcourez quune seule fois les nombres de 1 à 10. Ce que vous avez écrit donne limpression que vous faites une boucle 10 fois, ce qui nest pas vrai. Donc, même si votre code est correct, le nom de la variable indique un manque de compréhension de ce qui se passe.

for number in range(1, 11):

print(number)

Tout cela (ces deux lignes complètes de code) est le for loop. Un for loop.

Je ne le fais pas  » Je ne comprends pas ce que vous voulez réaliser avec la boucle while pour un certain nombre de raisons. Premièrement, si vous voulez parcourir tous les nombres et donner à lutilisateur la possibilité de sortir de la boucle après chaque nombre, vous pouvez simplement le faire avec une boucle 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

Vous pouvez corriger limpression de range(1, 11) en lenveloppant dans list(), mais cela ne semble toujours pas être ce que vous voulez. Je suppose que vous voulez faire la même chose que dans la boucle for, à savoir imprimer chaque nombre, mais en donnant une option pour sortir de la boucle après chaque nombre. Pourquoi auriez-vous une boucle sinon, pour imprimer la même chose encore et encore encore?

Si vous ne voulez pas utiliser de boucle for, vous pouvez utiliser quelque chose comme:

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

ou

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

Notez lutilisation de iter. range(1, 11) est pas un itérateur , mais un itérable , cest-à-dire un objet qui peut produire un itérateur . Cest une distinction très subtile mais importante. Un list est un itérable, mais pas un itérateur. Un itérateur contient létat, ce qui signifie quil se souvient de la valeur à produire ensuite. Vous ne pouvez pas faire cela avec une liste, mais vous pouvez transformer une liste en itérateur.

Par exemple:

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

Si vous voulez savoir comment cela fonctionne » sous le capot « , regardons les exemples suivants:

>>> 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 est un itérateur , car il détient un état (il se souvient où il se trouve, pour ainsi dire). Plus précisément, une méthode \_\_next\_\_() est définie. Il peut produire la valeur suivante à tout moment. Il est également un itérable , car il a le \_\_iter\_\_( ) méthode définie.

Un générateur est un itérateur qui produit paresseusement des valeurs, par exemple:

def counter(current=1):

while True:

yield current

current += 1

Et oui, les générateurs ont donc létat:

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

Ce qui est intéressant maintenant, cest que range est pas un générateur , contrairement aux idées reçues. range est un itérable , mais pas un itérateur , et donc certainement pas un générateur . Cela peut sembler ennuyeux, mais il y a de bonnes raisons à cela (des attributs supplémentaires tels que start, stop et step, immuabilité (ne peut » pas être changé; pour que quelque chose conserve son état, il doit être mutable)). Il est bien sûr possible dimplémenter range en tant que générateur:

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

Jespère avoir donné suffisamment de renseignements pour commencer à comprendre votre problème, plutôt que de simplement le corriger.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *