Python 模塊
Python 模塊(Module),是一個 Python 檔案,以 .py 結尾,包含了 Python 物件定義和Python陳述句,
模塊讓你能夠有邏輯地組織你的 Python 代碼段,
把相關的代碼分配到一個模塊里能讓你的代碼更好用,更易懂,
模塊能定義函式,類和變數,模塊里也能包含可執行的代碼,
1. import 陳述句
模塊的引入
模塊定義好后,我們可以使用 import 陳述句來引入模塊,語法如下:
1.2 import module1[, module2[,... moduleN]]
比如要參考模塊 math,就可以在檔案最開始的地方用 import math 來引入,在呼叫 math 模塊中的函式時,必須這樣參考:
模塊名.函式名
當解釋器遇到 import 陳述句,如果模塊在當前的搜索路徑就會被匯入,
搜索路徑是一個解釋器會先進行搜索的所有目錄的串列,如想要匯入模塊 support.py,需要把命令放在腳本的頂端:
例子
下例是個簡單的模塊 support.py:
support.py 模塊:
def print_func( par ):
print "Hello : ", par return
test.py 檔案代碼:
#!/usr/bin/python# -*- coding: UTF-8 -*- # 匯入模塊import support # 現在可以呼叫模塊里包含的函式了support.print_func("Runoob")
以上實體輸出結果:
Hello : Runoob
一個模塊只會被匯入一次,不管你執行了多少次import,這樣可以防止匯入模塊被一遍又一遍地執行,
1.2 from…import 陳述句
Python 的 from 陳述句讓你從模塊中匯入一個指定的部分到當前命名空間中,語法如下:
from modname import name1[, name2[, ... nameN]]
例如,要匯入模塊 fib 的 fibonacci 函式,使用如下陳述句:
from fib import fibonacci
這個宣告不會把整個 fib 模塊匯入到當前的命名空間中,它只會將 fib 里的 fibonacci 單個引入到執行這個宣告的模塊的全域符號表,這里免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.扣扣.裙 :879151479,還可以跟行業大牛交流討教!
1.3 from…import* 陳述句
把一個模塊的所有內容全都匯入到當前的命名空間也是可行的,只需使用如下宣告:
from modname import *
這提供了一個簡單的方法來匯入一個模塊中的所有專案,然而這種宣告不該被過多地使用,
例如我們想一次性引入 math 模塊中所有的東西,陳述句如下:
from math import *

2. 搜索路徑
當你匯入一個模塊,Python 決議器對模塊位置的搜索順序是:
1、當前目錄
2、如果不在當前目錄,Python 則搜索在 shell 變數 PYTHONPATH 下的每個目錄,
3、如果都找不到,Python會察看默認路徑,UNIX下,默認路徑一般為/usr/local/lib/python/,
模塊搜索路徑存盤在 system 模塊的 sys.path 變數中,變數里包含當前目錄,PYTHONPATH和由安裝程序決定的默認目錄,
3. PYTHONPATH 變數
作為環境變數,PYTHONPATH 由裝在一個串列里的許多目錄組成,PYTHONPATH 的語法和 shell 變數 PATH 的一樣,
在 Windows 系統,典型的 PYTHONPATH 如下:
set PYTHONPATH=c:\python27\lib;
在 UNIX 系統,典型的 PYTHONPATH 如下:
set PYTHONPATH=/usr/local/lib/python
4. 命名空間和作用域
變數是擁有匹配物件的名字(識別符號),命名空間是一個包含了變數名稱們(鍵)和它們各自相應的物件們(值)的字典,
一個 Python 運算式可以訪問區域命名空間和全域命名空間里的變數,如果一個區域變數和一個全域變數重名,則區域變數會覆寫全域變數,
每個函式都有自己的命名空間,類的方法的作用域規則和通常函式的一樣,
Python 會智能地猜測一個變數是區域的還是全域的,它假設任何在函式內賦值的變數都是區域的,
因此,如果要給函式內的全域變數賦值,必須使用 global 陳述句,
global VarName 的運算式會告訴 Python, VarName 是一個全域變數,這樣 Python 就不會在區域命名空間里尋找這個變數了,
例如,我們在全域命名空間里定義一個變數 Money,我們再在函式內給變數 Money 賦值,然后 Python 會假定 Money 是一個區域變數,然而,我們并沒有在訪問前宣告一個區域變數 Money,結果就是會出現一個 UnboundLocalError 的錯誤,取消 global 陳述句前的注釋符就能解決這個問題,
#!/usr/bin/python# -*- coding: UTF-8 -*- Money = 2000def AddMoney(): # 想改正代碼就取消以下注釋: # global Money Money = Money + 1 print MoneyAddMoney()print Money
這里免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.扣扣.裙 :879151479,還可以跟行業大牛交流討教!

5. dir()函式
dir() 函式一個排好序的字串串列,內容是一個模塊里定義過的名字,
回傳的串列容納了在一個模塊里定義的所有模塊,變數和函式,如下一個簡單的實體:
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 匯入內置math模塊
import math
content = dir(math)
print content;
以上實體輸出結果:
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log','log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
在這里,特殊字串變數__name__指向模塊的名字,__file__指向該模塊的匯入檔案名,
6. globals() 和 locals() 函式
根據呼叫地方的不同,globals() 和 locals() 函式可被用來回傳全域和區域命名空間里的名字,
如果在函式內部呼叫 locals(),回傳的是所有能在該函式里訪問的命名,
如果在函式內部呼叫 globals(),回傳的是所有在該函式里能訪問的全域名字,
兩個函式的回傳型別都是字典,所以名字們能用 keys() 函式摘取,
7. reload() 函式
當一個模塊被匯入到一個腳本,模塊頂層部分的代碼只會被執行一次,
因此,如果你想重新執行模塊里頂層部分的代碼,可以用 reload() 函式,該函式會重新匯入之前匯入過的模塊,語法如下:
reload(module_name)
在這里,module_name要直接放模塊的名字,而不是一個字串形式,比如想多載 hello 模塊,如下:
reload(hello)
8. Python中的包
包是一個分層次的檔案目錄結構,它定義了一個由模塊及子包,和子包下的子包等組成的 Python 的應用環境,
簡單來說,包就是檔案夾,但該檔案夾下必須存在 __init__.py 檔案, 該檔案的內容可以為空,__init__.py 用于標識當前檔案夾是一個包,
考慮一個在 package_runoob 目錄下的 runoob1.py、runoob2.py、__init__.py 檔案,test.py 為測驗呼叫包的代碼,目錄結構如下:
test.py
package_runoob
|-- __init__.py
|-- runoob1.py
|-- runoob2.py
源代碼如下:
package_runoob/runoob1.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def runoob1():
print "I'm in runoob1"
package_runoob/runoob2.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def runoob2():
print "I'm in runoob2"
現在,在 package_runoob 目錄下創建 __init__.py:
package_runoob/__init__.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
print '作為主程式運行'else:
print 'package_runoob 初始化'
然后我們在 package_runoob 同級目錄下創建 test.py 來呼叫 package_runoob 包
test.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 匯入 Phone 包
from package_runoob.runoob1 import runoob1from package_runoob.runoob2 import runoob2 runoob1()runoob2()
以上實體輸出結果:
package_runoob 初始化
I'm in runoob1
I'm in runoob2
如上,為了舉例,我們只在每個檔案里放置了一個函式,但其實你可以放置許多函式,你也可以在這些檔案里定義Python的類,然后為這些類建一個包,
這里免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.扣扣.裙 :879151479,還可以跟行業大牛交流討教!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/161761.html
標籤:Python
