Discuss / Python / 一直对lambda表达式存在疑惑

一直对lambda表达式存在疑惑

Topic source

Alian

#1 Created at ... [Delete] [Delete and Lock User]

class ListMetaclass(type):

    def __new__(cls, name, bases, attrs):

        attrs['add'] = lambda self, value: self.append(value)

        return type.__new__(cls, name, bases, attrs)

1.如上面的代码中attrs['add'] = lambda self, value: self.append(value),self和value从哪里如何传入该表达式?

2.所有lambda表达式都能写成def定义函数的形式吗?如果能的话,上面那句lambda表达式该如何转换为一个函数。如def fun(*args): ...... ,然后attr['add'] = func。

Alian

#2 Created at ... [Delete] [Delete and Lock User]

明白了,回看了前面定制类章节的内容。

YYJ

#3 Created at ... [Delete] [Delete and Lock User]

好歹说下呀,我还没懂,哈哈。太可恶了。

YYJ

#4 Created at ... [Delete] [Delete and Lock User]

不懂不要说话呀大哥,和定制类有什么关系呢?我看了好几遍定制类也没看出来,正解如下。

def add(self, value):

    self.append(value)

class ListMetaclass(type):

    def __new__(cls, name, bases, attrs):

        # print(cls)

        # print(name)

        # print(bases)

        # print(type(attrs))

        # attrs['add'] = lambda self, value: self.append(value)

        attrs['add'] = add

        attrs['name'] = 'Tom'

        return type.__new__(cls, name, bases, attrs)

class MyList(list, metaclass = ListMetaclass):  # 额外增加add方法,实际等价于append。

    pass

mli = MyList()

mli.add(1)

mli.add(2)

mli.add(3)

print(mli.name)

print(mli)


  • 1

Reply