Python3高級用法綜合舉例

[本文出自天外歸雲的博客園]python

舉例

下面代碼圍繞一個Student類綜合舉例說明裝飾器、生成器、動態獲取/添加類成員、列表推導式、reduce函數、lambda表達式的實際應用:git

from functools import reduce

def show(func):
    def wrapper(_object):
        print([i for i in func(_object)])
    return wrapper

@show
def generator(_object):
    for attr in _object.__dict__:
        yield(attr,_object.__dict__[attr])

class Student(object):
    def __init__(self, **kwargs):
        for key,value in kwargs.items():
            if not hasattr(self,key):
                setattr(self,key,value)

    def show_info(func):
        def wrapper(self):
            print(func(self))
        return wrapper

    @show_info
    def info(self):
        info = [str(k)+":"+str(v) for k, v in self.__dict__.items()]
        return reduce((lambda x,y:x+" "+y), info)

if __name__ == '__main__':
    s = Student(score=1,name="asdfa",school="anda")
    generator(s)
    s.score=11
    s.info()

這個Student類的功效是:能夠動態的添加任意數量的成員變量,而且提供信息打印的方法。github

運行結果:數據結構

 

高級用法簡介

1. 裝飾器:經過函數嵌套的方式,以被裝飾函數做爲裝飾器函數入參,用函數修飾函數的一種方法。上面代碼中的show和show_info函數都是裝飾器;app

2. 生成器:經過for循環調用yield函數生產出一個可迭代的結果集,能夠將生成器當作一個生產者。上面的代碼中generator就是一個生產者,他的修飾器函數show中對他的生產結果進行了消費。能夠把show函數理解爲消費者;ide

3. 動態獲取/添加類成員:分別是上面代碼中的hasattr函數和setattr函數;函數

4. 列表推導式:一種for循環生成列表的pythonic寫法,如上面代碼中show函數中print的部分和show_info函數中的info的值的部分都用到了列表推導式;學習

5. 函數reduce:這個函數能夠結合lambda表達式來使用,按照lambda表達式中定義的規則對列表中的全部元素進行運算並返回一個值;spa

6. 表達式lambda:一個lambda表達式就表明一個匿名函數,如上面代碼中reduce函數中的部分,定義了一個入參爲x和y,函數體爲x+" "+y的匿名函數,這個函數體的計算結果也是lambda表達式的返回值。code

 

另外:

1. 須要從數據結構兩端取數據或append的時候能夠用from collections import deque,雙向隊列;

2. 自省對象的方法有inspect和dir。

 

學習更多python高級用法,推薦閱讀:

《Python進階》中文版

相關文章
相關標籤/搜索