Вот общий подход, который применяется к числам, строкам, вложенным спискам и смешанным контейнерам.
Код
from collections import Iterable
def flatten(items):
"""Yield items from any nested iterable; see Reference."""
for x in items:
if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
for sub_x in flatten(x):
yield sub_x
else:
yield x
Примечание: в Python 3, yield from flatten(x)
может заменить for sub_x in flatten(x): yield sub_x
Демо
lst = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
list(flatten(lst)) # nested lists
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
mixed = [[1, [2]], (3, 4, {5, 6}, 7), 8, "9"] # numbers, strs, nested & mixed
list(flatten(mixed))
# [1, 2, 3, 4, 5, 6, 7, 8, '9']
Ссылка
Вы можете использовать что-то вроде Travis-CI и запускать pylint
как часть ваших тестов по строкам:
language: python
install: "pip install nose pylint"
script: "nosetests && pylint"
Конечно, это не удается для незначительных стилистических нарушений - вы, вероятно, захотите отключить определенные сообщения или использовать pylint --errors-only
, чтобы сделать его менее строгим
У меня был тот же вопрос, и я только что нашел этот пост в блоге , описывающий проект под названием pylint-server для выполнения чего-то подобного (хотя он был запущен на событиях сборки CSR Travis, а не тянет).
Из README:
Маленькое приложение Flask, чтобы отслеживать отчеты и рейтинги pylint на основе каждого репозитория.
blockquote>Я еще не пробовал, поэтому я не могу прокомментировать его качество. Если кто-нибудь попробует, прокомментируйте и сообщите нам, как вам это нравится.