?
要先導入模塊,才能調用用模塊中定義的函數(才會有該模塊的代碼提示)。
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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

