2012-02-07 2 views
4

Мне нравится Python для его выразительности. Я не могу выразить все так же компактно, как хотелось бы. Например, я пишу довольно часто:повышение выразительности в массиве test test

def is_everything_okay(some_array): 
    for s in some_array: 
     if not is_okay(s): 
     return False 
    return True 

Но это больше Java, то Python. Как улучшить выразительность (и, вероятно, скорость выполнения) этого фрагмента кода?

+0

Вы спрашиваете о 'any()' и 'all()'? –

+0

Является ли лучше в случае раннего ложного результата (который не нуждается в проверках для продолжения? Как правильно сформулировать его? – erikbwork

+0

У вас есть время для подтверждения эффективности. Если это ваш вопрос. –

ответ

5

Используйте встроенную функцию all():

all(is_okay(s) for s in some_array) 
+0

выглядит намного больше, чем я хочу. Это также быстрее или он делает то же самое «под капотом»? – erikbwork

+2

@erikb: Конечно, он делает то же самое - что еще он должен делать? Это немного быстрее, так как i t написано на C, но для этого примера все равно нужно вызвать функцию Python 'is_okay()' для каждого 's'. –

+0

Выполнение этого же в хорошо написанном C, конечно, что-то другое с точки зрения скорости! Также он может быть распараллелен для получения более быстрых результатов с многоядерными процессорами и/или упорядочить/индексировать массив до начала, если он что-то помогает. Понятия не имею! – erikbwork

0

Просто, чтобы заполнить его в ответ * Свена ... Документами 2.7: http://docs.python.org/library/functions.html#all

all(iterable)
Возвращает True, если все элементы итерабельных истинны (или если итерабельность пуста).

Эквивалент:

def all(iterable): 
    for element in iterable: 
     if not element: 
      return False 
return True 

Почти точная копия кода вы показываете ...

Таким образом, используя понимание формы (is_okay(s) for s in some_array) создает итератор, который разбирается all()

Без специального тестирования вы не будете знать, что быстрее.

  • и потому, что я пытаюсь завершить класс Python, я беру и должен ответить на некоторые вопросы!
+0

Не могли бы вы правильно отформатировать код? –

 Смежные вопросы

  • Нет связанных вопросов^_^