Python之类方法,lambda,闭包

发布时间:2019-05-11 22:23:17编辑:auto阅读(1827)

    类方法,lambda,闭包


    类方法


    类方法

    类方法,通过装饰器@classmethod来标明,可以通过实例对象或类对象直接调用的方法。

    class MyClass(object):
        def __init__(self):
            pass
        
        def imethod(self):
            pass
        
        @classmethod
        def cmethod(cls):
            pass

    __init__方法是实例方法,其只在实例化对象的时候才会调用。而类方法cmethod()则是在实例对象时可以调用,直接用类调用也可以调用。

    m = MyClass()  # __init__ 初始化方法调用
    MyClass.cmethod() # 通过类即可调用 类方法
    m.cmethod()  # 实例对象也可以调用 类方法
    m.imethod()  # 实例方法仅能对象实例对象调用

    实例方法

    实例方法相比于类方法,因为其仅能在通过实例对象来调用,无法直接通过类对象调用,即不加@classmethod@staticmethod的方法

    
    class Myclass(object):
        def __init__(self):
            pass
        
        def test1(self):
            pass
        
        def test2(self):
            pass

    上面demo中__init__test1test2都是实例方法,仅能通过实例对象来调用


    静态方法

    静态方法如同普通的函数,其调用可以直接通过类、实例对象来调用,不可以直接调用,即直接使用方法名来调用是不可以的。

    # coding: utf-8
    class MyClass(object):
        def __init__(self):
            pass
    
        @staticmethod
        def smethod1():
            pass
           
        def test():
            self.smethod1()
    
    
    if __name__ == '__main__':
        MyClass.smethod1()  # 通过类对象来调用
        m = MyClass()   
        m.smethod1()  # 通过实例对象来调用 
        m.test()  # 另一种通过实例对象来调用静态方法

    类方法,实例方法和静态方法的调用区别

    • 类方法:通过 实例对象和类调用
    • 实例方法: 仅能通过实例对象调用
    • 静态方法:通过类或实例对象调用,不可以直接调用

    lambda

    from functools import reduce
    
    
    def myadd(x, y):
        return x+y
    
    
    mlist = list(map(lambda x: x**2, [i for i in range(20)]))
    flist = list(filter(lambda x: (x%3) == 0, [i for i in range(20)]))
    r = reduce(myadd, [i for i in range(20)])
    
    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
    print(mlist)
    # [0, 3, 6, 9, 12, 15, 18]
    print(flist)
    # 190
    print(r)

    lambda匿名函数,其短小精悍,现写现用,不用另外编写一个函数。如上所示
    map返回是一个迭代器,list负责将生成器转变为列表
    filter返回的是一个生成迭代器,其将函数里荷合条件的数据拿出来,换成map执行以上代码,将返回bool
    reduce返回也是一个迭代器,在这个例子中,数据在myadd不断迭代相加,得到数值190python2是可以直接使用,python3其在functools中。


    闭包

    理解:后面会补充
    参考资料

    # coding: utf-8
    
    
    def close(mss):
        def hello(name):
            print(mss, name)
        return hello
    
    
    h = close("你好!")
    h("小伟")
    h("小小伟")
    """
    你好! 小伟
    你好! 小小伟
    """

关键字

上一篇: python_面向对象笔记

下一篇: python