gpt4 book ai didi

Python:作为 namedtuple 对象的 Lambda 函数?

转载 作者:太空狗 更新时间:2023-10-30 03:05:01 27 4
gpt4 key购买 nike

我编写了一个程序,其中有一个相当典型的类。在这个类中,我创建了多个 namedtuple 对象。 namedtuple 对象包含许多项,它们都工作正常,除了我尝试绑定(bind)到它的 lambda 函数。下面是一个精简的示例和我收到的错误消息。希望有人知道为什么会出错。提前致谢!

文件:test.py

from equations import *
from collections import namedtuple

class Test:
def __init__(self, nr):
self.obj = self.create(nr)
print self.obj.name
print self.obj.f1(2)

def create(self, nr):
obj = namedtuple("struct", "name f1 f2")
obj.name = str(nr)
(obj.f1, obj.f2) = get_func(nr)
return obj

test = Test(1)

文件:equations.py

def get_func(nr):
return (lambda x: test1(x), lambda x: test2(x))

def test1(x):
return (x/1)

def test2(x):
return (x/2)

错误:

Traceback (most recent call last):
File "test.py", line 17, in <module>
test = Test(1)
File "test.py", line 8, in __init__
print self.obj.f1(2)
TypeError: unbound method <lambda>() must be called with struct instance as first argument (got int instance instead)`

最佳答案

namedtuple() 构造函数返回一个,而不是实例本身。您正在向该类添加方法。因此,您的 lambda 必须接受一个 self 参数。

在任何情况下,您都应该创建您创建的命名元组类的实例。如果你不想给你的 lambda 一个 self 第一个参数,将它们添加到你随后创建的实例中就可以了:

from equations import *
from collections import namedtuple


Struct = namedtuple("struct", "name f1 f2")


class Test:
def __init__(self, nr):
self.obj = self.create(nr)
print self.obj.name
print self.obj.f1(2)

def create(self, nr):
obj = Struct(str(nr), *get_func(nr))
return obj

test = Test(1)

关于Python:作为 namedtuple 对象的 Lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766565/

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