__builtin__
모듈의 많은 "반복자"함수는 실제로 문서가 "함수"라고 말하는 경우에도 유형으로 구현됩니다. 예를 들어 enumerate
을 가져 가세요. 설명서는 다음과 동등하다고 말합니다.파이썬 내장 파이썬 함수는 실제로 어떤 타입입니까?
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
정확히 어떤 방식으로 구현했는지는 분명합니다. 그러나 이전 정의에서 다음 테스트를 실행하여 이것을 얻었습니다.
>>> x = enumerate(range(10))
>>> x
<generator object enumerate at 0x01ED9F08>
내가 예상 한 바가 있습니다. 나는 그것이 오히려 문서 보여줍니다 표준 형태보다
class enumerate:
def __init__(self, sequence, start=0):
# ....
def __iter__(self):
# ...
로 정의되어 있는지 추론이에서
>>> x = enumerate(range(10))
>>> x
<enumerate object at 0x01EE9EE0>
다음 __builtin__
버전을 사용하는 경우 그러나,이 얻을. 이제이 방법이 어떻게 작동하는지 이해하고 표준 인 양식과 어떻게 동등한 지, 제가 알고 싶은 것은 이런 식으로하는 이유입니다. 이 방법이 더 효율적입니까? 그것은 C에서 구현되는 이러한 함수와 관련이 있습니까 (내가 있는지는 모르겠지만 그렇다고 생각합니다)?
차이점이 중요한 경우를 대비하여 Python 2.7.2를 사용하고 있습니다.
미리 감사드립니다.
당신에게 문제가 있습니까? 함수와 클래스는 호출 가능한 객체 일뿐입니다 ... – JBernardo
@JBernardo 거의 모든 상황에서 문제가되지는 않습니다 (그럴 때는 아마도 해킹 된 해킹을 수정해야합니다). 그러나 그것은 여전히 흥미 롭습니다. – delnan
아니요, 물론 아닙니다. 그것의 다만 학문적 인 질문. 발전기를 구현하는 것이 쉽기 때문에 그들의 구현이면에있는 이론적 근거를 알고 싶습니다. 그리고 어쩌면 그것은 내 자신의 발전기를 위해 이렇게해야 하는가?라는 질문에 대한 약간의 통찰력을 줄 것입니다. –