python中模組的學習筆記

來源:互聯網
上載者:User


模組是Pyhon最進階別的程式組織單元,它將程式碼和資料封裝起來以便重用。實際的角度,模組往往對應Python程式檔案。

模組名.函數名

為什麼必須加上模組名這樣調用呢?因為可能存在這樣一種情況:在多個模組中含有相同名稱的函數,此時如果只是通過函數名來調用,解譯器無法知道到底要調用哪個函數。所以如果像上述這樣引入模組的時候,調用函數必須加上模組名。


import math

#這樣會報錯
print sqrt(2)

#這樣才能正確輸出結果
print math.sqrt(2)


有時候我們只需要用到模組中的某個函數,只需要引入該函數即可,此時可以通過語句

from 模組名 import 函數名1,函數名2....

使用sys模組


#!/usr/bin/python
# Filename: using_sys.py
 
import sys
 
print 'The command line arguments are:'
for i in sys.argv:
    print i
 
print '\n\nThe PYTHONPATH is', sys.path, '\n'
$ python using_sys.py we are arguments
The command line arguments are:
using_sys.py
we
are
arguments

The PYTHONPATH is ['/home/swaroop/byte/code', '/usr/lib/python23.zip',
'/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2',
'/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload',
'/usr/lib/python2.3/site-packages', '/usr/lib/python2.3/site-packages/gtk-2.0']

Python模組都有它的__name__,如果它是’__main__’,這說明這個模組被使用者單獨運行,我們可以進行相應的恰當操作

建立模組:


#!/usr/bin/python
# Filename: mymodule.py
 
def sayhi():
    print 'Hi, this is mymodule speaking.'
 
version = '0.1'
 
# End of mymodule.py
 
#!/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

下面是一個使用from..import文法的版本。


#!/usr/bin/python
# Filename: mymodule_demo2.py
 
from mymodule import sayhi, version
# Alternative:
# from mymodule import *
 
sayhi()
print 'Version', version

輸出結果和上一個例子一樣。
dir()函數

你可以使用內建的dir函數來列出模組定義的標識符。標識符有函數、類和變數。
當你為dir()提供一個模組名的時候,它返回模組定義的名稱列表。如果不提供參數,它返回當前模組中定義的名稱列表。

定義自己的模組

在Python中,每個Python檔案都可以作為一個模組,模組的名字就是檔案的名字。

比如有這樣一個檔案test.py,在test.py中定義了函數add:

#test.py

def add(a,b):
    return a+b
那麼在其他檔案中就可以先import test,然後通過test.add(a,b)來調用了,當然也可以通過from test import add來引入。

三.在引入模組的時候發生了什麼

先看一個例子,在檔案test.py中的代碼:


#test.py

def display():
    print 'hello world'
   
display()
   

在test1.py中引入模組test:

#test1.py

import test

然後運行test1.py,會輸出"hello world"。也就是說在用import引入模組時,會將引入的模組檔案中的代碼執行一次。但是注意,只在第一次引入時才會執行模組檔案中的代碼,因為只在第一次引入時進行載入,這樣做很容易理解,不僅可以節約時間還可以節約記憶體


模組匯入

1、import語句

推薦:

import放在程式前面,且按照Python標準庫模組、Python第三方模組、自訂模組的順序從上到下排開。

2、from-import語句

可以匯入模組中指定屬性:from module import name1[,nam2[,...nameN]]

注意:

(1)、匯入可使用\進行換行,

如:from module import nam1,name2,\
name3,name4....

(2)、不推薦from module import *

(3)、使用as更換名稱:

from module import name1 as name2

3、模組匯入的特徵

(1)、載入時執行模組,也就是匯入模組的頂層代碼將會被執行,通常包括該模組內全域變數、類和函數的聲明。我們儘可能多的把代碼封裝到函數中,這是良好的模組編程習慣。

(2)、一個模組可被匯入(import)多次,但是只載入(load)一次.

4、模組內建函數

(1)、__import__():匯入模組的函數

import語句實際上調用__import__()函數

如果我們有一個testa.py檔案,我們可以用module=__import__('testa')來匯入它。這樣可以用module.屬性來使用testa.py中的屬性

 

三、包

 

 1、包的概念

 

包是一個有層次的檔案目錄結構,由模組和子包組成。

 

 

 

2、解析包機制:
 代碼如下 複製代碼
每一個.py檔案稱為一個module,module之間可以互相匯入

module可以定義在包裡面.Python定義包的方式稍微有點古怪,假設我們有一個parent檔案夾,該檔案夾有一個child子檔案夾.child中有一個module a.py . 如何讓Python知道這個檔案階層?很簡單,每個目錄都放一個名為_ init

_.py 的檔案.該檔案內容可以為空白.這個階層同上:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.