gpt4 book ai didi

python 捕捉功能

转载 作者:行者123 更新时间:2023-11-28 16:48:26 25 4
gpt4 key购买 nike

我编写了以下有效的代码。

from operator import mul
from operator import truediv #python 3.2

class Vec(list):

def __mul__(self, other):
return Vec(map(mul, self, other))

def __truediv__(self, other):
return Vec(map(truediv, self, other))


>>> xs = Vec([1,2,3,4,5])
>>> ys = Vec([4,5,6,7,4])
>>> zs = xs * ys
>>> zs.__class__
<class 'vector.Vec'>
>>> zs
[4, 10, 18, 28, 20]

但是否有可能创建这样的东西:

class Vec(list):

allowed_math = [__add__, __mul__, __truediv__, __subtract__] # etc

def __catchfunction__(self, other, function):
if function in allowed_math:
return Vec(map(function, self, other))

澄清一下,这并不是我要重新创建 NumPy,我只是想了解如何使用 Python。

最佳答案

实现预期效果的一个选项是:

class Vec(list):
pass

functions = {"__add__": operator.add,
"__mul__": operator.mul,
"__truediv__": operator.truediv,
"__sub__": operator.sub}
for name, op in functions.iteritems():
setattr(Vec, name, lambda self, other, op=op: Vec(map(op, self, other)))

请注意,op=op 参数是必要的,以避免 lambda 函数成为 op 上的闭包。

不过,使用 NumPy 可能会好得多 – 它提供了比您能够在纯 Python 中自行创建的更加通用和高效的数值数组实现。

关于 python 捕捉功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208502/

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