최상의 답변
** 먼저 ** :
64 비트 Python은 64 비트 시스템에만 설치할 수 있으며 64 비트 컴퓨터에만 설치할 수 있습니다.
** 두 번째 : **
컴퓨터 / 프로그램이 n 비트라고 말하는 것은 “n 크기의 변수를 사용한다는 의미가 아닙니다. 최대 2 ^ n 개의 메모리 청크 (일반적으로 바이트)를 처리 할 수 있습니다. 이것이 Windows XP 또는 다른 32 비트 운영 체제에서 약 3,5GB 이상의 램을 사용할 수없는 이유입니다. 계산해 보겠습니다. 2 ^ 32 바이트까지 주소를 지정할 수 있습니다. 2 ^ 32 = 4294967296 [바이트] = 4096 [MB] = 4 [GB]. 보시다시피 이론적으로 시스템은 최대 4GB의 램을 처리해야합니다. 약 0.5 [GB]의이 “누락 된”부분은 PCI (AGP, USB 등) 장치 메모리 주소 지정에 사용됩니다. 64 비트 시스템을 사용하면 최대 16777216 [TB]의 메모리를 처리 할 수 있습니다. 멋지죠?
** tl; dr **
프로그램은 파이썬은 (이상적으로는) 4 [GB]의 메모리를 사용할 수 있습니다. 이것은 보통 충분하지만 때때로 문제를 일으킬 수 있습니다. 반면에 64 비트 파이썬 인스턴스 (프로그램도 함께 실행 됨)는 무제한 * 메모리 양을 처리하고 사용할 수 있습니다. 그러나 다시 Adam Jorgensen의 대답에 따르면 32 비트 및 64 비트에서 실행되는 동일한 프로그램 파이썬은 약 4 [GB] 미만인 한 동일한 양의 메모리를 사용합니다. 64 비트에서는 느리지 않습니다. 파이썬도 마찬가지입니다.
* 전적으로 사실이 아닙니다. “만약 당신이 관심을 갖고 있다면 두 번째 일을보십시오.
도움이 되길 바랍니다. 🙂
답변
귀하의 질문은 무슨 일이 일어나고 있는지에 대한 이해가 부족하다는 것을 보여 주므로이 모든 것에 대해 자세히 이야기 할 시간을 가지겠습니다.
첫 번째 줄에 for loop in range(1, 11).
라고 씁니다. loop
라는 이름은 전혀 의미가 없습니다. 전체 구성은 하나의 루프입니다. 즉, 1부터 10까지의 숫자를 한 번만 반복합니다. 작성한 내용은 마치 10 번 반복하는 것처럼 보이지만 사실이 아닙니다. 따라서 코드는 정확하지만 변수 이름은 이해가 부족함을 나타냅니다. 무슨 일이 일어나고 있는지.
for number in range(1, 11):
print(number)
이 두 줄의 코드가 모두 for loop
입니다. 하나는 for loop
입니다.
동의합니다. ” 여러 가지 이유로 while
루프로 달성하고자하는 것을 이해합니다. 첫째, 모든 숫자를 반복하고 사용자에게 각 숫자 다음에 루프를 벗어날 수있는 옵션을 제공하려면 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
range(1, 11)
의 인쇄를 list()
로 래핑하여 수정할 수 있지만 여전히 원하는대로 보이지 않습니다. 나는 당신이 for 루프에서와 같은 일, 즉 각 숫자를 인쇄하기를 원한다고 가정하지만, 각 숫자 다음에 루프에서 벗어날 수있는 옵션을 제공합니다. 왜 그렇지 않으면 동일한 것을 반복해서 인쇄하기 위해 루프가 있습니까? 다시?
for 루프를 사용하지 않으려면 다음과 같이 사용할 수 있습니다.
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
또는
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
iter
. range(1, 11)
는 반복자 가 아닙니다 . 반복 가능 : 반복자 를 생성 할 수있는 개체를 의미합니다. 이것은 매우 미묘하지만 중요한 차이점입니다. list
는 반복 가능하지만 반복자는 아닙니다. 반복자는 상태를 보유합니다. 즉, 다음에 생성 할 값을 기억합니다. 목록으로는 할 수 없지만 목록을 반복자로 바꿀 수는 있습니다.
예 :
>>> 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)
“내부 “에서 어떻게 작동하는지 알고 싶다면 다음 예를 살펴 보겠습니다.
>>> 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
는 상태를 유지하므로 반복자 입니다 (즉, 현재 위치를 기억함). 특히 \_\_next\_\_()
메서드가 정의되어 있습니다. 언제든지 다음 값을 생성 할 수 있습니다. 또한 \_\_iter\_\_(
)
가 있으므로 반복 가능 입니다. 방법이 정의되었습니다.
생성기는 값을 느리게 생성하는 반복기입니다. 예를 들면 다음과 같습니다.
def counter(current=1):
while True:
yield current
current += 1
예, 생성기는 상태를 갖습니다.
>>> my\_counter = counter()
>>> next(my\_counter)
1
>>> next(my\_counter)
2
>>> next(my\_counter)
3
지금 흥미로운 점은 range
가 div가 아님 이라는 것입니다. > generator , 대중적인 믿음과는 반대로. range
는 반복 가능 이지만 반복자