NameError: 이름 'xrange'는 Python에서 정의되지 않았습니다.
Python3에서 xrange()
함수를 호출할 때 오류가 발생하는 이유를 알아보고 이 문제를 해결하는 방법을 알아봅니다. 또한 range()
와 xrange()
의 차이점을 배우고 다양한 Python 버전에서 range()
함수를 사용하는 방법을 알아봅니다.
NameError: name 'xrange' is not defined
xrange()
함수 Python3 사용 시
Python2에서 Python3로의 전환의 큰 부분은 xrange()
함수가 더 이상 Python3에 존재하지 않는다는 것입니다. Python2와 Python3를 나란히 사용하고 비교하여 두 버전의 Python에서 range()
와 xrange()
의 차이점을 확인합니다.
먼저 xrange()
함수를 사용할 수 있는 Python2 환경을 사용하지만 Python2 환경에도 range()
함수가 있습니다. 이러한 기능이 약간 다르게 작동하는 것을 볼 수 있습니다. xrange()
는 xrange()
객체를 반환하고 range()
는 목록을 반환합니다.
Python3에서 range()
함수는 range()
객체를 반환하는 반면 Python2에서 range()
함수는 목록을 반환합니다. 기본적으로 xrange()
는 생성기이고 range()
도 Python3에서 생성기입니다.
이제 Python2에 초점을 맞추겠습니다. 우리는 먼저 이 xrange()
객체를 조금 조사하고 싶습니다.
어떤 유형이 있는지, xrange
개체가 있는지 확인합니다.
type(xrange(6))
산출
<type 'xrange'>
다음으로 목록을 감싸면 어떻게 되는지 살펴보겠습니다.
list(xrange(6))
산출
[0, 1, 2, 3, 4, 5]
이제 xrange(6)
를 a
라는 변수에 할당하고 range()
객체를 생성하여 b
변수에 할당합니다. sys
를 가져와 a
와 b
의 크기를 가져옵니다.
Python 셸에서 이 코드를 실행하면 두 변수 크기 간에 큰 차이가 있음을 알 수 있습니다.
>>> import sys
>>> a=xrange(6)
>>> b=range(6)
>>> sys.getsizeof(a)
32
>>> sys.getsizeof(b)
112
xrange()
객체는 range()
보다 크기가 작기 때문에 xrange()
가 range()
보다 빠릅니다.
더 빠른 실행으로 인해 초보자들은 일반적으로 Python3에서 xrange()
함수를 사용하려고 시도하고 Python3에서 xrange()
함수를 지원하지 않기 때문에 오류(name 'xrange' is not defined
)가 발생합니다.
# in python 3
xrange(6)
출력:
NameError: name 'xrange' is not defined
Python3에서 xrange()
객체는 range()
객체가 되었습니다.
# in python 3
>>> range(6)
range(0, 6)
Python3에서 목록 및 range()
개체의 크기를 확인하기 위해 sys
를 가져오겠습니다.
# in python 3
>>> a=range(6)
>>> b=[0,1,2,3,4,5]
>>> import sys
>>> sys.getsizeof(a)
48
>>> sys.getsizeof(b)
152
우리는 목록과 훨씬 더 비슷한 48개를 얻었습니다. Python2의 xrange()
와 Python3의 range()
가 비슷한 속도로 실행되고 비슷한 양의 메모리 공간을 차지한다는 것을 알 수 있습니다.
Python3 환경에서는 우리가 말했듯이 xrange()
가 더 이상 존재하지 않기 때문에 xrange()
함수를 사용할 수 없습니다. Python3으로 만들어진 적이 없습니다. Python3에서는 range()
함수가 훨씬 빠르기 때문에 xrange()
대신 range()
함수를 사용할 수 있습니다.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn관련 문장 - Python Error
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.