什麼是Python模組

2022-07-24 22:24:28 字數 4299 閱讀 4770

例子

乙個叫做aname的模組裡的python**一般都能在乙個叫aname.py的檔案中找到。下例是個簡單的模組support.py。

def print_func( par ):

print "hello : ", par

return

想使用python原始檔,只需在另乙個原始檔裡執行import語句,語法如下:

import module1[, module2[,... modulen]
當直譯器遇到import語句,如果模組在當前的搜尋路徑就會被匯入。

搜尋路徑是乙個直譯器會先進行搜尋的所有目錄的列表。如想要匯入模組hello.py,需要把命令放在指令碼的頂端:

#!/usr/bin/python

# -*- coding: utf-8 -*-

# 匯入模組

import support

# 現在可以呼叫模組裡包含的函式了

support.print_func("zero")

以上例項輸出結果:

hello : zero
乙個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行。

python的from語句讓你從模組中匯入乙個指定的部分到當前命名空間中。語法如下:

from modname import name1[, name2[, ... namen]]
例如,要匯入模組fib的fibonacci函式,使用如下語句:

from fib import fibonacci
這個宣告不會把整個fib模組匯入到當前的命名空間中,它只會將fib裡的fibonacci單個引入到執行這個宣告的模組的全域性符號表。

把乙個模組的所有內容全都匯入到當前的命名空間也是可行的,只需使用如下宣告:

from modname import *
這提供了乙個簡單的方法來匯入乙個模組中的所有專案。然而這種宣告不該被過多地使用。

當你匯入乙個模組,python解析器對模組位置的搜尋順序是:

* 當前目錄

* 如果不在當前目錄,python 則搜尋在 shell 變數 pythonpath 下的每個目錄。

* 如果都找不到,python會察看預設路徑。unix下,預設路徑一般為/usr/local/lib/python/。

模組搜尋路徑儲存在system模組的sys.path變數中。變數裡包含當前目錄,pythonpath和由安裝過程決定的預設目錄。

作為環境變數,pythonpath由裝在乙個列表裡的許多目錄組成。pythonpath的語法和shell變數path的一樣。

在windows系統,典型的pythonpath如下:

set pythonpath=c:\python20\lib;
在unix系統,典型的pythonpath如下:

set pythonpath=/usr/local/lib/python
變數是擁有匹配物件的名字(識別符號)。命名空間是乙個包含了變數名稱們(鍵)和它們各自相應的物件們(值)的字典。

乙個python表示式可以訪問區域性命名空間和全域性命名空間裡的變數。如果乙個區域性變數和乙個全域性變數重名,則區域性變數會覆蓋全域性變數。

每個函式都有自己的命名空間。類的方法的作用域規則和通常函式的一樣。

python會智慧型地猜測乙個變數是區域性的還是全域性的,它假設任何在函式內賦值的變數都是區域性的。

因此,如果要給全域性變數在乙個函式裡賦值,必須使用global語句。

global varname的表示式會告訴python, varname是乙個全域性變數,這樣python就不會在區域性命名空間裡尋找這個變數了。

例如,我們在全域性命名空間裡定義乙個變數money。我們再在函式內給變數money賦值,然後python會假定money是乙個區域性變數。然而,我們並沒有在訪問前宣告乙個區域性變數money,結果就是會出現乙個unboundlocalerror的錯誤。取消global語句的注釋就能解決這個問題。

#!/usr/bin/python

# -*- coding: utf-8 -*-

money = 2000

def addmoney():

# 想改正**就取消以下注釋:

# global money

money = money + 1

print money

addmoney()

print money

#!/usr/bin/python

# -*- coding: utf-8 -*-

# 匯入內建math模組

import math

content = dir(math)

print content;

以上例項輸出結果:

['__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__指向該模組的匯入檔名。

根據呼叫地方的不同,globals()和locals()函式可被用來返回全域性和區域性命名空間裡的名字。

如果在函式內部呼叫locals(),返回的是所有能在該函式裡訪問的命名。

如果在函式內部呼叫globals(),返回的是所有在該函式裡能訪問的全域性名字。

兩個函式的返回型別都是字典。所以名字們能用keys()函式摘取。

當乙個模組被匯入到乙個指令碼,模組頂層部分的**只會被執行一次。

因此,如果你想重新執行模組裡頂層部分的**,可以用reload()函式。該函式會重新匯入之前匯入過的模組。語法如下:

reload(module_name)
在這裡,module_name要直接放模組的名字,而不是乙個字串形式。比如想過載hello模組,如下:

reload(hello)
包是乙個分層次的檔案目錄結構,它定義了乙個由模組及子包,和子包下的子包等組成的python的應用環境。

考慮乙個在phone目錄下的pots.py檔案。這個檔案有如下源**:

#!/usr/bin/python

# -*- coding: utf-8 -*-

def pots():

print "i'm pots phone"

同樣地,我們有另外兩個儲存了不同函式的檔案:

* phone/isdn.py 含有函式isdn()

* phone/g3.py 含有函式g3()

現在,在phone目錄下建立fileinit.py:

* phone/init.py

當你匯入phone時,為了能夠使用所有函式,你需要在__init__.py裡使用顯式的匯入語句,如下:

from pots import pots

from isdn import isdn

from g3 import g3

當你把這些**新增到__init__.py之後,匯入phone包的時候這些類就全都是可用的了。

#!/usr/bin/python

# -*- coding: utf-8 -*-

# 匯入 phone 包

import phone

phone.pots()

phone.isdn()

phone.g3()

以上例項輸出結果:

i'm pots phone

i'm 3g phone

i'm isdn phone

如上,為了舉例,我們只在每個檔案裡放置了乙個函式,但其實你可以放置許多函式。你也可以在這些檔案裡定義python的類,然後為這些類建乙個包。

詳情請見python高階

python是什麼模組 python模組是什麼?

一句話概括 python的模組其實就是封裝了乙個或者多個功能的 集合,模組可以是乙個檔案也可以是乙個目錄,目錄的形式稱作包。模組分類 內建模組 內建模組可以理解成當你安裝好python環境之後,直接可以使用import匯入的就是內建模組,預設模組路徑為 c python35 lib,你也可以通過以下...

什麼是模組程式設計?

模組化程式設計是指將大型 笨拙的程式設計任務分解為單獨的 更小更易於管理的子任務或模組的過程。然後可以像構建塊一樣拼湊單個模組以建立更大的應用程式。在大型應用程式中模組化 有以下幾個優點。1 簡單性 模組通常只關注問題的一小部分,而不是關注手頭的整個問題。如果正在處理單個模組,那麼將有乙個較小的問題...

什麼是SFP光模組?

光模組 optical module 由光電子器件 功能電路和光介面等組成,光電子器件包括發射和接收兩部分。簡單的說,光模組的作用就是光電轉換,傳送端把電訊號轉換成光訊號,通過光纖傳送後,接收端再把光訊號轉換成電訊號。常見的中文叫法有 光模組,光纖模組,光收發一體模組。光模組按照封裝形式和速率等分類...