主頁(yè) > 知識(shí)庫(kù) > Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)

Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)

熱門標(biāo)簽:400電話 申請(qǐng) 條件 北京外呼電銷機(jī)器人招商 crm電銷機(jī)器人 南京crm外呼系統(tǒng)排名 鄭州智能外呼系統(tǒng)中心 賓館能在百度地圖標(biāo)注嗎 汕頭電商外呼系統(tǒng)供應(yīng)商 云南地圖標(biāo)注 電銷機(jī)器人 金倫通信

一.導(dǎo)入模塊

模塊(Modules)

模塊就是Python程序,任何Python程序都可以作為模塊

代碼的可重用性,只要編程過(guò)程中需要用到該模塊中的某個(gè)功能(由變量、函數(shù)、類實(shí)現(xiàn)),直接在程序中導(dǎo)入該模塊即可使用該功能

封裝特性的結(jié)構(gòu):

諸多容器,列表、元組、字符串、字典等都是對(duì)數(shù)據(jù)的封裝
函數(shù)是對(duì) Python 代碼的封裝
類是對(duì)方法和屬性的封裝,是對(duì)函數(shù)和數(shù)據(jù)的封裝

模塊,可以理解是對(duì)代碼更高級(jí)的封裝,把能夠?qū)崿F(xiàn)某一特定功能的代碼編寫在同一個(gè).py 文件中,并將其作為一個(gè)獨(dú)立的模塊,還能有效避免函數(shù)名和變量名發(fā)生沖突

當(dāng)程序重復(fù)導(dǎo)入同一個(gè)模塊時(shí),Python 只會(huì)導(dǎo)入一次

import

import 模塊名1 [as 別名1], 模塊名2 [as 別名2],…

會(huì)導(dǎo)入指定模塊中的所有成員(包括變量、函數(shù)、類等),需要使用模塊中的成員時(shí),需用該模塊名(別名)作為前綴,否則解釋器會(huì)報(bào)錯(cuò)

[] 部分,可以使用,也可以省略

sys模塊下的argv變量用于獲取運(yùn)行程序的命令行參數(shù),argv[0]用于獲取當(dāng)前 程序的存儲(chǔ)路徑

import sys #導(dǎo)入sys整個(gè)模塊
print(sys.argv[0]) # 用sys模塊內(nèi)的成員時(shí),必須添加模塊名作為前綴
C:/Users/Administrator/Desktop/2021-1-14/模塊.py

導(dǎo)入整個(gè)模塊時(shí),可以為模塊指定別名

import sys as s # 導(dǎo)入sys整個(gè)模塊,指定別名為s
print(s.argv[0]) # 使用sys模塊別名s作為前綴來(lái)訪問(wèn)模塊中的成員
C:/Users/Administrator/Desktop/2021-1-14/模塊.py

可以一次導(dǎo)入多個(gè)模塊,多個(gè)模塊之間用逗號(hào)隔開

import sys,os # 導(dǎo)入sys、os兩個(gè)模塊
print(sys.argv[0]) # 使用模塊名作為前綴來(lái)訪問(wèn)模塊中的成員
print(os.sep) # os模塊的sep變量代表平臺(tái)上的路徑分隔符
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
\

導(dǎo)入多個(gè)模塊時(shí),也可以為模塊指定別名

import sys as s,os as o # 導(dǎo)入模塊,并分別為模塊指定別名
print(s.argv[0]) # 使用模塊別名作為前綴來(lái)訪問(wèn)模塊中的成員
print(o.sep)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
\

from…import

from 模塊名 import 成員名1 [as 別名1],成員名2 [as 別名2],…

只會(huì)導(dǎo)入模塊中指定的成員,而不是全部成員,當(dāng)程序中使用該成員時(shí),無(wú)需加任何前綴,直接使用成員名(或別名)

[] 部分,可以使用,也可以省略

用from...import來(lái)導(dǎo)入指定成員

from sys import argv # 導(dǎo)入sys模塊的argv成員
print(argv[0]) # 直接使用成員名訪問(wèn)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py

導(dǎo)入sys模塊中的 argv 成員,可在程序中直接使用 argv 成員,無(wú)須使用任何前綴

導(dǎo)入模塊成員時(shí),為成員指定別名

from sys import argv as v # 導(dǎo)入sys模塊的argv成員,為其指定別名v
print(v[0]) # 直接使用成員的別名訪問(wèn)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py

form...import 導(dǎo)入模塊成員時(shí),可一次導(dǎo)入多個(gè)成員

from sys import argv, winver # 導(dǎo)入sys模塊的argv,winver成員
print(argv[0]) # 直接使用成員名訪問(wèn)
print(winver)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
3.4

sys模塊的winver成員記錄了該 Python 的版本號(hào)

一次導(dǎo)入多個(gè)模塊成員時(shí),可使用 as 關(guān)鍵字為成員指定別名

from sys import argv as v, winver as wv # 導(dǎo)入sys模塊的成員,并為其指定別名
print(v[0]) # 直接使用成員的別名訪問(wèn)
print(wv)
C:/Users/Administrator/Desktop/2021-1-14/模塊.py
3.4

不推薦使用 from 模塊 import * 導(dǎo)入模塊所有成員

導(dǎo)入指定模塊內(nèi)的所有成員存在潛在的風(fēng)險(xiǎn),可能會(huì)出現(xiàn)同名成員

可通過(guò)別名來(lái)區(qū)分兩個(gè)模塊中的同名成員

__import __()

模塊是代碼文件,要求其文件名要符合操作系統(tǒng)的命名規(guī)則,如果模塊名中出現(xiàn)空格或數(shù)字開頭,無(wú)法使用 import 引入

如果模塊中包含空格或以數(shù)字開頭,需要使用__import__() 內(nèi)置函數(shù)引入模塊

__import__("demo text")

__import__("1demo")

使用import()函數(shù)要以字符串的方式將模塊名引入,否則會(huì)報(bào)SyntaxError錯(cuò)誤

二.自定義模塊

定義簡(jiǎn)單的模塊(編寫在 demo.py 文件中)

name = "youchanwill"
add = "you.com"
print(name,add)
def say():
 print("自定義模塊")
class test:
 def __init__(self,name,add):
  self.name = name
  self.add = add
 def say(self):
  print(self.name,self.add)

為了檢驗(yàn)?zāi)0逯写a的正確性,需要為其設(shè)計(jì)一段測(cè)試代碼

say()
test1 = test("you","you.net")
test1.say()

在同一文件夾下新建一個(gè)test.py文件,使用 import 語(yǔ)句導(dǎo)入 demo.py

import demo #用import 語(yǔ)句導(dǎo)入時(shí),只需要使用該模板文件的名稱
youchanwill you.com
自定義模塊 #測(cè)試代碼也被執(zhí)行
you you.net 

其它程序以引入的方式執(zhí)行模板文件,測(cè)試代碼不應(yīng)該被執(zhí)行,可用__name__ 變量做修改

當(dāng)直接運(yùn)行一個(gè)模塊時(shí),__name__變量的值為__main__,而模塊被導(dǎo)入其他程序中并運(yùn)行該程序時(shí),處于模塊中的__name__變量的值就變成了模塊名

可在調(diào)用測(cè)試函數(shù)時(shí)增加判斷,當(dāng) __name__ =='__main__' 時(shí)才調(diào)用測(cè)試函數(shù)

修改 demo.py 模板文件中的測(cè)試代碼:

if __name__ == '__main__':
 say()
 test1 = test("you","you.net")
 test1.say()

修改后運(yùn)行 test.py 文件時(shí)

import demo
youchanwill you.com

執(zhí)行的是模板文件中的輸出語(yǔ)句,測(cè)試代碼并未執(zhí)行

說(shuō)明文檔

自定義模塊添加說(shuō)明文檔,和函數(shù)或類的添加方法相同,在模塊開頭的位置定義一個(gè)字符串

可以通過(guò)模板的 __doc__ 屬性,來(lái)訪問(wèn)模板的說(shuō)明文檔

import demo
print(demo.__doc__)
youchanwill you.com

這是說(shuō)明文檔

三.加載模塊

環(huán)境變量

根據(jù)PYTHONPATH環(huán)境變量的值來(lái)確定到哪里去加載模塊

PYTHONPATH環(huán)境變量的值是多個(gè)路徑的集合,會(huì)依次搜索PYTHONPATH 環(huán)境變量所指定的多個(gè)路徑,從中找到程序想要加載的模塊

在 Windows 平臺(tái)上設(shè)置環(huán)境變量

右擊桌面上的“計(jì)算機(jī)”圖標(biāo),單擊“屬性”菜單項(xiàng),系統(tǒng)顯示“控制面板\所有控制面板項(xiàng)\系統(tǒng)”窗口,單擊該窗口左邊欄中的“高級(jí)系統(tǒng)設(shè)置”鏈接,出現(xiàn)“系統(tǒng)屬性”對(duì)話框

單擊“高級(jí)” Tab 頁(yè)中的“環(huán)境變量”,對(duì)于當(dāng)前用戶而言,設(shè)置用戶變量和系統(tǒng)變量的效果大致相同,系統(tǒng)變量的路徑排在用戶變量的路徑之前

在“變量名”內(nèi)輸入 PYTHONPATH,表明將要建立 的環(huán)境變量;在“變量值”內(nèi)輸入 .;d:\python_ module,就是該環(huán)境變量的值,該值包含兩條路徑

第一條路徑為一個(gè)點(diǎn)(.),代表當(dāng)前路徑,表明當(dāng)運(yùn)行 Python 程序時(shí),總能從當(dāng)前路徑加載模塊

第二條路徑為 d:\python_ module,表明當(dāng)運(yùn)行 Python 程序時(shí),總能從 d:\python_ module 加載模塊

成功設(shè)置了環(huán)境變量后,只要把定義的模塊放在與當(dāng)前運(yùn)行程序相同的路徑(或d:\python_ module 路徑),該模塊就能被成功加載

在 Linux 上設(shè)置環(huán)境變量

啟動(dòng) Linux 的命令行界面,在 home 路徑下輸入:

ls - a

Linux 平臺(tái)的環(huán)境變量通過(guò) .bash_profile 文件設(shè)置,在該文件中添加 PYTHONPATH 環(huán)境變量

PYTHONPATH=.:/home/you/python_module #you是系統(tǒng)的登錄名

Linux 多個(gè)路徑之間以冒號(hào)(:)作為分隔符

完成變量值的設(shè)置后,在 .bash_profile 文件的最后添加導(dǎo)出 PYTHONPATH 變量的語(yǔ)句

export PYTHONPATH

運(yùn)行該文件,使在文件中設(shè)置的 PYTHONPATH 變量值生效

可選擇重新登錄Linux 平臺(tái),或輸入source .bash_profile

成功設(shè)置了環(huán)境變量后,只要把定義的模塊放在與當(dāng)前運(yùn)行程序相同的路徑(或/home/yeeku/python_module 路徑),該模塊就能被成功加載

默認(rèn)的模塊加載路徑

安裝通用性模塊,這種模塊應(yīng)該直接安裝在 Python 內(nèi)部,可借助Python默認(rèn)的模塊加載路徑

通常情況下,應(yīng)將Python的擴(kuò)展模塊添加在 lib\site-packages 路徑下,專門用于存放擴(kuò)展模塊和包

將之前的demo.py文件復(fù)制在 lib\site-packages 路徑下

'''
這是說(shuō)明文檔
'''
name = "youchanwill"
add = "you.com"
print(name,add)
def say():
 print("自定義模塊")
class test:
 def __init__(self,name,add):
  self.name = name
  self.add = add
 def say(self):
  print(self.name,self.add)
if __name__ == '__main__':
 say()
 test1 = test("you","you.net")
 test1.say()

可直接在Python交互式解釋器中測(cè)試該模塊

>>> import demo
youchanwill you.com
>>> print(demo.__doc__)

這是說(shuō)明文檔

>>>
第一行代碼用于導(dǎo)入demo模塊;第二行代碼用于查看demo模塊的文檔,輸出該模塊開始定義的文檔內(nèi)容

