Python:模塊

1模塊

1.1Python中的模塊介紹和使用

有過C語言編程經(jīng)驗的朋友都知道在C語言中如果要引用sqrt函數(shù),必須用語句#include

引入math.h這個頭文件撵颊,否則是無法正常進行調(diào)用的铁材。

那么在Python中,如果要引用一些其他的函數(shù)奕锌,該怎么處理呢著觉?

在Python中有一個概念叫做模塊(module),這個和C語言中的頭文件以及Java中的包很類似惊暴,比如在Python中要調(diào)用sqrt函數(shù)饼丘,必須用import關(guān)鍵字引入math這個模塊,下面就來了解一下Python中的模塊辽话。

說的通俗點:模塊就好比是工具包肄鸽,要想使用這個工具包中的工具(就好比函數(shù)),就需要導(dǎo)入這個模塊

1.1.1import

在Python中用關(guān)鍵字import來引入某個模塊油啤,比如要引用模塊math典徘,就可以在文件最開始的地方用import math來引入。

形如:

import module1,mudule2...

當(dāng)解釋器遇到import語句益咬,如果模塊在當(dāng)前的搜索路徑就會被導(dǎo)入逮诲。

在調(diào)用math模塊中的函數(shù)時,必須這樣引用:

模塊名.函數(shù)名

·想一想:

為什么必須加上模塊名調(diào)用呢幽告?

·答:

因為可能存在這樣一種情況:在多個模塊中含有相同名稱的函數(shù)梅鹦,此時如果只是通過函數(shù)名來調(diào)用,解釋器無法知道到底要調(diào)用哪個函數(shù)冗锁。所以如果像上述這樣引入模塊的時候齐唆,調(diào)用函數(shù)必須加上模塊名

importmath

#這樣會報錯

printsqrt(2)

#這樣才能正確輸出結(jié)果

printmath.sqrt(2)

有時候我們只需要用到模塊中的某個函數(shù),只需要引入該函數(shù)即可冻河,此時可以用下面方法實現(xiàn):

from模塊名import函數(shù)名1,函數(shù)名2....

不僅可以引入函數(shù)箍邮,還可以引入一些全局變量茉帅、類等

注意:

o通過這種方式引入的時候,調(diào)用函數(shù)時只能給出函數(shù)名媒殉,不能給出模塊名担敌,但是當(dāng)兩個模塊中含有相同名稱函數(shù)的時候,后面一次引入會覆蓋前一次引入廷蓉。也就是說假如模塊A中有函數(shù)function( )全封,在模塊B中也有函數(shù)function(

),如果引入A中的function在先桃犬、B中的function在后刹悴,那么當(dāng)調(diào)用function函數(shù)的時候,是去執(zhí)行模塊B中的function函數(shù)攒暇。

o如果想一次性引入math中所有的東西土匀,還可以通過from math import *來實現(xiàn)

1.1.2from…import

Python的from語句讓你從模塊中導(dǎo)入一個指定的部分到當(dāng)前命名空間中

語法如下:

frommodnameimportname1[, name2[, ... nameN]]

例如,要導(dǎo)入模塊fib的fibonacci函數(shù)形用,使用如下語句:

fromfibimportfibonacci

注意

·不會把整個fib模塊導(dǎo)入到當(dāng)前的命名空間中就轧,它只會將fib里的fibonacci單個引入

1.1.3from … import *

把一個模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間也是可行的,只需使用如下聲明:

frommodnameimport*

注意

·這提供了一個簡單的方法來導(dǎo)入一個模塊中的所有項目田度。然而這種聲明不該被過多地使用妒御。

1.1.4as

In [1]: import time as tt

In [2]: time.sleep(1)

---------------------------------------------------------------------------

NameErrorTraceback (most recent call last)

in ()

----> 1 time.sleep(1)

NameError: name 'time' is not defined

In [3]:

In [3]:

In [3]: tt.sleep(1)

In [4]:

In [4]:

In [4]: from time import sleep as sp

In [5]: sleep(1)

---------------------------------------------------------------------------

NameErrorTraceback (most recent call last)

in ()

----> 1 sleep(1)

NameError: name 'sleep' is not defined

In [6]:

In [6]:

In [6]: sp(1)

In [7]:

1.1.5定位模塊

當(dāng)你導(dǎo)入一個模塊,Python解析器對模塊位置的搜索順序是:

1.當(dāng)前目錄

2.如果不在當(dāng)前目錄镇饺,Python則搜索在shell變量PYTHONPATH下的每個目錄乎莉。

3.如果都找不到,Python會察看默認(rèn)路徑奸笤。UNIX下惋啃,默認(rèn)路徑一般為/usr/local/lib/python/

4.模塊搜索路徑存儲在system模塊的sys.path變量中。變量里包含當(dāng)前目錄监右,PYTHONPATH和由安裝過程決定的默認(rèn)目錄边灭。

1.2模塊制作

1.2.1定義自己的模塊

在Python中,每個Python文件都可以作為一個模塊健盒,模塊的名字就是文件的名字存筏。

比如有這樣一個文件test.py,在test.py中定義了函數(shù)add

test.py

defadd(a,b):

returna+b

1.2.2調(diào)用自己定義的模塊

那么在其他文件中就可以先import test味榛,然后通過test.add(a,b)來調(diào)用了椭坚,當(dāng)然也可以通過from test import add來引入

main.py

importtest

result = test.add(11,22)

print(result)

1.2.3測試模塊

在實際開中,當(dāng)一個開發(fā)人員編寫完一個模塊后搏色,為了讓模塊能夠在項目中達到想要的效果善茎,這個開發(fā)人員會自行在py文件中添加一些測試信息,例如:

test.py

defadd(a,b):

returna+b

#用來進行測試

ret = add(12,22)

print('int test.py file,,,,12+22=%d'%ret)

如果此時频轿,在其他py文件中引入了此文件的話垂涯,想想看烁焙,測試的那段代碼是否也會執(zhí)行呢!

main.py

importtest

result = test.add(11,22)

print(result)

至此耕赘,可發(fā)現(xiàn)test.py中的測試代碼骄蝇,應(yīng)該是單獨執(zhí)行test.py文件時才應(yīng)該執(zhí)行的,不應(yīng)該是其他的文件中引用而執(zhí)行

為了解決這個問題操骡,python在執(zhí)行一個文件時有個變量__name__

總結(jié):

·可以根據(jù)__name__變量的結(jié)果能夠判斷出九火,是直接執(zhí)行的python腳本還是被引入執(zhí)行的,從而能夠有選擇性的執(zhí)行測試代碼

·__name__如果寫在被直接運行的主文件中册招,是”__main__”

·如果寫在被導(dǎo)入的文件中岔激,運行主文件的時候,導(dǎo)入文件中的__name__是”模塊的名字”

1.3模塊中的__all__

1.3.1沒有__all__

1.3.2模塊中有__all__

總結(jié)

·如果一個文件中有__all__變量是掰,那么也就意味著這個變量中的元素虑鼎,不會被from xxx import *時導(dǎo)入

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市键痛,隨后出現(xiàn)的幾起案子炫彩,更是在濱河造成了極大的恐慌,老刑警劉巖絮短,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媒楼,死亡現(xiàn)場離奇詭異,居然都是意外死亡戚丸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門扔嵌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來限府,“玉大人,你說我怎么就攤上這事痢缎⌒采祝” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵独旷,是天一觀的道長署穗。 經(jīng)常有香客問我,道長嵌洼,這世上最難降的妖魔是什么案疲? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮麻养,結(jié)果婚禮上褐啡,老公的妹妹穿的比我還像新娘。我一直安慰自己鳖昌,他們只是感情好备畦,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布低飒。 她就那樣靜靜地躺著,像睡著了一般懂盐。 火紅的嫁衣襯著肌膚如雪褥赊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天莉恼,我揣著相機與錄音拌喉,去河邊找鬼。 笑死类垫,一個胖子當(dāng)著我的面吹牛司光,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悉患,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼残家,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了售躁?” 一聲冷哼從身側(cè)響起坞淮,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陪捷,沒想到半個月后回窘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡市袖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年啡直,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苍碟。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡酒觅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出微峰,到底是詐尸還是另有隱情舷丹,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布蜓肆,位于F島的核電站颜凯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仗扬。R本人自食惡果不足惜症概,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望早芭。 院中可真熱鬧穴豫,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至司抱,卻和暖如春筐眷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背习柠。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工匀谣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人资溃。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓武翎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溶锭。 傳聞我的和親對象是個殘疾皇子宝恶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1模塊 1.1Python中的模塊介紹和使用 有過C語言編程經(jīng)驗的朋友都知道在C語言中如果要引用sqrt函數(shù),必須...
    PythonMaO閱讀 431評論 0 0
  • 模塊簡介 在軟件開發(fā)過程中趴捅,隨著代碼的不斷增加垫毙,在一個問價里代碼就會越來越長,不容易維護拱绑。為了編寫可維護的代碼综芥,我...
    齊天大圣李圣杰閱讀 798評論 0 0
  • 引用自理解 python 模塊加載和路徑查找 基礎(chǔ)概念 module模塊, 一個 py 文件或以其他文件形式存在的...
    izhangxm閱讀 3,389評論 0 8
  • 《Python 源碼剖析》筆記 import 在交互環(huán)境下猎拨,使用不帶參數(shù)的dir()可以打印當(dāng)前l(fā)ocal命名空間...
    超net閱讀 3,019評論 1 6
  • 人們常常說自己的生活怎么樣怎么樣膀藐,但是這些話說出來的意義是什么,是對生活的不滿嗎红省? 我們都一直在說后悔额各,后悔上...
    微末光芒閱讀 214評論 0 0