Python模塊
Python 模塊(Module),是一個(gè)Python 文件,以 .py 結(jié)尾,包含了 Python 對(duì)象定義和Python語(yǔ)句。
?
模塊讓你能夠有邏輯地組織你的Python 代碼段。
?
把相關(guān)的代碼分配到一個(gè)模塊里能讓你的代碼更好用,更易懂。
?
1.導(dǎo)入模塊的三種方法的區(qū)別
1)import導(dǎo)入
import?support? ?#?導(dǎo)入模塊,并不導(dǎo)入單個(gè)函數(shù)
?
?
?
# 現(xiàn)在可以調(diào)用模塊里包含的函數(shù)了 ,但是必須通過(guò)模塊名.函數(shù)名的方式調(diào)用
?
support.print_func("Runoob")
?
2)From … import導(dǎo)入
下面的語(yǔ)句可以將模塊中的某一部分導(dǎo)入,它只會(huì)將里這個(gè)部分單個(gè)引入到執(zhí)行這個(gè)聲明的模塊的全局符號(hào)表。這個(gè)部分可以是某個(gè)函數(shù)塊,也可以是函數(shù)塊的子函數(shù)塊。
?
from modname import name1[, name2[, ... nameN]]
3)From … import * 導(dǎo)入
前兩種語(yǔ)句都是導(dǎo)入模塊的部分,只是部分導(dǎo)入的位置不同,而使用From …import*則是導(dǎo)入模塊的全部項(xiàng)目,盡量少用,太耗內(nèi)存。
?
2.命名空間和作用域
變量是擁有匹配對(duì)象的名字(標(biāo)識(shí)符)。
?
命名空間是一個(gè)包含了變量名稱們(鍵)和它們各自相應(yīng)的對(duì)象們(值)的字典。每個(gè)函數(shù)都會(huì)有自己的命名空間,當(dāng)變量出現(xiàn)在函數(shù)內(nèi)部時(shí),Python默認(rèn)其為局部變量,若存在一個(gè)與局部變量重名的全局變量,則由局部變量覆蓋全局變量。
?
Python的命名空間分局部命名空間和全局命名空間。
?
3.找出模塊中所有的模塊名、函數(shù)名、變量名(dir()函數(shù))
# 導(dǎo)入內(nèi)置math模塊
import math
content = dir(math)
print content;
?
以上實(shí)例輸出結(jié)果:
?
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan',
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',
'sqrt', 'tan', 'tanh']
在這里,特殊字符串變量__name__指向模塊的名字,__file__指向該模塊的導(dǎo)入文件名。
?
?
?
4.查看全局變量和局部變量命名空間
根據(jù)調(diào)用地方的不同,globals()和 locals()函數(shù)可被用來(lái)返回全局和局部命名空間里的名字。
?
如果在函數(shù)內(nèi)部調(diào)用?locals(),返回的是所有能在該函數(shù)里訪問(wèn)的命名。
?
如果在函數(shù)內(nèi)部調(diào)用?globals(),返回的是所有在該函數(shù)里能訪問(wèn)的全局名字。
?
兩個(gè)函數(shù)的返回類型都是字典。所以名字們能用?keys() 函數(shù)摘取。
?
5. reload() 函數(shù)
當(dāng)一個(gè)模塊被導(dǎo)入到一個(gè)腳本,模塊頂層部分的代碼只會(huì)被執(zhí)行一次。
?
因此,如果你想重新執(zhí)行模塊里頂層部分的代碼,可以用?reload() 函數(shù)。該函數(shù)會(huì)重新導(dǎo)入之前導(dǎo)入過(guò)的模塊。語(yǔ)法如下:在這里,module_name要直接放模塊的名字,而不是一個(gè)字符串形式。
?
reload(module_name)