[Python] Специализация функции
От: wagant  
Дата: 06.03.12 11:05
Оценка:
Пусть у нас есть функция
def f(x, a):
    return a * x

Я из функции f(x, a) хочу получить новую функцию g(x) только с одним аргументом x и заранее заданным значением a, т.е. что-то типа
g = f(x, a = 10)

Как это проще всего сделать в Python?
Re: [Python] Специализация функции
От: Daevaorn Россия  
Дата: 06.03.12 11:07
Оценка: 4 (2) +2
Здравствуйте, 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
Re: [Python] Специализация функции
От: monax  
Дата: 06.03.12 11:17
Оценка: +1
Здравствуйте, 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
Re: [Python] Специализация функции
От: LuciferSingapore Россия  
Дата: 06.03.12 11:18
Оценка: +1
Здравствуйте, 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)
Re[2]: [Python] Специализация функции
От: wagant  
Дата: 06.03.12 11:30
Оценка:
Здравствуйте, 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


Спасибо! То, что нужно.
Re[2]: [Python] Специализация функции
От: Daevaorn Россия  
Дата: 06.03.12 16:00
Оценка:
Здравствуйте, 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).
Re[3]: [Python] Специализация функции
От: monax  
Дата: 07.03.12 05:51
Оценка:
Здравствуйте, 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))
Re: [Python] Специализация функции
От: IROV..  
Дата: 08.03.12 11:48
Оценка: +1
Здравствуйте, 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)

проще всего
я не волшебник, я только учусь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.