1. 模塊導(dǎo)入的順序
內(nèi)置模塊
擴(kuò)展的 django
自定義的
2. import
先創(chuàng)建demo.py文件:
print("in demo.py")
money = 100
def read():
print("in read1")
再到另一py文件寫上:
import demo
demo.read()
print(demo.money)
執(zhí)行結(jié)果:
in demo.py
in read1
100
3. 模塊導(dǎo)入的流程
先從sys.modules里查看是否已經(jīng)被導(dǎo)入
如果沒有被導(dǎo)入乍赫,就依據(jù)sys.path路徑取尋找模塊
找到了就導(dǎo)入
創(chuàng)建這個(gè)模塊的命名空間
執(zhí)行文件,把文件中的名字都放到命名空間里
范例:
import demo
import sys
print(sys.modules.keys())
print(sys.path)
執(zhí)行結(jié)果:
in demo.py
dict_keys(['locale', 'heapq', 'errno', 'types', '_weakref', 'io', 'demo', 'reprlib', 'functools', 'encodings', '_thread', '_locale', 'operator', 'sre_constants', 'copyreg', '_heapq', 'winreg', '_imp', '_functools', '_operator', '_bootlocale', 'sys', 'encodings.mbcs', '__main__', 'ntpath', 'encodings.latin_1', 'weakref', '_io', 'sre_compile', 'signal', '_codecs', 'encodings.gbk', 'zipimport', 'site', 'abc', 'encodings.utf_8', 'sre_parse', 'nt', '_codecs_cn', 'keyword', '_warnings', '_collections', 'genericpath', 're', '_collections_abc', 'os', 'encodings.aliases', 'itertools', 'marshal', 'os.path', '_weakrefset', 'codecs', 'collections', '_stat', '_multibytecodec', 'stat', '_frozen_importlib', '_sre', 'builtins'])
['D:\\temp_study\\python01', 'D:\\temp_study\\python01', 'C:\\WINDOWS\\SYSTEM32\\python34.zip', 'D:\\temp_study\\python01\\venv\\DLLs', 'D:\\temp_study\\python01\\venv\\lib', 'D:\\temp_study\\python01\\venv\\Scripts', 'D:\\Python34\\Lib', 'D:\\Python34\\DLLs', 'D:\\temp_study\\python01\\venv', 'D:\\temp_study\\python01\\venv\\lib\\site-packages']
4. 給模塊起別名
import time as t
print(t.time())
執(zhí)行結(jié)果:
1548923779.046172
起別名的用法:
# oracle
# mysql
# if 數(shù)據(jù)庫(kù) == ‘oracle’:
# import oracle as db
# elif 數(shù)據(jù)庫(kù) == ‘mysql’:
# import mysql as db
# # 連接數(shù)據(jù)庫(kù) db.connect
# # 登錄認(rèn)證
# # 增刪改查
# # 關(guān)閉數(shù)據(jù)庫(kù)
5. from ... import ...
demo.py文件
print("in demo.py")
money = 100
def read():
print("in read1",money)
一次范例:
from demo import read
read()
執(zhí)行結(jié)果:
in demo.py
in read1 100
二次范例:
from demo import read
def read():
print('my read')
read()
執(zhí)行結(jié)果:
in demo.py
my read
6. _name_
范例:
正式代碼不顯示模塊中的內(nèi)容
demo.py
def login():
print("正在執(zhí)行登錄程序")
if __name__ == "__main__":
ret = login()
print(ret)
執(zhí)行結(jié)果:
正在執(zhí)行登錄程序
None
test.py
import demo
執(zhí)行結(jié)果:
無內(nèi)容
7. 小結(jié)
所有的模塊導(dǎo)入都應(yīng)該盡量往上寫
內(nèi)置模塊
擴(kuò)展模塊
自定義模塊
模塊不會(huì)重復(fù)被導(dǎo)入 : sys.moudles
從哪兒導(dǎo)入模塊 : sys.path
import
import 模塊名
模塊名.變量名 和本文件中的變量名完全不沖突
import 模塊名 as 重命名的模塊名 : 提高代碼的兼容性
import 模塊1,模塊2
from import
from 模塊名 import 變量名
直接使用 變量名 就可以完成操作
如果本文件中有相同的變量名會(huì)發(fā)生沖突
from 模塊名 import 變量名字 as 重命名變量名
from 模塊名 import 變量名1,變量名2
from 模塊名 import *
將模塊中的所有變量名都放到內(nèi)存中
如果本文件中有相同的變量名會(huì)發(fā)生沖突
from 模塊名 import * 和 __all__ 是一對(duì)
沒有這個(gè)變量,就會(huì)導(dǎo)入所有的名字
如果有all 只導(dǎo)入all列表中的名字
__name__
在模塊中 有一個(gè)變量__name__棺牧,
當(dāng)我們直接執(zhí)行這個(gè)模塊的時(shí)候,__name__ == '__main__'
當(dāng)我們執(zhí)行其他模塊,在其他模塊中引用這個(gè)模塊的時(shí)候截歉,這個(gè)模塊中的__name__ == '模塊的名字'