10.1 匯入模組
1.什麼是python模組?
Python模組(Module),是一個Python檔案,以.py結尾 模組可以定義函式,類和變數,模組裡也能包含可執行的程式碼
2.模組的作用:
python中有很多各種不同的模組,每一個模組都可以幫助我們快速的實現一些功能
3.模組的匯入方式:
# 模組在使用前需要先匯入 匯入的語法如下:
[from 模組名] import [模組|類|變數|函式|*] [as 別名]
# 常用的組合形式如:
import 模組名
from 模組名 import 類 、變數、方法等
from 模組名 import *
import 模組名 as 別名
from 模組名 import 功能名 as 別名
<==========================================>
# mian.py檔案
# import 匯入模組
import mymodule
import mymodule
"""
注意點:模組匯入時,匯入一次,終身受益,並不會重複匯入
"""
# 1.匯入的基本使用
# (1) 模組.變數
print(mymodule.cat)
# (2) 模組.函式
mymodule.jump()
# (3) 模組.類
print(mymodule.Classroom().name)
# 2.匯入任意模組路徑下的任意模組
"""
預設匯入當指令碼檔案同級目錄下的模組等..
系統執行流程:首先看一下sys.path裡面有沒有想要匯入的這個模組路徑
如果有,預設匯入,如果沒有,需要手動追加
"""
import sys
print(sys.path)
sys.path.append(r"D:\tmp")
# 3.from..import..基本使用
"""
from..從哪裡import..引入具體的某個成員"""
"""
# (1) 匯入單個成員
from mymodule import dog
print(dog)
# (2) 匯入多個成員
from mymodule import jump,lookdoor
jump()
lookdoor()
# (3) 匯入所有成員*帶有所有
from mymodule import *
print(dog)
print(cat)
# (4) 設定*匯入的範圍
from mymodule import *
print(dog) # error
print(cat)
# (5) 設定引入成員的別名 as
from mymodule import cat as c ,lookdoor as ld
print(c)
ld()
# 4.__name__的使用
"""
返回模組名字的魔術屬性__name__
如果當前檔案是直接執行的,返回"__main__字串"
如果當前檔案是間接匯入的,返回當前檔名(模組名)
"""
res = "__mian__"
print(res)
print(type(res))
<===========================================================>
# mymodule.py檔案
# 可以手動指定*的引入範圍
__all__ = ["cat"]
cat = '甜甜'
dog = '旺財'
def jump():
print("小貓能上樹")
def lookdoor():
print("小狗能看門")
class Classroom():
name = "python32"
print("我是mymodule模組")
print(__name__)
"""
把需要引入的程式碼寫在if判斷的上面
把需要做簡單測試的程式碼,不需要引入的程式碼寫在if判斷的下面,防止匯入
"""
if __name__ == "__mian__":
jump()
lookdoor()
10.2 匯入包
1.什麼是python包?
包就是一個資料夾,在該資料夾下包含了一個__int__.py檔案,該資料夾可用於包含多個模組檔案
檔案目錄結構:
# __int__.py檔案
print("初始化檔案被執行...")
__all__ =["ceshi3"]
ceshi1 = "ceshi1"
ceshi2 = "ceshi2"
ceshi3 = "ceshi3"
from package1 import my_module
<====================================================>
# my_module.py檔案
def myjoin():
print("這是myjoin方法")
def mygetsize():
print("這是mygetsize方法")
<====================================================>
# main.py檔案
# import匯入包
# 當引入包時,會自動指定包中__init__.py的初始化檔案,對包進行初始化,對包進行初始化
# 1.import引入包的語法
import package1
# 匯入包的屬性
print(package1.ceshi1)
# 匯入包下的某個模組
# 方法一:
import package1.my_module
package1.my_module.myjoin()
# 方法二: as 起別名
import package1.my_module as pm
pm.myjoin()
# 方法三: 把要引入的模組放到初始化檔案(__int__.py)當中進行引入,可以簡化操作
import package1
package1.my_module.mygetsize()
# 2.from ..import 引入包中具體成員的語法
# 引入包中的屬性
from package1 import ceshi2
print(ceshi2)
# 引入包中的模組
from package1 import my_module
my_module.myjoin()
# 引入包中模組下的成員
from package1.my_module import mygetsize
mygetsize()
# 可以指定*號的範圍用 __all__
from package1 import *
# print(ceshi2) # error
print(ceshi3)
# 可以用as起別名
from package1 import ceshi2 as c2 ,ceshi1 as c1
print(c1)
print(c2)
2.單入口模式
檔案目錄結構:
# pkg1_m1.py檔案
ceshi103 = "ceshi103"
ceshi104 = "ceshi104"
<================================================>
# pkg1_m2.py檔案
ceshi100 = "ceshi100"
ceshi101 = "ceshi101"
"""
.代表當前路徑
..代表上一級路徑
相對路徑不能被直譯器直接引入,路徑找不到
分模組中的檔案不能直接執行,必須透過匯入到主入口檔案,
間接執行才能找到對應的路徑
含有相對路徑的分模組不能直接執行,得透過主入口檔案間接執行
"""
from . import pkg1_m1
print(pkg1_m1.ceshi103)
from . pkg1_m1 import ceshi104
print(ceshi104)
# 找上一級中的一個模組
from .. import pkg_module1
print(pkg_module1.ceshi201)
# 找上一級中的一個模組裡的一個成員
from .. pkg_module1 import ceshi202
print(ceshi202)
# 找上一級包中的具體某個模組
from .. pkg2 import pkg2_m2
print(pkg2_m2.ceshi300)
# 找上一級包中的具體某個模組裡的具體的某個成員
from .. pkg2.pkg2_m2 import ceshi301
print(ceshi301)
<=========================================================>
# pkg2_m2.py檔案
ceshi300 = "ceshi300"
ceshi301 = "ceshi301"
<=========================================================>
# pkg_module1.py檔案
ceshi201 = "ceshi201"
ceshi202 = "ceshi202"
<====================================================>
# main.py檔案
# 單入口模式
# 使用相對路徑進行匯入
import package2.pkg1.pkg1_m2 as ppp2
print(ppp2.ceshi100)