python全部模組 Python 模組

2021-10-11 00:03:39 字數 4535 閱讀 8942

python模組

模組讓你能夠有邏輯地組織你的python**段。

把相關的**分配到乙個模組裡能讓你的**更好用,更易懂。

模組也是python物件,具有隨機的名字屬性用來繫結或引用。

簡單地說,模組就是乙個儲存了python**的檔案。模組能定義函式,類和變數。模組裡也能包含可執行的**。

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

def print_func( par ):

print "hello : ", par

return

import語句

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

import module1[, module2[,... modulen]

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

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

#coding=utf-8

#!/usr/bin/python

#匯入模組import support

#現在可以呼叫模組裡包含的函式了support.print_func("zara")

以上例項輸出結果:

hello : zara

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

from…import語句

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

from modname import name1[, name2[, ... namen]]

例如,要匯入模組fib的fibonacci函式,使用如下語句:

from fib import fibonacci

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

from…import*語句

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

from modname import *

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

定位模組

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

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

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

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

pythonpath變數

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

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

set pythonpath=c:\python20\lib;

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

命名空間和作用域

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

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

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

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

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

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

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

#coding=utf-8

#!/usr/bin/python

money = 2000

def addmoney():

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

dir()函式

dir()函式乙個排好序的字串列表,內容是乙個模組裡定義過的名字。

#coding=utf-8

#!/usr/bin/python

#匯入內建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()函式

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

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

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

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

reload()函式

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

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

reload(module_name)

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

reload(hello)

python中的包

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

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

#coding=utf-8

#!/usr/bin/python

def pots():

print "i'm pots phone"

同樣地,我們有另外兩個儲存了不同函式的檔案: phone/isdn.py含有函式isdn()

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

現在,在phone目錄下建立file __init__.py: phone/__init__.py

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

from pots import pots

from isdn import isdn

from g3 import g3

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

#coding=utf-8

#!/usr/bin/python

# now import your phone package.

import phone

phone.pots()

phone.isdn()

phone.g3()

以上例項輸出結果:

i'm pots phone

i'm 3g phone

i'm isdn phone

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

python通達信模組 通達信轉python

好轉,學會以下操作就很容了。得到當前工作目錄,即當前python指令碼工作的目錄路徑 os.getcwd 返回指定目錄下的所有檔案和目錄名 os.listdir 函式用來刪除乙個檔案 os.remove 刪除多個目錄 osremovedirs r c python 略危險,熟練之後再用吧 檢驗給出的...

如何把idaapi模組在外部給python使用

使用ida都知道idapython外掛程式,提供idc.py idaapi.py idautils.py,可以直接import進來,可以在ida執行時使用內部python外掛程式執行 然而這幾個函式在不使用ida上下文的時候是無法使用的,會提示找不到 idaapi模組,那麼 idaapi又是 來的呢...

Python學習筆記 1 1 2 認識Python

一.課程目標 二.詳情解讀 1.初識pythonpython語言是一種高階程式語言,它於1991年由吉多.範羅蘇姆 guido van rossum 發明。目前主要應用於web開發 gui開發 網路爬蟲 資料科學 人工智慧等領域。python官方 python語言也是一種多正規化程式語言,即物件導向...