1. 程式人生 > >Python之類方法,lambda,閉包簡談

Python之類方法,lambda,閉包簡談

def turn 函數 pass strong tro cme fun 直接

類方法,lambda,閉包

  • 類方法
  • lambda
  • 閉包

類方法

  • classmethod
  • staticmethod
  • instancemethod

類方法

類方法,通過裝飾器@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之類方法,lambda,閉包簡談