Python中的模塊 有過(guò)C語(yǔ)言編程經(jīng)驗(yàn)的朋友都知道在C語(yǔ)言中如果要引用sqrt這個(gè)函數(shù),必須用語(yǔ)句"#include<math.h>"引入math.h這個(gè)頭文件,否則是無(wú)法正常進(jìn)行調(diào)用的。那么在Python中,如果要引用一些內(nèi)置的函數(shù),該怎么處理呢?在Python中有一個(gè)概念叫做模塊(module),這個(gè)和C語(yǔ)言中的頭文件以及Java中的包很類(lèi)似,比如在Python中要調(diào)用sqrt函數(shù),必須用import關(guān)鍵字引入math這個(gè)模塊,下面就來(lái)了解一下Python中的模塊。 一.模塊的引入 在Python中用關(guān)鍵字import來(lái)引入某個(gè)模塊,比如要引用模塊math,就可以在文件最開(kāi)始的地方用import math來(lái)引入。在調(diào)用math模塊中的函數(shù)時(shí),必須這樣引用: 模塊名.函數(shù)名 為什么必須加上模塊名這樣調(diào)用呢?因?yàn)榭赡艽嬖谶@樣一種情況:在多個(gè)模塊中含有相同名稱(chēng)的函數(shù),此時(shí)如果只是通過(guò)函數(shù)名來(lái)調(diào)用,解釋器無(wú)法知道到底要調(diào)用哪個(gè)函數(shù)。所以如果像上述這樣引入模塊的時(shí)候,調(diào)用函數(shù)必須加上模塊名。 有時(shí)候我們只需要用到模塊中的某個(gè)函數(shù),只需要引入該函數(shù)即可,此時(shí)可以通過(guò)語(yǔ)句 from 模塊名 import 函數(shù)名1,函數(shù)名2.... 來(lái)實(shí)現(xiàn),當(dāng)然可以通過(guò)不僅僅可以引入函數(shù),還可以引入一些常量。通過(guò)這種方式引入的時(shí)候,調(diào)用函數(shù)時(shí)只能給出函數(shù)名,不能給出模塊名,但是當(dāng)兩個(gè)模塊中含有相同名稱(chēng)函數(shù)的時(shí)候,后面一次引入會(huì)覆蓋前一次引入。也就是說(shuō)假如模塊A中有函數(shù)function( ),在模塊B中也有函數(shù)function( ),如果引入A中的function在先、B中的function在后,那么當(dāng)調(diào)用function函數(shù)的時(shí)候,是去執(zhí)行模塊B中的function函數(shù)。 如果想一次性引入math中所有的東西,還可以通過(guò)from math import *來(lái)實(shí)現(xiàn),但是不建議這么做。 二.定義自己的模塊 在Python中,每個(gè)Python文件都可以作為一個(gè)模塊,模塊的名字就是文件的名字。 比如有這樣一個(gè)文件test.py,在test.py中定義了函數(shù)add: #test.py def add(a,b): return a+b 那么在其他文件中就可以先import test,然后通過(guò)test.add(a,b)來(lái)調(diào)用了,當(dāng)然也可以通過(guò)from test import add來(lái)引入。 三.在引入模塊的時(shí)候發(fā)生了什么 先看一個(gè)例子,在文件test.py中的代碼: 在test1.py中引入模塊test: #test1.py import test 然后運(yùn)行test1.py,會(huì)輸出"hello world"。也就是說(shuō)在用import引入模塊時(shí),會(huì)將引入的模塊文件中的代碼執(zhí)行一次。但是注意,只在第一次引入時(shí)才會(huì)執(zhí)行模塊文件中的代碼,因?yàn)橹辉诘谝淮我霑r(shí)進(jìn)行加載,這樣做很容易理解,不僅可以節(jié)約時(shí)間還可以節(jié)約內(nèi)存。 |
|
來(lái)自: 會(huì)飛的蘑菇 > 《python》