python import

模塊python

一般模塊爲一個文件,直接使用import來導入就行了。能夠做爲module的文件類型有".py"".pyo"".pyc"".pyd"".so"".dll"socket

ide

一般包老是一個目錄,可使用import導入包,或者from + import來導入包中的部分模塊。包目錄下爲首的一個文件即是 __init__.py。而後是一些模塊文件和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。函數

一模塊
你可使用import語句將一個源代碼文件做爲模塊導入.例如:spa

# file : spam.py
a = 37                    # 一個變量
def foo:                  # 一個函數
    print "I'm foo"
class bar:                # 一個類
    def grok(self):
        print "I'm bar.grok"
b = bar()                 # 建立一個實例命令行

使用import spam 語句就能夠將這個文件做爲模塊導入。系統在導入模塊時,要作如下三件事: 
1.爲源代碼文件中定義的對象建立一個名字空間,經過這個名字空間能夠訪問到模塊中定義的函數及變量。對象

2.在新建立的名字空間裏執行源代碼文件.作用域

3.建立一個名爲源代碼文件的對象,該對象引用模塊的名字空間,這樣就能夠經過這個對象訪問模塊中的函數及變量,如:  字符串

 import spam           # 導入並運行模塊 spam
 print spam.a          # 訪問模塊 spam 的屬性
 spam.foo()
 c = spam.bar()
 ...get

用逗號分割模塊名稱就能夠同時導入多個模塊
import socket, os, regex模塊導入時可使用 as 關鍵字來改變模塊的引用對象名字:

import os as system
import socket as net, thread as threads
system.chdir("..")
net.gethostname()

使用from語句能夠將模塊中的對象直接導入到當前的名字空間. from語句不建立一個到模塊名字空間的引用對象,而是把被導入模塊的一個或多個對象直接放入當前的名字空間:

from socket import gethostname
                               # gethostname放如當前名字空間
print gethostname()            # 直接調用
socket.gethostname()           # 引起異常NameError: socket

from語句支持逗號分割的對象,也可使用星號(*)表明模塊中除下劃線開頭的全部對象: 

from socket import gethostname, socket
from socket import *   # 載入全部對象到當前名字空間

 

不過,若是一個模塊若是定義有列表__all__,則from module import * 語句只能導入__all__列表中存在的對象

# module: foo.py
__all__ = [ 'bar', 'spam' ]     # 定義使用 `*` 能夠導入的對象

另外, as 也能夠和 from 聯合使用:

from socket import gethostname as hostname
h = hostname()

import 語句能夠在程序的任何位置使用,你能夠在程序中屢次導入同一個模塊,但模塊中的代碼*僅僅*在該模塊被首次導入時執行。後面的import語句只是簡單的建立一個到模塊名字空間的引用而已。sys.modules字典中保存着全部被導入模塊的模塊名到模塊對象的映射。這個字典用來決定是否須要使用import語句來導入一個模塊的最新拷貝
from module import * 語句只能用於一個模塊的最頂層.*特別注意*:因爲存在做用域衝突,不容許在函數中使用from 語句 
每一個模塊都擁有 __name__ 屬性,它是一個內容爲模塊名字的字符串。最頂層的模塊名稱是 __main__ .命令行或是交互模式下程序都運行在__main__ 模塊內部利用__name__屬性,咱們可讓同一個程序在不一樣的場合(單獨執行或被導入)具備不一樣的行爲,象下面這樣作:

檢查是單獨執行仍是被導入

if __name__ == '__main__':
      # Yes
      statements  # 執行python腳本時,會調用這部分代碼
else:
      # No (可能被做爲模塊導入)
      statements    # 被導入時,會自動調用這部分代碼

相關文章
相關標籤/搜索