List comprehensions. В Python они выглядят что-то вроде:
a = [f(x) for x in bar]
где Р (х) есть некоторая функция и бар последовательность.
Вы можете определить F (X) в виде частично прикладной функции с конструкцией, как:
def foo(x):
return lambda f: f*x
которая возвращает функцию, которая умножает параметр х. Тривиальный пример такого типа конструкции, используемый в списке понимании выглядит следующим образом:
>>> def foo (x):
... return lambda f: f*x
...
>>> a=[1,2,3]
>>> fn_foo = foo(5)
>>> [fn_foo (y) for y in a]
[5, 10, 15]
Хотя я не представляю себе, используя этот вид конструкции в любых, но довольно эзотерических случаях. Python не является истинным функциональным языком, поэтому у него меньше возможностей делать умные трюки с более высокими функциями порядка, чем (скажем) Haskell. Вы можете найти приложения для этого типа конструкции, но это не действительно , что pythonic. Вы можете достичь простое преобразование с чем-то вроде:
>>> y=5
>>> a=[1,2,3]
>>> [x*y for x in a]
[5, 10, 15]
foo (x, другойVar)? –
Спасибо, это довольно хороший синтаксис. –
Mykola: В зависимости от того, что вы хотите, я бы сказал y = 4; a = [f (x, y) для x в баре] или a = [f (x, y) для x, y в zip (bar, baz)]. Также см. Izip. –