3

Как я должен сделать функцию с меньшей размерностью, чем оригинал по фиксируя аргумента этого:ограничения функции фиксируя аргумент

Например, я хочу, чтобы сделать функцию преемника из функции суммы следующим образом:

def add(x,y): 
    return x+y 

Теперь я ищу что-то вроде этого:

г = е (~ 1), который был бы функции последования, то есть г (х) = х + 1.

+1

def g (x): return add (x, 1) - любая проблема с этим подходом? – sashkello

ответ

7

Вы можете написать свою собственную функцию:

def g(y): 
    return f(2, y) 

Или более кратко:

g = lambda y: f(2, y) 

Там также functools.partial:

import functools 

def f(x, y): 
    return x + y 

g = functools.partial(f, 2) 

Вы можете назвать это, как и раньше:

>>> g(3) 
5 
+0

'g = functools.partial (f, 2)', и вы можете использовать непосредственно 'g (3)'. – MarianD

+0

@MarianD: Спасибо, исправлено. – Blender

+0

Спасибо за вашу оценку. – MarianD

2

Если вы делаете больше, чем немного, тогда вы можете использовать что-то вроде декоратора.

def with_x(x, fn, name=None): 
    def foo(*args, **kwargs): 
    return fn(x, *args, **kwargs) 
    if name: 
    foo.__name__ = name 
return foo 

def example(x,y): 
    return x**y 

g = with_x(2, example) 

g(3) #8 

Используйте имя = параметр, если вы заботитесь о имени результирующей функции. Вы можете полюбить других хаков во встроенную функцию, возможно, используя , если необходимо, проверьте модуль. Но тогда вы переписали ранее упомянутый компонент functools, чтобы избежать необходимости давать аргументы ключевого слова.

Смежные вопросы