Я изучаю питон, и эта вещь меня сбивает с толку. Не было бы лучше, если бы итератор и файловый объект были разными, поэтому мы можем поддерживать несколько итераций в файлах. Итак, почему файловые объекты python имеют собственные итераторы?Почему объекты файлов имеют собственные итераторы в python?
ответ
Поскольку ваша ОС не позволяет вам это делать, а также потому, что файлы на диске - это не поддержка файлов файлов Python only type of I/O10. Файлы являются потоками данных и обрабатываются так же, как и другие источники потока, такие как розетки и трубки.
Потоки ведут себя точно так же, как итераторы, за исключением того, что файл на диске также может поддерживать поиск. Сетевые сокеты и трубки, с другой стороны, не поддерживают поиск, но для ОС и Python это также потоки или файлы.
Эта абстракция позволяет применять множество оптимизаций для обработки файлов (и потоков) и фактически является де-факто способом поиска файлов в течение десятилетий.
Python может обрабатывать объекты файла диска по-разному и открывать несколько дескрипторов файловой системы ОС для данного файлового объекта Python. Но это было бы довольно неэффективно; узким местом является связь с диском, и хотя ваша ОС может накапливать данные по мере того, как они поступают с жесткого диска, вы должны, как правило, избегать, читающих один и тот же файл более одного раза.
Кроме того, есть проблемы с , написание на диск. ОС уже требует указать режим файла; чтения или записи. Вы можете открыть дескриптор файла, который может сделать то и другое, но тогда ОС, возможно, придется обрабатывать кеширование по-другому, так как нужно учитывать, что ваш файл может быть изменен, когда вы снова читаете одни и те же биты. Python должен был бы реплицировать все это, если бы разрешалось использование нескольких итераторов, в которых вы также пишете поток.
вы могли бы уменьшить это до «Потому что кто-то сказал так давно». (+1 все равно: P) –
Я действительно не понял, почему can not file object и file iterator - две разные вещи, чтобы мы могли вызвать iter (файл-объект) для создания нескольких итераторов файлов, как и списки? –
@ShikharSrivastava: потому что не все объекты файлов поддерживают поиск или несколько итераторов, а потому, что поддержка этого варианта использования будет способствовать неэффективной обработке файлов. Прочитайте один раз при обработке, избегайте повторного чтения. –
- 1. Почему интерфейсы JDBC имеют объекты
- 2. Расширение JavaScript собственные объекты
- 3. Объекты делятся своими методами или имеют свои собственные
- 4. Вызывающие несколько итераторы на xrange объекты
- 5. Почему некоторые итераторы libstdC++ имеют оператор ++, но не оператор +?
- 6. итераторы в Python Dict
- 7. Сравнение итераторы в Python
- 8. Python: Хорошая практика поместить объекты в свои собственные модули?
- 9. Статическое поведение итераторы в Python
- 10. Почему примитивные типы в C# имеют свои собственные операции?
- 11. Элементы JSON имеют собственные страницы
- 12. Итераторы сохраняют память в Python?
- 13. Почему эти объекты имеют разные функции-конструкторы?
- 14. Почему объекты программного обеспечения имеют наименьший объем?
- 15. Почему Итераторы обозначены как объекты значений, но указаны как указатели?
- 16. Итераторы Java LinkedList: Почему они возвращают только объекты?
- 17. Собственные объекты в сборке мусора Objective-C
- 18. Почему некоторые собственные потоки имеют трассировку стека без кода начала?
- 19. Почему итераторы несовместимы?
- 20. Почему итераторы несовместимы?
- 21. Почему первые два элемента управления формой имеют свои собственные линии?
- 22. Почему итераторы не копируются?
- 23. Почему частные итераторы?
- 24. Можно перезапустить итераторы в Python?
- 25. Итераторы стиля Python в C
- 26. Почему функции Python имеют имя?
- 27. Почему API-интерфейсы sql имеют отдельные объекты соединения и курсора?
- 28. где java хранить собственные объекты
- 29. Axis2 не возвращает собственные объекты
- 30. Почему форматы файлов имеют магические числа?
Что именно вы подразумеваете под «множественной итерацией в файлах»? – vaultah
@ 61612: 'iter (fileobj)' затем перебираем это и он будет независим от другого 'iter (fileobj)'. –
Это то, что позволяет 'file.seek'. –