任何python原始檔都能以模組的形式使用。如
#spam.py
a = 1
deffun
():print
'fun,a = %s'%a
class
foo(object):
pass
要以模組的形式載入spam.py,可以使用import spam
語句。首次使用impot匯入該模組時,它將做三件事:
建立新的命名空間,用作在相應原始檔中定義的所有物件的容器;
在新建立的命名空間中執行該模組中包含的**;
命名空間的名稱與模組名稱一致;
import執行載入檔案中的所有語句。如果模組包含輸出語句,就可以看到輸出的內容。
匯入多個模組時,可以使用分號分隔模組名稱,如import os,sys,re
。
匯入的模組名稱可以使用as限定符進行更改,如
import spam as sp
sp.fun() #fun,a = 1,相當於呼叫spam.fun()
使用as修改的新名稱僅用於import語句的原始檔或上下文。其他模組仍使用模組原來的名稱。
模組是python中的第一類物件。也就是說它們可以分配給變數,放置在列表等資料結構中,還可以以資料的形式在程式中傳遞。
注意module.__dict__
持有模組命名空間中的內容,只要查詢或更改模組中的值,就會對該字典進行相應的操作。import spam
print spam.__dict__['a'] #1
spam.a = 3
print spam.__dict__['a'] #3
spam.__dict__['fun']() #fun,a = 3
import語句可以出現在程式中的任何位置;
每個模組中的**僅載入和執行一次,無論這個模組import多少次,後續的import語句僅將模組名稱繫結到前一次匯入所建立的模組物件。
import module,會將module中的內容存入sys.modules中。sys.modules是乙個包含當前載入的所有模組的字典,該字典將模組名對映到模組物件。如果sys.modules中存在被匯入模組的模組名稱,則不再匯入該模組。
以
import spam
為例,如果sys.modules.has_key('spam') == true
,則不再匯入spam。詳細解釋見(
from語句用於將模組中的物件載入到當前命名空間。
from相當於import,但它不會建立乙個模組命名空間,而是將import的物件放到當前命名空間中。
from spam import fun
fun() #fun,a = 1
spam.fun() #nameerror: name 'spam' is not defined,未建立spam命名空間
但是仍會將匯入的模組存入sys.modules
中
from spam import fun
print sys.modules.has_key('spam') #true,spam模組已經載入至記憶體了
a = sys.modules['spam'] #a引用spam模組
print a.a #1
print a.foo #
如果匯入多個物件,from spam import a,fun,foo
。
as限定符可用於重新命名匯入的物件,如from spam import fun as f
。
星號(*)萬用字元也可用於載入模組中的所有定義,但是以下劃線開頭的定義除外。如
from spam import * #將所有定義載入到當前命名空間中
fun() #fun,a = 1
print a #1
from module import *
語句只能在模組最頂層使用。在函式內使用這種匯入方式是不合法的,原因在於這種匯入語句與函式作用域規則之間具有獨特的互動方式。例如,將函式編譯為內部位元組碼時,函式中使用的所有符號需要完全指定。(這裡不是太明白…)
使用from匯入物件不會更改物件的作用域規則。如
from spam import fun
a = 2
fun() #fun,a = 1
spam.py中fun()中的a指的是spam.py中的全域性變數a。將fun的引用放在不同命名空間中時,不會更改fun中變數的繫結規則。因此,函式的全域性命名空間始終是定義該函式的模組,而不是將函式匯入並呼叫該函式的命名空間。
__all__
見(
如果覺得本文對您有幫助,『頂』支援一下,您的支援是我寫作最大的動力,謝謝。
7 1 Python及numpy的安裝
python版本3.3.5 32位系統 numpy版本為1.8.2 32位系統 1,安裝好python後,在環境變數的系統變數中的path中加入python的根目錄。2,檢測python是否安裝完成,在cmd中輸入python,顯示python的版本號 二 numpy的安裝,雙擊即可,安裝過程中,n...
71 Python中 物件的演化
目錄 物件的演化 簡單資料 陣列 結構體 物件 隨著程式設計面臨的問題越來越複雜,程式語言本身也在進化,從主要處理簡單資料開始,隨著資料變多進化 陣列 資料型別變複雜,進化出了 結構體 處理資料的方式和邏輯變複雜,進化出了 物件 想20,10,100.3等這些數字,可以看做是簡單資料 最初的計算機程...
零基礎學Python(第十七章 模組import)
在前面的幾個章節中我們指令碼上是用 python 直譯器來程式設計,如果你從 python 直譯器退出再進入,那麼你定義的所有的方法和變數就都消失了。為此 python 提供了乙個辦法,把這些定義存放在檔案中,為一些指令碼或者互動式的直譯器例項使用,這個檔案被稱為模組。模組是乙個包含所有你定義的函式...