?
要先導入模塊,才能調用用模塊中定義的函數(才會有該模塊的代碼提示)。
import 模塊 # 導入一個模塊 import 模塊1,模塊2,.... # 同時導入多個模塊 from 模塊 import 部分 # 導入一部分 from 模塊 import 部分1,部分2,部分3.... # 導入一個模塊的多個部分 from 模塊 import * # 導入整個模塊
以上的? 模塊 ?均可換為? 模塊.子模塊 ?,表示只導入子模塊|從子模塊中導入。
?
導入之后就可以通過? ? 模塊名.方法名() ?? 調用模塊中的函數了。
?
不管導入一個相同模塊多少次,只會在第一次時導入。
比如寫十行? import math ?,只有第一個? import math ?會導入math模塊,避免了重復導入模塊。
?
?
?
dir()函數
import math print (dir(math)) """ dir(模塊名) #列出該模塊所有的成員變量、方法。需要先導入對應的模塊。以字符串列表的形式返回。dir()是python的內置函數。 """
?
?
?
一個python文件(.py)就是一個python模塊,一個模塊中可以定義多個類,定義多個方法,可以有可執行代碼。
新建一個python文件:module1.py
print ( " module start " ) # 可執行代碼 class Test: # 定義類 def out(self): print ( " test class " ) print ( " module1 running " ) # 可執行代碼 def module1_test(): # 定義方法 print ( " test function " ) print ( " module1 over " ) # 可執行代碼
一個模塊有2個默認屬性:__main__,__name__
?
__main__
__main__即這個模塊中所有的可執行代碼。
導入一個模塊時,會自動執行這個模塊的__main__部分:
新建python文件module2.py
import
module1
執行module2.py,結果如下:
module start
module1 running
module1 over
導入一個模塊時,會自動執行這個模塊的__main__部分(所有可執行代碼)。
所以我們常常在__main__中做一些這個模塊的初始化操作,習慣把這些代碼放在文件開頭。
?
?
__name__
如果是在模塊的類中、函數中,__name__表示當前執行的python文件的文件名(不帶后綴.py)。
如果是在模塊的可執行代碼(__main__)中,__name__表示當前的模塊(.py文件)是主動執行的,還是被調用的。如果__name__的值是"__main__則表示當前模塊(.py文件)是主動執行的。
?
module1.py如下:
if __name__ == " __main__ " : print ( " 主動調用 " ) else : print ( " 被動調用 " ) class Test: # 定義類 def out(self): print ( " test class " ) def module1_test(): # 定義方法 print ( __name__ ) # 在模塊的類、方法中使用 print ( " test function " )
?
module2.py如下:
import module1 module1.module1_test()
?
執行module1.py:
主動調用
?
執行module2.py:
被動調用
module1
test function
?
有時候我們需要在主動執行時做一種操作,在被調用時做不同的操作,就可以這樣來實現:
if __name__ == " __main__ " : # 主動調用時做的操作 else : # 被動調用時做的操作
?
?
?
?
包
包相當于一個命名空間,各個包中的標識符是獨立的,互不干擾。
一個包中可以有多個模塊(.py文件),也可以有多個子包。
?
一個包(包括子包),都要有__init__.py文件,這是這個包的索引文件(目錄文件),相當于書的索引、目錄,標識這本書(這個模塊)有哪些章節(python文件|模塊)。
__init__.py文件有一個屬性__all__,即這個包的索引、目錄,我們? import ?包 ?或者? from ?包? import * ?時(包可以看做一個大模塊),python解釋器會找到這個包的__init__.py中的__all__屬性,根據其屬性值導入這個包中的模塊。
?
比如包school中有3個py文件(模塊):student.py、teacher.py、leader.py。
__init__.py文件:
__all__ =[ " student " , " teacher " ] # 字符串列表,py文件名(不帶后綴)
我們? import school ?或? from school import * ?導入整個包時,只會導入student、teacher這2個py文件,不會全部導入。
?
一般__init__.py文件是空的,這時默認__all__的值是包下所有py文件(除去__init__.py)的字符串列表,所以會全部導入包下的py文件(模塊)。
?
習慣把包中的入口文件(我們要執行的py文件,程序入口,相當于c/c++、java中的main()函數),命名為__main__.py
?
?
?
import的具體用法
1、不使用包
- 導入整個模塊(py文件):? import py文件名 ? 或? from py文件名 import * ?
- 導入py文件中的某個類:? from py文件名 import 類名 ?
調用函數:? py文件名.函數名(參數表) ?
?
?
2、使用包,不使用子模塊
- 導入整個模塊(py文件):? import 包名.py文件名? 或? from 包名.py文件名?import?*?
- 導入py文件中的某個類:? from 包名.py文件名?import?類名?
調用函數:? 包名.py文件名.函數名(參數表) ?
使用子包時,以? 包名.子包 ?作為包名即可。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
