python's twenty eithth day for me 模塊和包
阿新 • • 發佈:2018-04-25
print 直接 col 創建 包含 pan size 內置模塊 UNC
模塊:
什麽是模塊:
常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴,但其實import加載的模塊分為四個通用類別:
1,使用python編寫的代碼(.py文件)
2,以被編譯為共享庫或DLL的C或C++擴展。
3,包好一組模塊的包。
4,使用C編寫並鏈接到python解釋器的內置模塊。
import:
import 模塊名:
1,導入一個模塊。
2,相當於這個模塊從上到下一次被執行了。
3,同一個模塊不會被多次導入。
import my_module # 使用模塊中的屬性或方法時:模塊名.方法名() 模塊名.屬性名print(my_module.money) # 100 # 使用模塊中的屬性名或方法名。 my_module.func() # 1
1,import my_module 模塊,首先創建一個屬於my_module的內存空間
2,加載my_module模塊中的所有代碼
3,將my_module模塊中的名字方法放在my_module的命名空間中
import...as...:將...模塊導入命名為...
import my_module as m print(m.money) # 100 m.func() # 1
inp = input(‘json or pickle >>>‘) if inp == ‘json‘: import json as m elif inp == ‘pickle‘: import pickle as m dic = {‘k‘:‘v‘} print(m.dumps(dic)) print(m.loads(m.dumps(dic)))
import 可一次導入多個模塊:不推薦使用。
import hashlib,json,pickl
python PEP8規範:
1,每一行 import 應該導入一個模塊。
2,如果不是必要的需求,所有的模塊都應該在文件的頂端導入。
3,關於導入模塊的順序,先導入內置的,再導入擴展,最後導入自定義。
導入模塊是將模塊放入到 sys.modules 中,使用變量的時候看的是全局命名空間globals().
import sys import my_module print(globals()) print(sys.modules)
from 模塊名 import 方法名或者屬性名:
1,導入的名字直接屬於全局,但是指向模塊的名字所在的內存空間
2,導入的名字如果是是函數或者方法,引用了全局的變量,仍然使用模塊中的變量
3,導入的名字和全局的名字是一樣的,誰最後搶占到就是誰的
from my_module import money,func # 這種導入就不能使用模塊名.屬性名或方法名了,否則會報錯。 # 這樣導入的屬性或者方法名就屬於全局變量,可直接調用。 print(money) # 100 此時是模塊局部中的money money = 999 print(money) # 999 先加載模塊中的money,然後加載本全局變量中的money會將模塊中的覆蓋 fu
nc() # 100 # 用到的變量仍然是局部的變量。
from 模塊 import * : 默認會把模塊中所有名字都導入到全局:
from my_module import * print(money) func()
* 和 __all__配合使用:在被導入模塊中如果有__all__ = [‘屬性名’,‘方法名’],則只能調用__all__列表中擁有的名字。其他的都不可調用。
python's twenty eithth day for me 模塊和包