Вы можете отобразить список вашей функции, а затем использовать all
, чтобы проверить, если он возвращает True
для каждого элемента:
if all(map(CheckIP, list_of_strings)):
# All strings are good
На самом деле, было бы чище, чтобы просто избавиться от функции CheckIP
и использовать formatCorrect
непосредственно:
if all(map(formatCorrect, list_of_strings)):
# All strings are good
Кроме того, в качестве дополнительного бонуса, all
использует ленивую-оценку. Значит, он проверяет только столько элементов, сколько необходимо, прежде чем возвращать результат.
Однако здесь следует отметить, что более общий подход будет использовать generator expression вместо map
:
if all(formatCorrect(x) for x in list_of_strings):
На мой взгляд, выражения генератора всегда лучше, чем map
, потому что:
Они немного читаемы.
Они такие же быстрые, если не быстрее, чем с использованием map
. Кроме того, в Python 2.x, map
создает объект списка, который часто не нужен (удаляет память). Только в Python 3.x map
использует ленивое вычисление как выражение генератора.
Они более мощные. В дополнение к простому отображению элементов в функцию выражения генератора позволяют выполнять операции над каждым элементом по мере их создания. Например:
sum(x * 2 for x in (1, 2, 3))
Они предпочитают большинство программистов Python. Сохранение с помощью соглашения важно при программировании, поскольку оно облегчает обслуживание и делает ваш код более понятным.
Существует разговоры об удалении таких функций, как map
, filter
и т. Д. Из будущей версии языка. Хотя это не задано в камне, оно появилось много раз в сообществе Python.
Конечно, если вы являетесь поклонником функционального программирования, вы не будете иметь шансов, что вы согласитесь на баллы один и четыре.:)
также быстрое примечание - в вашей 'функции CheckIP', вы на самом деле не нужны' if' заявление, так как вы только возвращение '' true' если formatCorrect 'is True и' False ', если это ложь. Так что вы можете просто сделать return formatCorrect (strN) ' –
В зависимости от задачи подумайте об использовании' filter() ' – tynn
Спасибо Г. Мейеру, хорошее предложение! – liuzhidong