簡體   English   中英

Python:Lambda函數作為一個namedtuple對象?

[英]Python: Lambda function as a namedtuple object?

我寫了一個程序,其中我有一個相當典型的類。 在這個類中,我創建了多個namedtuple對象。 namedtuple對象包含許多項目,除了我嘗試綁定到它的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)

FILE: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論證。

無論如何,您應該創建您創建的命名元組類的實例。 如果你不想讓你的lambdas成為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM