Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。python
模塊讓你可以有邏輯地組織你的 Python 代碼段。shell
把相關的代碼分配到一個模塊裏能讓你的代碼更好用,更易懂。函數
模塊能定義函數,類和變量,模塊裏也能包含可執行的代碼。測試
模塊引入spa
(1)import語句:import module1[, module2[,... moduleN]code
引入模塊必須在文件的最開始引用。對象
一個模塊只會被導入一次,無論你執行了多少次import。這樣能夠防止導入模塊被一遍又一遍地執行。blog
導入模塊以後,若是要使用模塊內的函數,必需要這樣使用:模塊名.函數名作用域
舉例:源碼
# coding=UTF-8 import time print time.time()
(2)From…import 語句:
from modname import name1[, name2[, ... nameN]]
from modname import *
Python 的 from 語句讓你從模塊中導入一個指定的部分到當前命名空間中。
from modname import name是導入指定的一部分,from modname import *是導入模塊的全部內容。
import modname和from modname import*的區別是:
import modname導入的,必須這樣使用:模塊名.函數名
from modname import*導入的,能夠直接使用:函數名
舉例:
# coding=UTF-8 from time import * print time()
輸出:
1514445265.6
當你導入一個模塊,Python 解析器對模塊位置的搜索順序是:
模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
變量是擁有匹配對象的名字(標識符)。
命名空間是一個包含了變量名稱們(鍵)和它們各自相應的對象們(值)的字典。
一個 Python 表達式能夠訪問局部命名空間和全局命名空間裏的變量。若是一個局部變量和一個全局變量重名,則局部變量會覆蓋全局變量。
每一個函數都有本身的命名空間。類的方法的做用域規則和一般函數的同樣。
Python 會智能地猜想一個變量是局部的仍是全局的,它假設任何在函數內賦值的變量都是局部的。
所以,若是要給函數內的全局變量賦值,必須使用 global 語句。
global VarName 的表達式會告訴 Python, VarName 是一個全局變量,這樣 Python 就不會在局部命名空間裏尋找這個變量了。
例如,咱們在全局命名空間裏定義一個變量 Money。咱們再在函數內給變量 Money 賦值,而後 Python 會假定 Money 是一個局部變量。然而,咱們並無在訪問前聲明一個局部變量 Money,結果就是會出現一個 UnboundLocalError 的錯誤。
包是一個分層次的文件目錄結構,它定義了一個由模塊及子包,和子包下的子包等組成的 Python 的應用環境。
簡單來講,包就是文件夾,但該文件夾下必須存在 __init__.py 文件, 該文件的內容能夠爲空。__int__.py用於標識當前文件夾是一個包。
考慮一個在 package_runoob 目錄下的 runoob1.py、runoob2.py、__init__.py 文件,test.py 爲測試調用包的代碼,舉例以下:
(1)包結構:
(2)runoob1.py源碼
# -*- coding:UTF-8 -*- def runoob1(): print "I'm runoob1"
(3)runoob2.py源碼
# -*- coding:UTF-8 -*- def runoob2(): print "I'm runoob2"
(4)test.py源碼
#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:test.py from package_runoob.runoob1 import runoob1 from package_runoob.runoob2 import runoob2 runoob1() runoob2()
(5)test.py執行結果
package_runoob 初始化 I'm runoob1 I'm runoob2