Пусть у нас есть функция
def f(x, a):
return a * x
Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
g = f(x, a = 10)
Как это проще всего сделать в Python?
Здравствуйте, wagant, Вы писали:
W>Пусть у нас есть функция
W>W>def f(x, a):
W> return a * x
W>
W>Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
W>W>g = f(x, a = 10)
W>
W>Как это проще всего сделать в Python?
http://docs.python.org/library/functools.html#functools.partial
Здравствуйте, wagant, Вы писали:
W>Пусть у нас есть функция
W>W>def f(x, a):
W> return a * x
W>
W>Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
W>W>g = f(x, a = 10)
W>
W>Как это проще всего сделать в Python?
def spam(x, a):
return x * a
eggs = lambda x: spam(x, 10)
print(eggs(2))
>> 20
Здравствуйте, wagant, Вы писали:
W>Пусть у нас есть функция
W>W>def f(x, a):
W> return a * x
W>
W>Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
W>W>g = f(x, a = 10)
W>
W>Как это проще всего сделать в Python?
g = lambda x: f(x, a=10)
Здравствуйте, Daevaorn, Вы писали:
D>Здравствуйте, wagant, Вы писали:
W>>Пусть у нас есть функция
W>>W>>def f(x, a):
W>> return a * x
W>>
W>>Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
W>>W>>g = f(x, a = 10)
W>>
W>>Как это проще всего сделать в Python?
D>http://docs.python.org/library/functools.html#functools.partial
Спасибо! То, что нужно.
Здравствуйте, monax, Вы писали:
M>M>def spam(x, a):
M> return x * a
M>eggs = lambda x: spam(x, 10)
M>print(eggs(2))
>>> 20
M>
У использования lambda есть как минимум один недостаток при использовании диначиеских значений, а не констант (10).
Здравствуйте, Daevaorn, Вы писали:
D>У использования lambda есть как минимум один недостаток при использовании диначиеских значений, а не констант (10).
Есть, но он решаем. Точнее, я бы сказал, что недостаток в некоторой неочевидности такого решения, а не в невозможности создать лямбду с динамическим значением переменной.
#!/usr/bin/env python
#-*-coding:utf-8-*-
def spam(x, y):
"""docstring for spam"""
return x * y
eggs = []
# вот тут проблема, о которой ты говоришь
for p2 in range(5):
eggs.append(lambda p1: spam(p1, p2))
# вот тут она решается
for p2 in range(5):
eggs.append(lambda p1, p2=p2: spam(p1, p2))
for e in eggs:
print(e(4))
Здравствуйте, wagant, Вы писали:
W>Пусть у нас есть функция
W>W>def f(x, a):
W> return a * x
W>
W>Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
W>W>g = f(x, a = 10)
W>
W>Как это проще всего сделать в Python?
>>> def f(x, a):
... return a * x
...
>>> def g(x):
... return f(x,10)
проще всего