필자는 "readlines() 메소드가 이제 반복자를 반환하므로 Python 2에서 xreadlines()가 사용 된 것과 똑같은 효율성을가집니다"라는 "Python 3으로 다이브"를 읽었습니다. 여기를 참조하십시오 : http://diveintopython3.org/porting-code-to-python-3-with-2to3.html. 그들이 여기에 언급하지 않기 때문에 그것이 사실이라는 것을 나는 확신하지 못한다 : http://docs.python.org/release/3.0.1/whatsnew/3.0.html. 어떻게 확인할 수 있습니까? readlines 메쏘드 방법은 파이썬 3에서 반복자를 반환하지 않습니다readlines()는 파이썬 3에서리스트 또는 반복자를 반환합니까?
23
A
답변
17
:
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('/junk/so/foo.txt')
>>> type(f.readlines())
<class 'list'>
>>> help(f.readlines)
Help on built-in function readlines:
readlines(...)
Return a list of lines from the stream.
hint can be specified to control the number of lines read: no more
lines will be read if the total size (in bytes/characters) of all
lines so far exceeds hint.
>>>
24
, 그것은
Help on built-in function readlines:
readlines(...)
Return a list of lines from the stream.
그냥 대화 형 세션에서 호출 확인하려면 목록을 반환 - 오히려 반복자보다, 목록을 반환에게 :
>>> type(f.readlines())
<class 'list'>
이 경우에는 다이빙이 잘못된 것처럼 보입니다. 파일 객체가 자신의 반복자를되었을 때
xreadlines
xreadlines
과 동일한 효율을 얻을 수있는 방법은 대신 사용하는 것입니다
for line in f.xreadlines():
for line in f:
이 당신에게 당신이 원하는 반복자를 가져오고 readlines
는 변경하지 않은 이유를 설명하는 데 도움이 그 Python 3에서의 동작 - 여전히 전체 목록을 반환 할 수 있으며 line in f
관용구는 반복적 인 접근 방식을 제공하고 오래 사용되지 않는 xreadlines
은 완전히 제거되었습니다. 이처럼
7
다른 사람이 이미 많이했다,하지만 바로 포인트 집으로 운전, 일반 파일 객체는 자신의 반복자입니다. 따라서 readlines()
을 반환하는 것은 반복자가 어리석은 일이 될 것입니다. 반복자가 호출 한 파일을 반환하기 때문입니다. 스콧이 말한 것처럼 당신은 파일을 반복하는 for
루프를 사용할 수 있으며, 또한 itertools 기능에 바로 전달할 수 있습니다
from itertools import islice
f = open('myfile.txt')
oddlines = islice(f, 0, None, 2)
firstfiveodd = islice(oddlines, 5)
for line in firstfiveodd:
print(line)
관련 문제
- 1. 파이썬 반복자를 거꾸로 만드시겠습니까?
- 2. 파이썬 또는
- 3. 객체가 반복자를 구현하거나 반복자를 구현하는 다른 객체를 포함해야합니까?
- 4. C# : 함수에서 dbnull.value 또는 system.type을 반환합니까?
- 5. SQLite에 "insert"가 SQLITE_OK 또는 SQLITE_DONE을 반환합니까?
- 6. @@ identity가 기본 키 또는 ID 필드를 반환합니까?
- 7. 데이터베이스가 개체 또는 배열로 레코드를 반환합니까?
- 8. C 조건문은 항상 1 또는 0을 반환합니까?
- 9. std :: stack은 반복자를 노출합니까?
- 10. 반복자를 복제하는 방법은 무엇입니까?
- 11. 반복자를 사용하여 컬렉션 채우기
- 12. C++ : 반복자를 비트로 구성하기
- 13. 반복자를 무효화하는 방법은 무엇입니까?
- 14. 난 그냥지도 반복자를 선언하려고
- 15. foreach 또는 람다 스타일로 자바 스타일 반복자를 변경하십시오
- 16. 어떻게 hash_map의 키로 반복자를 만들겠습니까?
- 17. "또는 죽을()"파이썬
- 18. 파이썬 : 상속 또는 구성
- 19. 반복자를 사용하지 않고 목록을 필터링
- 20. 반복자를 통한 벡터의 인쇄 크기
- 21. for 루프 안에 반복자를 선언해야합니까?
- 22. 반복자를 사용하여 컨테이너 요소 지우기
- 23. 터미널에서 반복자를 걷는 파일 시스템
- 24. 반복자를 사용하는 데 도움이 필요합니다.
- 25. C++ 또는 파이썬 :을 bruteforce는
- 26. PHP로 파이썬 또는 펄 통합하기
- 27. 파이썬 : elif 또는 new if?
- 28. 삽입 반복자를 C++로 삽입하는 방법
- 29. 반복자를 사용하여 트리 집합의 다음 요소를 엿보기
- 30. 이 함수는 무엇을 반환합니까?
내가 기대하는 f.xreadlines에서 줄을'사용하던 사람() :'는''f :'년 전에 'for line in for :'으로 변환 할 것입니다. –
@John Machin : Python 2에서 'xreadlines'이 선호되는 방법이라는 것을 의미하지는 않습니다. Python 2에서는 더 이상 사용되지 않을 것입니다. 파일 - 이터레이터 (iterator) 메소드가 도입되었습니다. 방금 파이썬 3에서 제거 될 수있는 이유를 설명하려고했습니다. –
1 주일 전에 필자가 직접 파일을 자신의 반복자로 발견했습니다. (필자는 1.5 이후에 튜토리얼/릴리스 노트를 보지 못했다고 생각합니다.) – wbg