Python 學習筆記 (4) 模組

2021-09-04 06:34:56 字數 4583 閱讀 2882

模組基本上就是乙個包含了所有你定義的函式和變數的檔案。為了在其他程式中重用模組,模組的檔名必須以.py為副檔名。

模組可以從其他程式 輸入 以便利用它的功能。這也是我們使用python標準庫的方法。首先,我們將學習如何使用標準庫模組。

#!/usr/bin/python

# filename: using_sys.py

import sys

print 'the command line arguments are:'

for i in sys.argv:

print i

執行結果

$ python using_sys.py we are arguments

the command line arguments are:

using_sys.py

weare

arguments

工作原理

首先,我們利用import語句 輸入 sys模組。基本上,這句語句告訴python,我們想要使用這個模組。sys模組包含了與python直譯器和它的環境有關的函式。

當python執行import sys語句的時候,它在sys.path變數中所列目錄中尋找sys.py模組。如果找到了這個檔案,這個模組的主塊中的語句將被執行,然後這個模組將能夠被你 使用 。注意,初始化過程僅在我們 第一次 輸入模組的時候進行。

sys模組中的argv變數通過使用點號指明——sys.argv——這種方法的乙個優勢是這個名稱不會與任何在你的程式中使用的argv變數衝突。另外,它也清晰地表明了這個名稱是sys模組的一部分。

這裡,當我們執行python using_sys.py we are arguments的時候,我們使用python命令執行using_sys.py模組,後面跟著的內容被作為引數傳遞給程式。python為我們把它儲存在sys.argv變數中。

記住,指令碼的名稱總是sys.argv列表的第乙個引數。所以,在這裡,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。注意,python從0開始計數,而非從1開始。

sys.path包含輸入模組的目錄名列表。我們可以觀察到sys.path的第乙個字串是空的——這個空的字串表示當前目錄也是sys.path的一部分,這與pythonpath環境變數是相同的。這意味著你可以直接輸入位於當前目錄的模組。否則,你得把你的模組放在sys.path所列的目錄之一。

模組的__name__

每個模組都有乙個名稱,在模組中可以通過語句來找出模組的名稱。這在乙個場合特別有用——就如前面所提到的,當乙個模組被第一次輸入的時候,這個模組的主塊將被執行。假如我們只想在程式本身被使用的時候執行主塊,而在它被別的模組輸入的時候不執行主塊,我們該怎麼做呢?這可以通過模組的__name__屬性完成。

例子2:

#!/usr/bin/python

# filename: using_name.py

if __name__ == '__main__':

print 'this program is being run by itself'

else:

print 'i am being imported from another module'

執行結果

$ python using_name.py

this program is being run by itself

$ python

>>> import using_name

i am being imported from another module

>>>

每個python模組都有它的__name__,如果它是'__main__',這說明這個模組被使用者單獨執行,我們可以進行相應的操作。

如何建立你自己的模組

建立你自己的模組是十分簡單的,你一直在這樣做!每個python程式也是乙個模組。你已經確保它具有.py副檔名了。下面這個例子將會使它更加清晰。

例子3

#!/usr/bin/python

# filename: mymodule.py

def sayhi():

print 'hi, this is mymodule speaking.'

version = '0.1'

# end of mymodule.py

上面是乙個 模組 的例子。你已經看到,它與我們普通的python程式相比並沒有什麼特別之處。我們接下來將看看如何在我們別的python程式中使用這個模組。

記住這個模組應該被放置在我們輸入它的程式的同乙個目錄中,或者在sys.path所列目錄之一。

#!/usr/bin/python

# filename: mymodule_demo.py

import mymodule

mymodule.sayhi()

print 'version', mymodule.version

執行結果

$ python mymodule_demo.py

hi, this is mymodule speaking.

version 0.1

它如何工作

注意我們使用了相同的點號來使用模組的成員。python很好地重用了相同的記號來,使我們這些python程式設計師不需要不斷地學習新的方法。

from..import

下面是乙個使用from..import語法的版本。

#!/usr/bin/python

# filename: mymodule_demo2.py

from mymodule import sayhi, version

# alternative:

# from mymodule import *

sayhi()

print 'version', version

模組與包

1.模組可以通過以下3種方式引用

(1)import

(2)import ... as ...

(3)from ... import ...

例如:

[root@node1 python]# python say.py

hello world

[root@node1 python]# cat say.py

#!/usr/bin/python

def say():

print 'hello world'

say()

[root@node1 python]# cat saysomething.py

import say

[root@node1 python]# python saysomething.py

hello world

(1)

[root@node1 python]# cat saysomething.py

import say

say.say()

[root@node1 python]# python saysomething.py

hello world

(2)

[root@node1 python]# cat saysomething.py

import say as s

s.say()

[root@node1 python]# python saysomething.py

hello world

(3)

[root@node1 python]# cat saysomething.py

from say import say

say()

[root@node1 python]# python saysomething.py

hello world

2.包

包的結構,需要目錄裡面存在__init__.py 檔案即可

[root@node1 python]# mkdir add

[root@node1 python]# vim add/operator.py

#!/usr/bin/python

def f(x,y):

return x+y

[root@node1 python]# touch add/__init__.py

[root@node1 python]# vim test.py

#!/usr/bin/python

import add.operator

print add.operator.f(1,2)

[root@node1 python]# python test.py

3

Python學習筆記4 模組

現在看看python中的模組吧 先貼上 main.py import module module.function module.py def function print execute function 一 引入模組 可以看到,我們使用關健字import引入模組,格式 import 模組名 不需...

python學習筆記 4 模組

常見的內建模組 模組匯入模組的語法 模組,在python裡乙個py檔案,就可以理解為模組 不是所有的py檔案都能作為模組來匯入 如果讓可以匯入,模組名字必須遵守命名規則 import time 1 使用import模組名直接匯入乙個模組 from random import randint 2 fr...

python學習(4)模組

模組是 py檔案,包是包含模組的資料夾,包與普通資料夾的不同之處是,包中總有乙個 init py檔案。模組和包的存在是為了防止重名。用import 語句匯入模組,用 from.import 語句匯入函式。我們經常需要動態匯入模組,可以參照下面的例子 try from cstringio import...