Quais são as vantagens do Python de 64 bits em relação ao Python de 32 bits?

Melhor resposta

** Primeira coisa **:

O Python de 64 bits pode ser instalado apenas no sistema de 64 bits, que pode ser instalado apenas no computador de 64 bits.

** Segunda coisa: **

Dizer que o computador / programa tem n bits não significa que ele usa variáveis ​​de tamanho n. Isso significa que ele pode endereçar até 2 ^ n blocos de memória (geralmente bytes). É por isso que o Windows XP, ou qualquer outro sistema operacional de 32 bits não pode usar mais do que cerca de 3,5 GB de RAM. Vamos calcular: temos 32 bits binários, para que possamos endereçar até 2 ^ 32 bytes. 2 ^ 32 = 4294967296 [bytes] = 4096 [MB] = 4 [GB]. Como você pode ver, teoricamente o sistema deveria endereçar até 4 GB de RAM. Essa parte “ausente” de cerca de 0,5 [GB] é usada para endereçar memória de dispositivos PCI (AGP, USB etc.). Com o sistema de 64 bits, podemos endereçar até 16777216 [TB] de memória. Muito legal, hein?

** tl; dr **

Programas executados com instância de 32 bits de O python pode usar até (idealmente) 4 [GB] de memória, o que normalmente é suficiente, mas às vezes pode causar problemas. Por outro lado, a instância de 64 bits do python (para que os programas também sejam executados com ele) pode endereçar e usar uma quantidade ilimitada * de memória, o que é bom. Mas, novamente, à resposta de Adam Jorgensen: o mesmo programa executado em python de 32 e 64 bits usará a mesma quantidade de memória, desde que seja inferior a cerca de 4 [GB]. Não seria mais lento em 64 bits python também.

* não é totalmente verdade. Veja a segunda coisa se você estiver interessado.

Espero que ajude. 🙂

Resposta

Sua pergunta mostra uma falta de compreensão do que está acontecendo, então vou reservar um tempo para falar sobre tudo isso em detalhes.

Na primeira linha, você escreve for loop in range(1, 11). O nome loop não faz sentido. A construção inteira é um loop , ou seja, você faz um loop apenas uma vez pelos números de 1 a 10. O que você escreveu faz parecer que você faz um loop 10 vezes, o que não é verdade. Portanto, embora seu código esteja correto, o nome da variável indica uma falta de compreensão de o que está acontecendo.

for number in range(1, 11):

print(number)

Essa coisa toda (essas duas linhas completas de código) é o for loop. Um for loop.

Eu não ” t entenda o que você deseja alcançar com o loop while por uma série de razões. Em primeiro lugar, se você deseja iterar por todos os números e dar ao usuário a opção de sair do loop após cada número, você pode simplesmente fazer isso com um loop 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

Você pode consertar a impressão de range(1, 11) envolvendo-o em list(), mas ainda não parece ser o que você deseja. Presumo que você queira fazer a mesma coisa que no loop for, ou seja, imprimir cada número, mas dando a opção de quebrar o loop após cada número. Por que você faria um loop de outra forma, para imprimir a mesma coisa repetidamente de novo?

Se você não quiser usar um loop for, pode usar 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

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

Observe o uso de iter. range(1, 11) é não um iterador , mas um iterável , significando um objeto que pode produzir um iterador . Esta é uma distinção muito sutil, mas importante. Um list é um iterável, mas não um iterador. Um iterador mantém o estado, o que significa que ele lembra qual valor produzir a seguir. Você não pode fazer isso com uma lista, mas pode transformar uma lista em um iterador.

Por exemplo:

>>> 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 você quiser saber como funciona” nos bastidores “, vejamos os seguintes exemplos:

>>> 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 é um iterador , uma vez que mantém o estado (lembra onde está, por assim dizer). Especificamente, ele tem um método \_\_next\_\_() definido. Ele pode produzir o próximo valor em qualquer ponto. Também é um iterável , uma vez que tem o \_\_iter\_\_( ) método definido.

Um gerador é um iterador que preguiçosamente produz valores, por exemplo:

def counter(current=1):

while True:

yield current

current += 1

E sim, os geradores têm estado:

>>> my\_counter = counter()

>>> next(my\_counter)

1

>>> next(my\_counter)

2

>>> next(my\_counter)

3

O que é interessante agora é que range é não um gerador , ao contrário da crença popular. range é um iterável , mas não um iterador e, portanto, definitivamente não é um gerador . Isso pode parecer irritante, mas existem alguns bons motivos para isso (atributos extras como start, stop e step, imutabilidade (não pode” ser alterado; para algo manter o estado, ele precisa ser mutável)). É claro que é possível implementar range como um gerador:

>>> 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 ter fornecido informações suficientes para começar a entender o seu problema, em vez de apenas corrigi-lo.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *