新聞中心
例如下面這個(gè)例子:

在武平等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需搭建網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè),武平網(wǎng)站建設(shè)費(fèi)用合理。
在A.py和C.py?文件都要使用clean_msg?這個(gè)工具函數(shù),那么他們就都要從util.py?中導(dǎo)入clean_msg。這似乎理所當(dāng)然。
但今天我在看icecream/builtins.py[1]源代碼的時(shí)候,突然發(fā)現(xiàn)了一個(gè)高級(jí)用法,可以讓我們使用工具函數(shù)的時(shí)候,就像使用Python的print函數(shù)一樣,不用導(dǎo)入,而是直接使用。
我們先來(lái)看看效果:
大家注意A.py和C.py?,我并沒有導(dǎo)入clean_msg而是直接使用了這個(gè)函數(shù)。并且運(yùn)行完全正常。
關(guān)鍵原理就在入口文件main.py,被我框住的3行:
import builtins
from util import clean_msg
setattr(builtins, 'clean_msg', clean_msg)
在Python里面,所有內(nèi)置的函數(shù)或者類都在builtins?模塊中,因此在代碼里面可以直接使用而不用導(dǎo)入?,F(xiàn)在只需要把我們自定義的工具函數(shù)注冊(cè)到builtins模塊中,就能讓它跟內(nèi)置函數(shù)有相同的效果。
如果想把一個(gè)工具函數(shù)注冊(cè)成為內(nèi)置函數(shù),只需要在入口文件中導(dǎo)入它,然后使用setattr?把它設(shè)置成builtins模塊的一個(gè)屬性。第二個(gè)參數(shù)是你想全局調(diào)用的時(shí)候的名字,第三個(gè)參數(shù)就是你需要注冊(cè)的工具函數(shù)。名字可以跟工具函數(shù)的名字不相同,只要不跟已有的內(nèi)置函數(shù)重復(fù)就好了。
注冊(cè)完成以后,在這個(gè)項(xiàng)目的整個(gè)運(yùn)行時(shí)中,任何.py文件里面都可以直接通過注冊(cè)的名字調(diào)用這個(gè)工具函數(shù),就跟調(diào)用內(nèi)置函數(shù)一樣。
參考資料
[1] icecream/builtins.py: https://github.com/gruns/icecream/blob/master/icecream/builtins.py?
新聞名稱:一日一技:如何讓自己的工具函數(shù)在Python全局可用?
網(wǎng)站URL:http://fisionsoft.com.cn/article/dpeessp.html


咨詢
建站咨詢
