NameError: 이름 'xrange'는 Python에서 정의되지 않았습니다.

Salman Mehmood 2024년2월15일
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()는 목록을 반환합니다.

Python2 xrange 및 범위 사용 - 출력

Python3에서 range() 함수는 range() 객체를 반환하는 반면 Python2에서 range() 함수는 목록을 반환합니다. 기본적으로 xrange()는 생성기이고 range()도 Python3에서 생성기입니다.

Python3 사용 범위 - 출력

이제 Python2에 초점을 맞추겠습니다. 우리는 먼저 이 xrange() 객체를 조금 조사하고 싶습니다.

어떤 유형이 있는지, xrange 개체가 있는지 확인합니다.

type(xrange(6))

산출

<type 'xrange'>

다음으로 목록을 감싸면 어떻게 되는지 살펴보겠습니다.

list(xrange(6))

산출

[0, 1, 2, 3, 4, 5]

이제 xrange(6)a라는 변수에 할당하고 range() 객체를 생성하여 b 변수에 할당합니다. sys를 가져와 ab의 크기를 가져옵니다.

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() 함수를 사용할 수 있습니다.

Salman Mehmood avatar Salman Mehmood avatar

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