16_Python模塊的導(dǎo)入_全棧開發(fā)學(xué)習(xí)筆記

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__ == '模塊的名字'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 模塊和包 一 模塊 1 什么是模塊? 常見的場(chǎng)景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是...
    go以恒閱讀 2,344評(píng)論 0 4
  • 1. 認(rèn)識(shí)模塊 1.1 什么是模塊 一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是模塊名字加上.p...
    hswangxun閱讀 693評(píng)論 0 1
  • 一、模塊 1、模塊和導(dǎo)入 當(dāng)程序代碼量變得相當(dāng)大、邏輯結(jié)構(gòu)變得非常復(fù)雜的時(shí)候,我們最好把代碼按照邏輯和功能劃分成一...
    常大鵬閱讀 3,265評(píng)論 0 9
  • 模塊 一個(gè)模塊就是包含了python定義和聲明的文件,文件名就是模塊名字加上.py后綴,通過導(dǎo)入模塊來引入其他文件...
    斷尾壁虎V閱讀 1,704評(píng)論 0 1
  • 今年年初,我第一次嘗試玩手賬,之前有一些簡(jiǎn)單的了解,也看到別人做的精美的手賬,便有些心動(dòng),好巧的是正好看到冉冉老師...
    效艷一畝田閱讀 418評(píng)論 1 1

友情鏈接更多精彩內(nèi)容