gpt4 book ai didi

python-3.x - 如何使用运算符来组合函数?

转载 作者:行者123 更新时间:2023-12-04 11:56:03 24 4
gpt4 key购买 nike

编写一个由其他两个函数组成的函数是相当简单的。 (为简单起见,假设它们各有一个参数。)

def compose(f, g):
fg = lambda x: f(g(x))
return fg

def add1(x):
return x + 1

def add2(x):
return x + 2

print(compose(add1, add2)(5)) # => 8
我想使用运算符进行组合,例如 (add1 . add2)(5) .
有没有办法做到这一点?
我尝试了各种装饰器配方,但我无法让它们中的任何一个起作用。
def composable(f):
"""
Nothing I tried worked. I won't clutter up the question
with my failed attempts.
"""

@composable
def add1(x):
return x + 1

最佳答案

首先,Python 语法中只允许使用一定数量的运算符符号。点“.”不是有效的运算符。

This page (该页面实际上是关于Python operator模块,但命名约定与datamodel相同,内容更有条理)列出了所有可用的操作符和相应的实例方法。例如,如果你想使用“@”作为操作符,你可以像这样写一个装饰器:

import functools

class Composable:

def __init__(self, func):
self.func = func
functools.update_wrapper(self, func)

def __matmul__(self, other):
return lambda *args, **kw: self.func(other.func(*args, **kw))

def __call__(self, *args, **kw):
return self.func(*args, **kw)


去测试:
@Composable
def add1(x):
return x + 1

@Composable
def add2(x):
return x + 2

print((add1 @ add2)(5))
# 8

关于python-3.x - 如何使用运算符来组合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54153527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com