目錄二、import 和 from...import...
三、迴圈匯入問題
四、模組的搜尋路徑
五、python檔案的兩種用途
六、random 模組
模組是一系列功能的集合體,而函式是某乙個功能的集合體,因此模組可以看成是一堆函式的集合體。乙個py檔案內部就可以放一堆函式,因此乙個py檔案就可以看成乙個模組。如果這個py檔案的檔名為module.py
,模組名則是module
。
1、自定義模組:就是自己建立的py檔案,裡面寫入一堆函式,則這個檔案被稱為自定義模組,即使用python編寫的.py檔案。
2、第三方模組:需要自己安裝,有13萬個第三方庫,無所不能
3、內建模組:python直譯器自帶的,不需要安裝
4、包:含有__inti__
.py的資料夾,一種特殊的模組(解決了乙個問題)
用第三方或者內建的模組是一種拿來主義,可以極大地提公升開發效率。
自定義模組,將我們自己程式中用到的公共功能,寫入乙個python檔案,然後程式的各部分元件可以通過匯入的方式來引用自定義模組的功能。
python看成乙個手機,pip是應用管家,time就是應用管家裡的乙個應用,要用它就import
import time
time.time()
import 首次匯入模組發生的3件事情:
1、在記憶體中生成乙個叫做time的命名空間
2、執行time.py檔案,然後把time.py檔案內的命名空間放入time的命名空間內
3、把time的命名空間指向import和from...import.py(當前匯入time模組的檔案) 的命名空間中
模組的重複匯入會直接引用之前創造好的加過,不會重複執行模組的檔案
使用import time匯入的時候,使用方法只能time.方法名(),不能直接方法名
不推薦使用這個方法
from time import gmtime
print(gmtime())
from...import...首次匯入模組發生的3件事情:
1、在記憶體中生成乙個叫做time的命名空間
2、執行time.py檔案,然後把time.py檔案內的命名空間放入time的命名空間內
3、把gmtime方法指向import和from...import.py(當前匯入time模組的檔案) 的命名空間內,該方法可以不用加任何字首而直接使用
匯入檔案內所有內容的功能:
__all__
在兩種模組名中的區別
from test import * # __all__限制了 from test import *(匯入全部)
from test import f3 # __all__不會限制
import test # __all__ 不會限制
相同點:
1、兩者都會執行模組對應的檔案,兩者都會產生模組的命名空間
2、兩者呼叫功能時,需要跑到定義時尋找作用域關係,與呼叫位置無關
不同點:
import 需要加字首;from...import...不需要加字首
#m1.py
from m2 import y
x = 10
#m2.py
from m1 import x
y = 20
過程:m1.py --> m2.py --> m1.py ... 就進入了迴圈匯入的死迴圈
結果:x/y在這個過程中一直沒有生成
解決方案一 :把匯入語句寫在最下面一行
#m1.py
x = 10
from m2 import y
#m2.py
y = 20
from m1 import x
過程:m1.py --> x = 10 --> m2.py --> y = 20 --> m1.py --> x = 10
結果:x = 10 --> y = 20 --> x = 10
解決方案二:把匯入語句寫在函式裡面
#m1.py
def f1():
from m2 import y
print(y)
x = 10
#m2.py
def f1():
from m1 import x
y = 20
過程:f1() --> m2.py --> y = 20
結果:y = 20
1、先從記憶體中找
from m2 import y
print(y)
import time
time.sleep(10) # 10s內刪除了m2
from m2 import y
print(y)
2、再從內建模組中找
from time import time
print(time)
3、然後從自定製模組中找
也就是在自己建立的檔案模組中找
4、最後從環境變數中找(未來專案的執行檔案一定要弄乙個環節變數)
import sys
print(sys.path) # 環境變數,模組就是在某個路徑中,需要新增路徑,在這裡找
# del sys.path[1]
print(sys.path)
import testt
testt.f1()
1、作為模組檔案(m1.py中呼叫m2.py,執行m1.py時,m2.py即為模板檔案),模組可以有多個
2、作為執行檔案(當前執行的檔案),執行檔案只有乙個
3、執行檔案和模組檔案是相對的
# m1.py
x = 10
if __name__ == '__main__':
print(x)
# m2.py
import m1
當執行m1.py時,即m1.py作為執行檔案,此時name==main,列印x
當執行m2.py時,即m1.py作為模板檔案,此時name== m1,if條件不成立,報錯
if __name__ == '__main__':
實際上就是乙個if
判斷,或者是過濾器。可以用main+tab鍵快速打出來
bugku crypto wp上半部分彙總
from future import print function a input input the string s a.split dict for item in s print dict item end import base64 import unicodedata import ur...
中斷的上半部分與下半部分
為了讓核心能夠快速響應硬體裝置的訊息,引入了中斷機制。當硬體裝置需要被處理 比如網絡卡收到了包 會傳送乙個非同步的中斷請求給處理器,然後處理器陷入中斷上下文中,停止當前執行的程式,轉而執行預先設定好的中斷處理程式。完成中斷處理程式之後給硬體裝置乙個訊號再返回原先的工作繼續。在這套機制中,中斷處理程式...
css上半部分自適應高度,下半部分自動填充豎向排列
把乙個頁面乙份成2部分,上面的表單不是固定的,所以不能設定固定蓋度,但是下面還需要填充滿。我碰到的問題是下面沒有填充滿,出來補個div白色背景這與我想要的效果不一樣 彈性盒的功能很強大,思路就是乙個大盒子包含2個小盒子,給大盒子設定成彈性盒,然後給上半部分用flex shrink,下面用flex g...