去年做那個(gè)網(wǎng)站致富google官網(wǎng)注冊(cè)賬號(hào)入口
? ? __ init__.py 的作用及其用法: 包下的__init__.py 所在目錄是一個(gè)模塊包,本身也是一個(gè)模塊,可用于定義模糊導(dǎo)入時(shí)要導(dǎo)入的內(nèi)容。當(dāng)我們導(dǎo)入一個(gè)包的時(shí)候,包下的__init__.py中的代碼會(huì)自動(dòng)執(zhí)行,因此在某些大的項(xiàng)目被使用頻率較高的模塊,我們也可以用于批量導(dǎo)入模塊。
? ? 首先創(chuàng)建一個(gè)名為 package5的包,這個(gè)包的__init__.py 也自動(dòng)生成,再創(chuàng)建 init_test.py。 創(chuàng)建子包 package_init, 同樣這個(gè)包的__init__.py 也自動(dòng)生成,最后創(chuàng)建 init_demo1.py 和 init_demo2.py
? ? 分別給 init_demo1.py 和 init_demo2.py 隨意加一個(gè)str
? ? 當(dāng)在 init_test.py 中 執(zhí)行模糊導(dǎo)入 from package5.package_init import * 后,打印 init_demo1 的 str1 和 init_demo2 的 str2 變量時(shí),都會(huì)出現(xiàn)報(bào)錯(cuò)
? ? 可以在 package_init 包下的__init__.py 添加 __ all__ = [‘init_demo1’,‘init_demo2’],
__ all__ 的作用稍后下面會(huì)繼續(xù)說(shuō)明
? ? 再次執(zhí)行 init_test.py, 能正常打印出 2個(gè)變量值
? ? 當(dāng)導(dǎo)入包時(shí),自動(dòng)執(zhí)行 __init __.py 里面的代碼
? ? 批量導(dǎo)入模塊, 假設(shè)有3個(gè)常用的模塊,可以添加到 __ init __.py
? ? 導(dǎo)入 package_init,相當(dāng)于已經(jīng)自動(dòng)導(dǎo)入以上3個(gè)模塊
? ? __all__的作用及其用法 :上面已經(jīng)演示了在包下的 __init __.py, 可用于標(biāo)識(shí)模糊導(dǎo)入時(shí)的模塊。
? ? 在普通模塊中使用時(shí),表示一個(gè)模塊中允許哪些屬性可以被導(dǎo)入到別的模塊中,在 all_demo1.py 中添加3個(gè)變量,以及 標(biāo)明 __ all__ = [‘str1’,‘str2’], 表示只允許 str1,str2 變量被導(dǎo)入
? ? 可見,當(dāng)模糊導(dǎo)入模塊時(shí), str3 變量值是不能被打印出來(lái)的
? ? 如果需要打印出 str3 變量,需要導(dǎo)入模塊時(shí)指明
? ? __name__的作用及其用法: __name__這個(gè)系統(tǒng)變量顯示了當(dāng)前模塊執(zhí)行過(guò)程中的名稱,如果當(dāng)前程序運(yùn)行在這個(gè)模塊中, __ name __ 的名稱就是__main __ 如果不是,則為這個(gè)模塊的名稱。__main__一般作為函數(shù)的入口, 也稱主程序入口
? ? 當(dāng) all_demo1.py 作為模塊被導(dǎo)入時(shí),結(jié)果為該模塊名