Какой самый простой способ создать пустую итерацию, используя yield в Python?

sed -n -e '/-- Table structure for table `my_table_name`/,/UNLOCK TABLES/p' database_file.sql > table_file.sql

Это лучшее решение, чем некоторые из вышеперечисленных, потому что не все SQL-дампы содержат инструкцию DROP TABLE. Это будет работать всевозможные свалки.

23
задан Adam Lindberg 16 May 2012 в 15:20
поделиться

6 ответов

Да, есть:

return iter([])
24
ответ дан James Youngman 16 May 2012 в 15:20
поделиться

Вы можете использовать функции lambda и iter для создания пустой итерируемой в Python.

my_iterable = lambda: iter(())
11
ответ дан octopusgrabbus 16 May 2012 в 15:20
поделиться

Как насчет

my_iterable = str

это проходит ваш тест.

Если говорить серьезно, Iterable в модуле коллекций обеспечивает:

def __iter__(self):
    while False:
        yield None

Это можно считать «наиболее питоническим», потому что это то, что использует сам Python.

Обратите внимание, что технически все ответы до сих пор предоставляют итераторов (__iter__ + next), а не итераций (просто __iter__).

6
ответ дан georg 16 May 2012 в 15:20
поделиться

Другое решение в Python 3 состоит в том, чтобы использовать новый синтаксис yield from:

def empty_gen():
    yield from ()

, который читается, и сохранить empty_gen в качестве генератора.

6
ответ дан aluriak 16 May 2012 в 15:20
поделиться
def do_yield():
    return
    yield None

, если для вас важно использовать yield, другой ответит иначе.

1
ответ дан glglgl 16 May 2012 в 15:20
поделиться

Другой ответ, так как я предоставляю совершенно новое решение с другим подходом.

В одной из библиотек у меня есть EmptyIterator, например,

class EmptyIter(object):
    __name__ = 'EmptyIter'
    """Iterable which is False and empty"""
    def __len__(self): return 0
    def next(self): raise StopIteration # even that is redundant
    def __getitem__(self, index): raise IndexError

. Это альтернативный подход, который использует следующие свойства:

  • альтернативная итерация через протокол последовательности (см. здесь )
  • альтернативный протокол «фальши», как описано здесь .
0
ответ дан glglgl 16 May 2012 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: