python 自定義模組

2021-06-14 14:52:15 字數 2725 閱讀 9265

python 的標準安裝包括了一組模組,稱之為標準庫(standard library)。

在專案開發,程式設計師會考慮**的可擴充套件性和**的可重用性,使用模組的好處,就是考慮使用了**的可重用性。模組

任何python程式都可以作為模組匯入,例如:

編寫乙個hello.py檔案,包名:com.easymorse

#!/usr/bin/python

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

#filename: hello.py

print 'hello jordy!'

程式儲存的位置比較重要,假如儲存在/home/ubuntu/目錄中

編寫using_hello.py檔案,引用hello模組(這個檔案與hello.py在同乙個包目錄下):

#!/usr/bin/python

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

#filename: using_hello.py

import hello

在引用hello模組時,using_hello程式會在引用時,首先執行hello.py檔案,而且在載入時只執行一次呼叫。如果在此匯入該模組就什麼也不會發生了。

import hello

在匯入模組時並不是要在匯入時執行某些操作,他們主要用於定義 類、函式、變數等。(這些東西只需要定義一次,匯入模組多次和匯入一次的效果是一樣的)

模組中定義函式:

比方在hello.py模組中定義乙個函式

def sayhi():

print '執行sayhi方法'

在using_hello.py中匯入hello模組 import hello ,這時,print 『hello jordy!』 會被執行,訪問剛才定義的sayhi()函式,可以通過:

hello.sayhi()

我們可以通過同樣的方法來使用任何在模組的全域性作用域中定義的方法和變數。

模組中新增測試**:

模組是用來定義類、函式、變數的,但有些時候,在模組中新增一些檢查模組本身是否正常工作的測試**是很有用的。例如:上述的hello模組

#!/usr/bin/python

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

#filename: hello.py

print 'hello jordy!'

def sayhi():

print '執行sayhi方法'

version = '0.1'

#測試呼叫

sayhi()

這樣在using_hello模組匯入hello模組時,會自身呼叫sayhi()函式,來檢測這個函式的正確性。

但這同時會造成乙個問題就是在匯入hello模組時,hello模組本身會呼叫sayhi()函式,using_hello模組中的

hello.sayhi()這句話又會執行sayhi()函式。

為了避免這種情況的發生,需要「告知」模組本身是作為程式執行還是匯入其他程式,這時需要使用__name__變數:

通過上圖可以看出,變數__name__的值是』__main__』,而在匯入的模組中,這個值就被設定為模組的名字,因此,為了讓模組的測試**更好的使用,可以將其放置在if語句中,例如:

#coding=utf-8

__author__ = '極致'

print 'hello jordy!'

def sayhi():

print '執行sayhi方法'

version = '0.1'

#測試呼叫

def test():

sayhi()

if __name__ == '__main__':

test()

這樣在hello.py在作為程式執行時,sayhi()函式會被執行,而作為模組匯入時,它的行為就會像普通模組一樣,只有在呼叫sayhi()函式時,才會執行,而不是在模組被匯入時就會執行。

上述兩個檔案都是在同乙個包中列舉的例子,那麼當乙個模組在乙個包(com.easymorse)中,另乙個模組在另乙個包中(com.witmob),如何匯入呢?

其實,我們知道包就是模組所在的目錄,為了能讓python將這個目錄作為包對待,它必須包含乙個命名為__init__.py的檔案(這個檔案在我們建立包時,eclipse會自動幫我們建立這個命名的乙個檔案),如果將這個檔案作為乙個模組匯入的話,檔案的內容就是包的內容。

比如:在com.easymorse包中的__init__.py檔案中有乙個屬性:

pi = 3.14

在com.witmob包中匯入這個模組:

import com.easymorse

print com.easymorse.pi

如果在com.witmob包中匯入hello.py這個模組,有兩種方式:

import com.easymorse.hello

from com.easymorse import hello

通過這兩種方式,都可以訪問hello模組中的方法、屬性,它們區別在於:

第一種方式需要通過全名com.easymorse.hello.sayhi()來使用;

第二種方式可以通過短名hello.sayhi()來使用;

python模組 python自定義模組

1.import 模組名 匯入模組中的所有內容 引入多個用逗號分隔 import random,time 2.from 模組名 import 函式名1,函式名2.匯入部分模組 匯入部分的話直接使用 3.from 模組名 import 匯入所有,有約束 需要在 init py檔案中新增屬性 all 函...

python自定義模組

1 匯入自定義模組 1.1 匯入檔案與當前檔案在同一目錄 1.2 匯入檔案在同級目錄下某資料夾folder下 1.3 相對路徑匯入 2 詳解python中的from.import絕對匯入語句 3 作為指令碼來執行程式 4 github上模組位址 5 查詢python安裝路徑 1 匯入自定義模組 1....

python 自定義模組

1.自定義乙個模組 import 匯入 2.模組分類 3.模組 模組的好處 1.避免寫重複 2.可以多次利用 3.拿來主義 import test print test.name test.foo test.func import 就是用來匯入test模組的方法,test 是自己寫的乙個模組,用來做...