Найти - Пользователи
Полная версия: написать функцию генератор Срочно нужно
Начало » Python для новичков » написать функцию генератор Срочно нужно
1 2
damon
написать функцию генератор с параметром (d) которая возвращает все exe файлы из директории d
Понял что начать надо
def f(d):
сделать надо c помощью yield
JOHN_16
Вам помогут функции os.listdir и сравнение типа filename == ‘.exe’
izekia
есть два варианта, наиболее оптимальный:
 from os import path
from glob import iglob
def f(d):
    yield from iglob(path.join(d, '*.exe'))

но можно и так:
 from os import path
from glob import glob
def f(d):
    for filename in glob(path.join(d, '*.exe')):
        yield filename
проблема в том, что во втором случае мы сразу займем память списком, а в первом будем извлекать значения по одному
JOHN_16
Я думаю это очевидно, что такое решение не примут. Ведь явно задача стоит написать свой генератор, а не взять готовый
Iskatel
izekia
проблема в том, что во втором случае мы сразу займем память списком, а в первом будем извлекать значения по одному

Вот тут большой вопрос…

В первом случае мы извлекаем все
Во втором поэтапно

Но в любом случае системой создается “снапшот” текущего состояния.

Где пруфы, что косяк в питоне, и после полного вычитывания снапшота он не закрывается?

А так “то на то равно” - что читаем с системного снапшота по одной записи, что скидываем снопшот в прогу, и закрываем его…
izekia
Iskatel
Но в любом случае системой создается “снапшот” текущего состояния.

Где пруфы, что косяк в питоне, и после полного вычитывания снапшота он не закрывается?

А так “то на то равно” - что читаем с системного снапшота по одной записи, что скидываем снопшот в прогу, и закрываем его…
я честно три раза перечитал)
Iskatel
izekia
я честно три раза перечитал)

Пояснения требуются или прикол?

Питон такой питон что питон… все системные функции запрашивает у (не поверишь) системы.

Какая разница кто память выделил, системная ф-ция или твоя?
izekia
JOHN_16
Я думаю это очевидно, что такое решение не примут. Ведь явно задача стоит написать свой генератор, а не взять готовый
В смысле?
вместо такого:
 filter(lambda x: x.endswith('.exe'), os.listdir(d))
писать:
 filelist = os.listdir(d)
for fn in (filelist):
    if fn.endswith('.exe'):
        yield fn

задача такая что тут надо быть опытным извращенцем, чтобы код функции больше пяти строк получился
izekia
Iskatel
Питон такой питон что питон… все системные функции запрашивает у (не поверишь) системы.
Какая разница кто память выделил, системная ф-ция или твоя?
а есть кто с диска читают напрямую через порты? про выделение памяти не совсем корректно - это детали реализации, для этой задачи разве это требуется?
JOHN_16
izekia
В смысле?
не использовать модуль glob
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB