成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

帶你學(xué)python基礎(chǔ):模塊和包

一、什么是模塊

在我們平時(shí)的開發(fā)過程中,或多或少會(huì)用到 Python 的一些內(nèi)置的功能,或者說,還會(huì)用到一些第三方的庫,我們用到的這些 Python 的內(nèi)置的功能,和一些第三方的庫,就可以說是一些模塊了。

10年積累的網(wǎng)站制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有岑溪免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

例如,我們?cè)谧x寫文件的時(shí)候,我們就會(huì)用到文件操作的模塊os。

是不是經(jīng)常遇到呢?模塊,來了!

帶你學(xué)python基礎(chǔ):模塊和包

其實(shí),每一個(gè) Python 腳本文件都可以被當(dāng)成是一個(gè)模塊。

模塊以磁盤文件的形式存在。當(dāng)一個(gè)模塊變得過大,并且驅(qū)動(dòng)了太多功能的話,就應(yīng)該考慮拆一些代碼出來另外建一個(gè)模塊。

模塊里的代碼可以是一段直接執(zhí)行的腳本,也可以是一堆類似庫函數(shù)的代碼,從而可以被別的模塊導(dǎo) 入(import)調(diào)用。模塊可以包含直接運(yùn)行的代碼塊、類定義、 函數(shù)定義或這幾者的組合。

推薦所有的模塊在Python模塊的開頭部分導(dǎo)入。而且最好按照這樣的順序:

  • Python標(biāo)準(zhǔn)庫模塊
  • Python第三方模塊
  • 自定義模塊

帶你學(xué)python基礎(chǔ):模塊和包

這個(gè)只是說約定這樣最好,其實(shí)怎樣的順序都是沒有關(guān)系的?。?!

二、如何使用模塊

我想,應(yīng)該知道什么是模塊了吧!

那好,再看看如何使用吧!

帶你學(xué)python基礎(chǔ):模塊和包

在 Python 中用關(guān)鍵字import來引入某個(gè)模塊,比如要導(dǎo)入模塊 os,就可以在文件最開始的地方用import os來引入。下面,看一個(gè)簡單的例子。

# 導(dǎo)入系統(tǒng)os模塊
import os

# 列出目錄下的文件
files = os.listdir('F:\\人工智能\\2018北風(fēng)網(wǎng)人工智能(完結(jié))\\三、python基礎(chǔ)(1)\\學(xué)習(xí)PPT\\學(xué)習(xí)PPT')
print(files)

這個(gè)例子中,我們導(dǎo)入了系統(tǒng) os 模塊,然后調(diào)用這個(gè) os 模塊的方法,列出目標(biāo)目錄下的所有文件!

import使用方法

語法

import module1 
import module2
......
import moduleN

或者

import module1[, module2[,... moduleN]]

[]:表示可選!

模塊函數(shù)調(diào)用

當(dāng)我們導(dǎo)入了模塊之后,我們就可以通過模塊名.函數(shù)名<br/>來調(diào)用模塊中的函數(shù)了,其實(shí),我們也可以直接函數(shù)名 調(diào)用方法即可。但是需要注意的是,如果多個(gè)模塊中都有相同的一個(gè)方法名時(shí),我們就必須要用模塊名.函數(shù)名來調(diào)用模塊中的函數(shù),不然會(huì)出現(xiàn)沖突!

例如

files = os.listdir('F:\\人工智能\\2018北風(fēng)網(wǎng)人工智能(完結(jié))\\三、python基礎(chǔ)(1)\\學(xué)習(xí)PPT\\學(xué)習(xí)PPT')

這就是調(diào)用模塊中的方法!

導(dǎo)入模塊中部分方法

有時(shí)候,我們并不需要導(dǎo)入模塊中的所有方法,所以,python的也提供了,只導(dǎo)入我們需要導(dǎo)入的方法的方式。

  • from modname import name1[, name2[, ... nameN]]

例如,要導(dǎo)入模塊time的sleep函數(shù),使用如下語句。

from time import sleep, strptime

導(dǎo)入所有內(nèi)容

from modname import*

有時(shí)候,因?yàn)槟K的名字太長或者太復(fù)雜,可能寫的時(shí)候不太方便,所以,我們可以使用別名的方式來導(dǎo)入,方便編寫!

別名導(dǎo)入

別名導(dǎo)入,只需要在導(dǎo)入語句后面加關(guān)鍵字as

import numpy
import numpy as np  # 為numpy取別名為np

二、自定義模塊

既然,python可以有內(nèi)置的模塊,那么我們可不可以自定義自己的模塊呢,把自己的功能做成一個(gè)模塊豈不是美滋滋?

帶你學(xué)python基礎(chǔ):模塊和包

當(dāng)然沒有問題了,下面就來自己實(shí)現(xiàn)!

同文件夾實(shí)現(xiàn)

這個(gè)是說,python文件都在同一個(gè)文件夾下的情況。

現(xiàn)在,我們?cè)谕粋€(gè)文件夾下定義兩個(gè) python 文件,分別為test.py,02_demo.py
帶你學(xué)python基礎(chǔ):模塊和包

test.py中定義如下內(nèi)容

def sum(a, b):
    return a + b

導(dǎo)入方法

在02_demo.py中

# 導(dǎo)入同文件夾下
import test

from test import sum

print(sum(1, 2))

可以看出,同一文件夾下,只需要直接導(dǎo)入文件名即可!

不同文件夾實(shí)現(xiàn)

現(xiàn)在有02_demo.py和在learn文件下的test02.py文件,目錄如下
帶你學(xué)python基礎(chǔ):模塊和包

test02.py內(nèi)容

def mul(a, b):
    return a * b

02_demo.py中跨文件夾調(diào)用

# 跨文件夾調(diào)用
import learn.test2

from learn import test2

print(test2.mul(1, 5))

不同文件夾的調(diào)用,我們發(fā)現(xiàn),需要加上文件路徑,例如,test02文件在learn文件夾下,所以導(dǎo)入方式為learn.test02。

然而,
帶你學(xué)python基礎(chǔ):模塊和包
這并不是最完美的,你想,如果項(xiàng)目很大,文件夾下很多的模塊,是不是每個(gè)都這樣導(dǎo)入,是不是會(huì)很麻煩。所以,python 中還提供了更簡單的方式--將目標(biāo)路徑加入到環(huán)境當(dāng)中。

'''
    跨模塊引入2
'''
import sys  # 查看路徑變量

print(sys.path)
# 添加目標(biāo)路徑導(dǎo)當(dāng)前環(huán)境中
sys.path.append('.\\learn')  # 返回上一級(jí)目錄
import test2 as tt

print(tt.mul(1, 10))

是不是簡單多了!

另外,如果我們自己定義的模塊和系統(tǒng)模塊重名,導(dǎo)入的時(shí)候是會(huì)覆蓋系統(tǒng)的模塊哦!

例如,我們?cè)?code>learn文件夾下定義一個(gè) math.py 文件
帶你學(xué)python基礎(chǔ):模塊和包

math.py文件

import math

def tan(x):
    return math.tan(x) + 1

當(dāng)我們導(dǎo)入math的時(shí)候,是會(huì)覆蓋系統(tǒng)的math的,導(dǎo)入的將是我們自定義的math。

# 覆蓋標(biāo)準(zhǔn)模塊
from learn import math

print('自定義:', math.tan(30))

import math

print('系統(tǒng):', math.tan(30))

帶你學(xué)python基礎(chǔ):模塊和包

最后再講一個(gè)東西,包!

三、包

既然有了模塊,為什么還會(huì)有包呢,包到底是什么呢?容我一一道來。

我們都知道一個(gè)模塊通常是一個(gè) python 文件,但是,這樣是不是顯得太零散了,如果我們出門的時(shí)候,東西太多了,是不是需要一個(gè)書包來裝一下這些東西,就更方便是不是!所以,包就是這個(gè)作用,把一些功能相近或者相似的模塊,都放在一個(gè)稱為的地方!

帶你學(xué)python基礎(chǔ):模塊和包

這個(gè)包如何?哈哈!

那么包和模塊到底有什么不一樣呢?

包使用

包是一個(gè)文件夾,但是,他有一個(gè)特殊之處,我們必須在這個(gè)文件夾下面定義一個(gè)__init__.py的文件,才能被程序認(rèn)作是,模塊才能被導(dǎo)入成功。

現(xiàn)在我們就用一個(gè),首先,我們新建一個(gè)名為package的文件夾,然后再定義一個(gè)__init__.py的文件。

帶你學(xué)python基礎(chǔ):模塊和包

然后,再在這個(gè)文件夾下新建 test10.pytest11.py文件,內(nèi)容如下

test10.py

def subtract(x, y):
    return x - y

test11.py

def add(x, y):
    return x + y

好了,現(xiàn)在我們?cè)囍?strong>導(dǎo)包。

# 導(dǎo)包演示

import package

print(test10.subtract(10, 10))

我們發(fā)現(xiàn)報(bào)錯(cuò):說我們的test10沒有定義,但是我們明明定義了,為什么呢?
帶你學(xué)python基礎(chǔ):模塊和包

原來,在我們創(chuàng)建一個(gè)__init__.py文件,并且一定要在文件中寫入__all__變量,為什么需要這個(gè)變量呢?
帶你學(xué)python基礎(chǔ):模塊和包

因?yàn)?code>__init__.py控制著包的導(dǎo)入行為。如果__init__.py文件為空的話,僅僅是把這個(gè)包導(dǎo)入,不會(huì)導(dǎo)入包中的模塊。__init__.py中的__all__變量,是用來*控制from包名import 時(shí)導(dǎo)入的模塊**。

所以,我們?cè)?code>__init__.py中加入__all__變量。

__all__ = ['test10', 'test11']

就正確了。
帶你學(xué)python基礎(chǔ):模塊和包

包會(huì)了吧?

最后的最后,說一個(gè)小知識(shí)點(diǎn)。

imp.reload()

這個(gè)函數(shù)有什么作用呢?

試想一下這樣的場(chǎng)景,模塊在第一次被導(dǎo)入之后,其他的導(dǎo)入都不再有效。如果此時(shí)在另一個(gè)窗口中改變并保存了模塊的源代碼文件,也無法更新該模塊。

這樣設(shè)計(jì)原因在于,導(dǎo)入是一個(gè)開銷很大的操作(導(dǎo)入必須找到文件,將其編譯成字節(jié)碼,并且運(yùn)行代碼),以至于每個(gè)文件、每個(gè)程序運(yùn)行不能夠重復(fù)多于一次。

當(dāng)一個(gè)模塊被導(dǎo)入到一個(gè)腳本,模塊頂層部分的代碼只會(huì)被執(zhí)行一次。
因此,如果你想重新執(zhí)行模塊里頂層部分的代碼,可以用reload()函數(shù)。該函數(shù)會(huì)重新導(dǎo)入之前導(dǎo)入過的模塊。

'''
    重新加載
'''
import test
# import test  #引入兩邊只輸出一句hahaha
import imp
imp.reload(test)  #重新導(dǎo)入test模塊

分享名稱:帶你學(xué)python基礎(chǔ):模塊和包
轉(zhuǎn)載注明:http://jinyejixie.com/article42/iissec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站收錄、企業(yè)網(wǎng)站制作、電子商務(wù)動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
湘西| 交口县| 高雄市| 兴海县| 苏尼特左旗| 贡嘎县| 西平县| 静安区| 赤峰市| 临泽县| 清镇市| 河曲县| 西充县| 南皮县| 德令哈市| 通城县| 正定县| 惠来县| 广西| 汝南县| 醴陵市| 绥德县| 柏乡县| 溧阳市| 福建省| 东丰县| 南通市| 托克托县| 昌乐县| 南阳市| 湖北省| 阳东县| 青州市| 福安市| 朝阳区| 阳原县| 昭平县| 杭锦后旗| 壶关县| 维西| 惠州市|