Связанный с, но не явно упомянутый здесь, точно, когда __all__
используется. Это - список строкового определения, какие символы в модуле будут экспортироваться, когда from
будет использоваться на модуле.
, Например, следующий код в foo.py
явно экспорт символы bar
и baz
:
__all__ = ['bar', 'baz']
waz = 5
bar = 10
def baz(): return 'baz'
Эти символы могут тогда быть импортированы как так:
from foo import *
print(bar)
print(baz)
# The following will trigger an exception, as "waz" is not exported by the module
print(waz)
, Если __all__
выше комментируется, этот код тогда выполнится к завершению, поскольку поведение по умолчанию import *
состоит в том, чтобы импортировать все символы, которые не начинаются с подчеркивания от данного пространства имен.
Ссылка: https://ПРИМЕЧАНИЕ docs.python.org/tutorial/modules.html#importing-from-a-package
: __all__
влияние from
поведение только. Участники, которые не упоминаются в [1 111], все еще доступны снаружи модуля и могут быть импортированы с [1 112].
Вы можете использовать itertools.islice
. Это итераторная версия нарезки списка. Если итератор имеет менее 20 элементов, он вернет все элементы.
import itertools
rows = list(itertools.islice(csvreader, 20))
Если по какой-либо причине вам также необходимо отслеживать номер строки, я бы порекомендовал вам:
rows = zip(xrange(20), csvreader)
Если нет, вы можете вырезать его после или ... ну, вы Лучше сначала попробовать другой вариант, более оптимальный: -)
itertools.izip
( 2 ) предоставляет способ легко заставить работать понимание списков, но islice
, похоже, подходит в данном случае.
from itertools import izip
[row for (row,i) in izip(csvreader, range(20))]