7 1 Python 模組與import語句

2021-07-25 15:59:12 字數 2822 閱讀 7176

任何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 提供了乙個辦法,把這些定義存放在檔案中,為一些指令碼或者互動式的直譯器例項使用,這個檔案被稱為模組。模組是乙個包含所有你定義的函式...