Функция управления Python ala Matlab
В MATLAB можно создать function handles
с чем-то вроде
[email protected](arglist)body
Таким образом вы можете создавать функции на ходу, не создавая M файлы.
Есть ли эквивалентный способ в Python объявлять функции и переменные в одной строке и вызывать их позже?
Ответы
Ответ 1
Лямбда-функции Python несколько схожи:
In [1]: fn = lambda x: x**2 + 3*x - 4
In [2]: fn(3)
Out[2]: 14
Однако вы можете добиться подобных эффектов, просто определяя fn()
как функцию:
In [1]: def fn(x):
...: return x**2 + 3*x - 4
...:
In [2]: fn(4)
Out[2]: 24
"Нормальные" (в отличие от лямбда) функции более гибкие, поскольку они позволяют условные операторы, циклы и т.д.
Нет необходимости размещать функции внутри выделенных файлов или что-либо еще такого рода.
Наконец, функции в Python являются первоклассными объектами. Это означает, среди прочего, что вы можете передавать их в качестве аргументов в другие функции. Это относится к обоим типам функций, показанным выше.
Ответ 2
Это не совсем полный ответ. В Matlab можно создать файл funct.m:
function funct(a,b)
disp(a*b)
end
В командной строке:
>> funct(2,3)
6
Затем можно создать дескриптор функции, например:
>> myfunct = @(b)funct(10,b))
Тогда можно сделать:
>> myfunct(3)
30
Полный ответ расскажет, как это сделать в python.
Вот как это сделать:
def funct(a,b):
print(a*b)
Тогда:
myfunct = lambda b: funct(10,b)
Наконец:
>>> myfunct(3)
30
Ответ 3
Оказывается, есть что-то, что доходит до 2.5, называемых function partials, которые в значительной степени являются точной аналогией с функциями дескрипторов.
from functools import partial
def myfun(*args, first="first default", second="second default", third="third default"):
for arg in args:
print(arg)
print("first: " + str(first))
print("second: " + str(second))
print("third: " + str(third))
mypart = partial(myfun, 1, 2, 3, first="partial first")
mypart(4, 5, second="new second")
1
2
3
4
5
first: partial first
second: new second
third: third default