1.Python結構
? ? ? ? 工程 > 包 > 模塊
? ? ? ? Python工程: “Python項目中最大的文件夾(本質就是一個文件夾)” --- 左側的 CODE文件夾 為Python工程
? ? ? ? Python包: 本質就是一個文件夾,但是python包中具備具體的標識,如果沒有標識則不能導入 --- 左側的 01.Python基礎 文件夾為python包
? ? ? ? Python模塊: 每一個 .py 文件 --- 左側的 1.1 變量.py 為Python模塊
? ? ? ? 2.Pytho包:
? ? ? ? ? ? 特征:內部包含一個初始文件,文件名為: __init__.py ? ? (雙下劃線)
? ? ? ?
? ? ? ? 3.Pytho模塊的分類:
? ? ? ? ? ? >.內置模塊 ?Python解釋器自帶的 ?(random/math/date/funtools)
? ? ? ? ? ? >.自定義模塊 ? ?自己寫的所有.py文件
? ? ? ? ? ? >.第三方模塊 ? ?必須通過外網下載才能導入
? ? ? ? ? ? ? ? PythonWeb開發: django/flask
? ? ? ? ? ? ? ? 數據分析: pandas/numpy
? ? ? ? ? ? ? ? 人工智能: sekitlearn
? ? ? ? 4.導入模塊
? ? ? ? ? ? -導入包
? ? ? ? ? ? ? ? import 包名
#導入包
import test_package ? ? #導入Python包-導入模塊方法一:import 包名.模塊名 as 別名 ? ? ? ? ? ? ?該語句會將指定包下的模塊導入到當前命名空間# ? 包名.模塊名 ? ? 使用時同樣需要 包名.模塊名 的形式來調用print("------------------------------導入模塊1")import test_package.Hello1test_package.Hello1.show() ? ? ? ? ? #wzw:12345#起別名 as ---print("------------------------------as")import test_package.Hello1 as hellohello.show()方法二: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?前提:導入的模塊要和當前空間同級import 模塊名 as 別名 ? ? ? ? ? ? ? ? ? ? ? ? ? 此語句可以將整個模塊導入到當前命名空間中
直接導入模塊名 ? ? ?導入的模塊必須和當前命名空間同級
import Hello2
Hello2.show()
方法三: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? from 包名1.子包名2.... import 模塊名 as 別名 ? ? ? ? ? ?允許你從模塊中導入特定的函數、類或變量到當前命名空間。導入后,使用時無需加模塊名前綴。'''# ? form 包名.子包名 import 模塊名 ? ? ?從包中去導入一個模塊, 運用最廣from test_package import Hello1Hello1.show() ? ? ? ? ? ? ? ? ? ? ? ? ? #此方式是將 Hello1 模塊整個導入到當前命名空間from test_package.Hello1 import showshow() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #此方式是從 Hello1 模塊中僅導入 show 函數到當前命名空間from Hello2 import showshow() ? ? ? ? ? ?#yst:6789 ? ?在 Hello2 中調用
5. __init__.py 文件的用法
? ? ? ? 當包被導入時,__init__.py 中的代碼會自動執行,常用于:
? ? ? ? ? ? >.定義包的公共接口
? ? ? ? ? ? >.初始化全局變量或配置
? ? ? ? ? ? >.執行包級別配置(如日志初始化)
'''
print(test_package.USERNAME) ? ? ? ?#WangZhaoWei
?
test_package.test_connect_mysql() ? ? ? ? ? ? ? # mysql數據庫已連接.... ? ? ? 連接數據庫的函數
?
? ? 6.動態導入包
? ? ? ? - import 導入模塊原理:使用了內置函數 __import__()
#第一種方式 -- 不建議module_name = "random" ? ? ? ? ?#將 random隨機數庫值傳遞給module_nameres = __import__(module_name)print(res.randint(1,50)) ? ? ? ? ? ?#在1-50中隨機打印一個數字#第二種方式:導入動態導入的庫import importlibmodule_name = "math" ? ? ? ? ? ?#值傳遞 將math內置數模塊傳遞給module_nameres = importlib.import_module(module_name)print(res.pi) ? ? ? ? ? ? ? #3.141592653589793 打印出圓周率近似值
?
? ? 7.導入模塊占用內存問題
? ? ? ? 無論導入多少次同一模塊,都只占用同一內存地址
#測試導入模塊內存問題import math as m1import math as m2import math as m3 ? ? ? ? ? #導入三次math比較其地址print(m1 is m2) ? ? #Trueprint(m1 is m3) ? ? #True ? ? ? 證明同一模塊只會占用同一塊地址