"Python 3'e Dive" yazısını okudum "readlines() yöntemi şimdi bir yineleyici döndürüyor, bu yüzden xreadlines() Python 2'de olduğu kadar verimli." Bakınız: http://diveintopython3.org/porting-code-to-python-3-with-2to3.html. Bunun doğru olduğundan emin değilim çünkü burada bahsetmiyorlar: http://docs.python.org/release/3.0.1/whatsnew/3.0.html. Bunu nasıl kontrol edebilirim? readlines yöntem Python 3'te bir yineleyici döndürmezOkuyucular() Python 3'te bir liste veya bir yineleyici döndürüyor mu?
cevap
:
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.
>>>
, bu
Help on built-in function readlines:
readlines(...)
Return a list of lines from the stream.
sadece interaktif oturumdan diyoruz, kontrol etmek listemizi döndürür - oldukça bir yineleyici yerine, bir liste döndürür: Bu durumda Python'a dalmak yanlış görünüyor gibi görünmektedir. dosya nesneleri kendi yineleyicinızı olunca
xreadlines
xreadlines
aynı verimi almanın yolu kullanmak yerine ise
for line in f.xreadlines():
for line in f:
Bu size istediğiniz yineleyici alır ve readlines
değiştirmeye gerek yoktu açıklamaya yardımcı olmaktadır onun Python 3'teki davranış - yinelemeli yaklaşımı veren line in f
deyimiyle tam bir listeye dönebilir ve uzun zamandır belirtilen xreadlines
tamamen kaldırılmıştır. Bunun gibi
Diğerleri zaten kadar söylediler, ama sadece de önemini vurgulamak için, sıradan dosya nesneleri kendi yineleyiciler bulunmaktadır. Yani, readlines()
bir yineleyiciye geri dönmek aptalca olacaktır, çünkü sadece aradığınız dosyayı döndürecektir. Scott söylediğin gibi, bir dosyaya yineleme yapmak için bir for
döngü kullanabilir ve aynı zamanda itertools işlevlerine düz onları geçirebilirsiniz:
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. PHP - bir yöntem bir işaretçi döndürüyor mu?
- 2. Python Özel Yineleyici: StopIteration'da bir dosyayı kapatın
- 3. AppWidgetManager.getAppWidgetIds etkinliğinde boş bir liste döndürüyor
- 4. Python: bir liste
- 5. Bu "[:: - 1]" neden Python'da tersine dönmüş bir liste döndürüyor?
- 6. document.getElementBy, bir dom dom öğesini döndürüyor mu?
- 7. LINQ, koleksiyonun bir kopyasını döndürüyor mu?
- 8. VBScript işlevi bir sözlük döndürüyor mu?
- 9. R'de bir fonksiyon iki vektörü döndürüyor mu?
- 10. Hazırda bekletme Özel sorgu, bir Liste yerine bir Harita döndürüyor mu?
- 11. Bu geçersiz & (* _ shmItr) == NULL Burada _shmItr bir Liste yineleyici
- 12. Birkaç sıralı liste üzerinde bir yineleyici nasıl yapılır?
- 13. Python, bir liste aktarma ve bir CSV dosyasına yazma
- 14. tür açıklamaları bir yineleyici
- 15. Python yineleyici nesnesinin dizinini alın
- 16. ElementTree findall() boş liste döndürüyor
- 17. Liste seçimi durduruluyor mu?
- 18. Python aşağı doğru veya özel bir adımla numaralandırıyor
- 19. Python itertools.product ile bir liste oluşturuyor?
- 20. Python için Game veya Challenge gibi bir RoboCode mu?
- 21. Google guava ImmutableList eşittir Yöntemi, java.utils.List, Liste-Arabirim sözleşmesinin kırılmasından farklı bir sonuç döndürüyor mu?
- 22. Rust, vektör bir yineleyici mi?
- 23. Daha anlamlı python yineleyicileri nasıl yapılır? Sadece C++ yineleyici gibi
- 24. python dosyasındaki bir dosyayı okuduktan sonra bir sözcük listesi döndürüyor
- 25. Çoklu Veri Okuyucular Kullanılıyor
- 26. Özel yineleyici BOOST_FOREACH ile çalışmıyor mu?
- 27. uzun tamsayı okuyucular
- 28. Bir sınıfı bir dict veya liste olarak temsil edin
- 29. Python liste
- 30. NHibernate, bir yineleyici olmadan bir koleksiyon kaydedebilir mi?
Ben bekleneceği f.xreadlines kuyruk için 'kullanıyordum herkes() : 'yıl önce f: 'için satırına çevirdi. –
@John Machin: Ben de öyle umuyorum (belki de beklemeyin!) Python 2'de bunu yapmak için xreadlines'ın tercih edilen yol olduğunu ima etmeyi istemedim - Python 2.3'te geri dönüşü engellenmişti. dosya-yineleyici yöntemi tanıtıldı. Sadece Python 3'te kaldırılabilmesinin nedenini vermek istedim. –
Sadece bir hafta önce kendi dosyalarının kendi yineleyicileri olduğunu keşfettim :(Bu, 1.5'den beri öğretici/sürüm notlarına bakmama yardım ediyor sanırım. – wbg