裝飾器(無參)
? 它是一個函數(shù)
? 函數(shù)作為它的形參
? 返回值也是一個函數(shù)
裝飾器和高階函數(shù)
? 裝飾器是高階函數(shù),但裝飾器是對傳入函數(shù)的功能的裝飾(功能增強)
帶參裝飾器
? 它是一個函數(shù)
? 函數(shù)作為它的形參
? 返回值是一個不帶參的裝飾器函數(shù)
? 使用@functionname(參數(shù)列表)方式調用
? 可以看做在裝飾器外層又加了一層函數(shù)
函數(shù)注解
? Python 3.5引入
? 對函數(shù)的參數(shù)進行類型注解
? 對函數(shù)的返回值進行類型注解
? 只對函數(shù)參數(shù)做一個輔助的說明,并不對函數(shù)參數(shù)進行類型檢查
? 提供給第三方工具,做代碼分析,發(fā)現(xiàn)隱藏的bug
? 函數(shù)注解的信息,保存在annotations屬性中
函數(shù)參數(shù)類型檢查
? 思路
? 函數(shù)參數(shù)的檢查,一定是在函數(shù)外
? 函數(shù)應該作為參數(shù),傳入到檢查函數(shù)中
? 檢查函數(shù)拿到函數(shù)傳入的實際參數(shù),與形參聲明對比
? annotations屬性是一個字典,其中包括返回值類型的聲明。假設要做位置參數(shù)的判斷,無
法和字典中的聲明對應。使用inspect模塊
inspet模塊
? 提供獲取對象信息的函數(shù),可以檢查函數(shù)和類、類型檢查
signature(callable),獲取簽名(函數(shù)簽名包含了一個函數(shù)的信息,包括函數(shù)名、它的參數(shù)類型、它所在的類和名稱空間及其他信息)
? inspect.isfunction(add),是否是函數(shù)
? inspect.ismethod(add)),是否是類的方法
? inspect.isgenerator(add)),是否是生成器對象
? inspect.isgeneratorfunction(add)),是否是生成器函數(shù)
? inspect.isclass(add)),是否是類
? inspect.ismodule(inspect)),是否是模塊
? inspect.isbuiltin(print)),是否是內建對象
Parameter對象
? 保存在元組中,是只讀的
? name,參數(shù)的名字
? annotation,參數(shù)的注解,可能沒有定義
? default,參數(shù)的缺省值,可能沒有定義
? empty,特殊的類,用來標記default屬性或者注釋annotation屬性的空值
? kind,實參如何綁定到形參,就是形參的類型
functools模塊
? reduce方法
? reduce方法,顧名思義就是減少
? 可迭代對象不能為空;初始值沒提供就在可迭代對象中取一個元素
partial方法
? 偏函數(shù),把函數(shù)部分的參數(shù)固定下來,相當于為部分的參數(shù)添加了一個固定的默認值,形成一
個新的函數(shù)并返回
? 從partial生成的新函數(shù),是對原函數(shù)的封裝
lru_cache裝飾器
? 通過一個字典緩存被裝飾函數(shù)的調用和返回值
裝飾器應用練習
? 二、寫一個命令分發(fā)器
? 程序員可以方便的注冊函數(shù)到某一個命令,用戶輸入命令時,路由到注冊的函數(shù)
? 如果此命令沒有對應的注冊函數(shù),執(zhí)行默認函數(shù)
? 用戶輸入用input(">>")
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞標題:裝飾器,functools,參數(shù)注解-創(chuàng)新互聯(lián)
URL標題:http://muchs.cn/article10/pohgo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、網(wǎng)站維護、商城網(wǎng)站、品牌網(wǎng)站設計、用戶體驗、外貿網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)