導(dǎo)入模塊的本質(zhì)

import demo 導(dǎo)入模塊的本質(zhì)是將 demo.py 中的全部代碼加載到內(nèi)存并執(zhí)行
將整個(gè)模塊內(nèi)容賦值給與模塊同名的變量,該變量的類型是 module,在該模塊中定義的所有程序單元都相當(dāng)于該 module 對(duì)象的成員

from demo import name 導(dǎo)入模塊中成員的本質(zhì)是將 demo.py 中的全部代碼加載到內(nèi)存并執(zhí)行
只導(dǎo)入指定變量、函數(shù)等成員單元,不會(huì)將整個(gè)模塊導(dǎo)入

在導(dǎo)入模塊后,在模塊文件所在目錄下看到一個(gè)名為“__pycache__”的文件夾
Python 為每個(gè)模塊都生成一個(gè) *.cpython-36.pyc 文件,該文件是為模塊編譯生成的字節(jié)碼,用于提升該模塊的運(yùn)行效率

四.__all__變量

向文件導(dǎo)入某個(gè)模塊時(shí),導(dǎo)入的是該模塊中那些名稱不以下劃線(單下劃線、雙下劃線)開頭的變量、函數(shù)和類

如果不想模塊文件中的某個(gè)成員被引入到其它文件中使用,可以在其名稱前添加下劃線

新建demo.py文件

def test1():
 print("you")
def test2():
 print("chan")
def test3():
 print("will")

在新建的test.py文件中導(dǎo)入

from demo import *
test1()
test2()
test3()
you
chan
will

如果 demo.py 模塊中的 test1() 函數(shù)不想讓其它文件引入,只需將其名稱改為 _test1() 或者 __test1()

def _test1():
 print("you")

NameError: name 'test1' is not defined

__all__ 變量,該變量的值是一個(gè)列表,存儲(chǔ)的是當(dāng)前模塊中一些成員(變量、函數(shù)或者類)的名稱

通過(guò)在模塊文件中設(shè)置 __all__ 變量,當(dāng)其它文件以“from 模塊名 import *”的形式導(dǎo)入該模塊時(shí),該文件中只能使用 __all__ 列表中指定的成員

只有以“from 模塊名 import *”形式導(dǎo)入的模塊,當(dāng)該模塊設(shè)有 __all__ 變量時(shí),只能導(dǎo)入該變量指定的成員,未指定的成員無(wú)法導(dǎo)入

def test1():
 print("you")
def test2():
 print("chan")
def test3():
 print("will")
__all__ = ["test1","test2"]

from demo import *
test1()
test2()
test3()
you
chan
NameError: name 'test3' is not defined

__all__ 變量?jī)H限于在其它文件中以“from 模塊名 import *”的方式引入

import 模塊名 的形式導(dǎo)入模塊,可以通過(guò)模塊名前綴(別名)來(lái)調(diào)用模塊內(nèi)的所有成員(除了以下劃線開頭命名的成員),__all__變量的設(shè)置無(wú)效

from 模塊名 import 成員 導(dǎo)入指定成員,__all__變量的設(shè)置無(wú)用

到此這篇關(guān)于Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 模塊和加載模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python動(dòng)態(tài)加載模塊的3種方法
  • Python實(shí)現(xiàn)動(dòng)態(tài)加載模塊、類、函數(shù)的方法分析
  • 跟老齊學(xué)Python之模塊的加載
  • Python重新加載模塊的實(shí)現(xiàn)方法
  • Python模塊的加載講解
  • Python自動(dòng)重新加載模塊詳解(autoreload module)
  • Python之inspect模塊實(shí)現(xiàn)獲取加載模塊路徑的方法
  • Python如何重新加載模塊
  • Python新手如何理解循環(huán)加載模塊
  • Python中的模塊加載解析總結(jié)

標(biāo)簽:昆明 文山 梅州 懷化 錫林郭勒盟 西寧 石家莊 浙江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)》,本文關(guān)鍵詞  Python,關(guān)于,模塊,和,加載,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章