Как обновить чистую функцию? - PullRequest
4 голосов
/ 21 октября 2019

Я пытаюсь сделать следующее: я хочу написать функцию translate(f, c), которая принимает данную функцию f (скажем, мы знаем, f - это функция от одной переменной x) и константыc и возвращает новую функцию , которая вычисляет f(x+c).

Я знаю, что в Python функции являются объектами первого класса и что я могу передать f в качестве аргумента, ноЯ не могу придумать, как сделать это без прохождения x, что побеждает цель.

Ответы [ 3 ]

6 голосов
/ 21 октября 2019

Хитрость заключается в том, что translate возвращает функцию instance .

def translate(f, c):
    def func(x):
        return f(x + c)
    return func

Теперь переменная x свободна, а имена f и cисходят из ограждающей области.

3 голосов
/ 21 октября 2019

Как насчет этого?

def translate_func(f, c):
    return lambda x: f(x + c)

Для использования, например:

import math


g = translate_func(math.sin, 10)
print(g(1) == math.sin(10 + 1))
# True

РЕДАКТИРОВАТЬ

Обратите внимание, что этот шаблон проектирования функцииВзятие функции в качестве параметра и возвращение другой функции довольно распространено в Python и называется «украшением функции» со связанным синтаксисом удобства. См. PEP318 для получения дополнительной информации об этом.

1 голос
/ 21 октября 2019
def transalte(f, c):
   def _inner(x):
      return f(x+c)
   return _inner
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...