Mejor respuesta
** Lo primero **:
Python de 64 bits solo se puede instalar en un sistema de 64 bits, que solo se puede instalar en una computadora de 64 bits.
** Segunda cosa: **
Decir que la computadora / programa es de n bits no significa que usa variables de tamaño n. Significa que puede direccionar hasta 2 ^ n fragmentos de memoria (generalmente bytes). Es por eso que Windows XP, o cualquier otro sistema operativo de 32 bits, no puede usar más de 3,5 GB de RAM. Calculémoslo: tenemos 32 bits binarios, por lo que podemos direccionar hasta 2 ^ 32 bytes. 2 ^ 32 = 4294967296 [bytes] = 4096 [MB] = 4 [GB]. Como puede ver, teóricamente, el sistema debería abordar hasta 4 GB de RAM. Esta parte «faltante» de aproximadamente 0,5 [GB] se utiliza para direccionar la memoria de los dispositivos PCI (AGP, USB, etc.). Con el sistema de 64 bits, podemos direccionar hasta 16777216 [TB] de memoria. Genial, ¿eh?
** tl; dr **
Los programas se ejecutan con una instancia de 32 bits de python podría usar hasta (idealmente) 4 [GB] de memoria, que suele ser suficiente, pero a veces puede causar problemas. Por otro lado, la instancia de Python de 64 bits (por lo que los programas también se ejecutan con ella) puede abordar y usar una cantidad ilimitada * de memoria, lo cual es bueno. Pero de nuevo, a la respuesta de Adam Jorgensen: el mismo programa que se ejecuta en Python de 32 y 64 bits usará la misma cantidad de memoria, siempre que sea menos de aproximadamente 4 [GB]. No sería más lento en 64 bits Python también.
* No es del todo cierto. Vea lo segundo si está interesado.
Espero que eso ayude. 🙂
Respuesta
Su pregunta muestra una falta de comprensión de lo que está sucediendo, así que me voy a tomar el tiempo para hablar sobre esto en detalle.
En la primera línea, escribe for loop in range(1, 11).
El nombre loop
no tiene ningún sentido. Toda la construcción es un bucle , es decir, recorre solo una vez los números del 1 al 10. Lo que escribió hace que parezca que lo repite 10 veces, lo cual no es cierto. Por lo tanto, si bien su código es correcto, el nombre de la variable indica una falta de comprensión de qué está pasando.
for number in range(1, 11):
print(number)
Todo eso (esas dos líneas completas de código) es el for loop
. Uno for loop
.
Yo no » Entiendo lo que quiere lograr con el ciclo while
por varias razones. En primer lugar, si desea recorrer todos los números y darle al usuario la opción de salir del ciclo después de cada número, simplemente puede hacerlo 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
Puede arreglar la impresión de range(1, 11)
envolviéndola en list()
, pero eso todavía no parece ser lo que desea. Supongo que desea hacer lo mismo que en el ciclo for, es decir, imprimir cada número, pero dando la opción de salir del ciclo después de cada número. ¿Por qué tendría un ciclo de otra manera, para imprimir lo mismo una y otra vez? ¿de nuevo?
Si no desea utilizar un bucle for, puede utilizar algo como:
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
Tenga en cuenta el uso de iter
. range(1, 11)
es no un iterador , pero un iterable , es decir, un objeto que puede producir un iterador . Ésta es una distinción muy sutil pero importante. Un list
es un iterable, pero no un iterador. Un iterador mantiene el estado, lo que significa que recuerda qué valor producir a continuación. No puede hacer eso con una lista, pero puede convertir una lista en un iterador.
Por ejemplo:
>>> 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 quieres saber cómo funciona» bajo el capó «, veamos los siguientes ejemplos:
>>> 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
es un iterador , ya que mantiene el estado (recuerda dónde está, por así decirlo). Específicamente, tiene un método \_\_next\_\_()
definido. Puede producir el siguiente valor en cualquier momento. También es un iterable , ya que tiene el \_\_iter\_\_(
)
método definido.
Un generador es un iterador que produce valores de forma perezosa, por ejemplo:
def counter(current=1):
while True:
yield current
current += 1
Y sí, los generadores tienen el estado:
>>> my\_counter = counter()
>>> next(my\_counter)
1
>>> next(my\_counter)
2
>>> next(my\_counter)
3
Lo que es interesante ahora es que range
es no un generador , contrario a la creencia popular. range
es un iterable , pero no un iterador , y por lo tanto definitivamente no es un generador . Esto puede parecer molesto, pero hay algunas buenas razones para esto (atributos adicionales como start
, stop
y step
, inmutabilidad (no se puede» cambiar; para que algo mantenga el estado, debe ser mutable)). Por supuesto, es posible implementar range
como generador:
>>> 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]
Espero haberle dado suficientes antecedentes para comenzar a comprender su problema, en lugar de simplemente corregirlo.