來,這次我們就看下python 模組(module)。它是乙個 python 檔案,以 .py 結尾,包含了 python 物件定義和python語句。模組讓你能夠有邏輯地組織你的 python **段。把相關的**分配到乙個模組裡能讓你的**更好用,更易懂。模組能定義函式,類和變數,模組裡也能包含可執行的**。下例是個簡單的模組 support.py:
defprint_func(par): print"hello : ", parreturn模組定義好後,我們可以使用 import 語句來引入模組,語法如下:
importmodule1[,module2[,...modulen]比如要引用模組 math,就可以在檔案最開始的地方用import math來引入。在呼叫 math 模組中的函式時,必須這樣引用:
模組名.函式名當直譯器遇到 import 語句,如果模組在當前的搜尋路徑就會被匯入。搜尋路徑是乙個直譯器會先進行搜尋的所有目錄的列表。如想要匯入模組 support.py,需要把命令放在指令碼的頂端: #!/usr/bin/python # -*- coding: utf-8 -*-# 匯入模組importsupport# 現在可以呼叫模組裡包含的函式了support.print_func("luyaran")
以上例項輸出結果為:
hello:luyaran乙個模組只會被匯入一次,不管你執行了多少次import。這樣可以防止匯入模組被一遍又一遍地執行。這是一種**優雅寫法的一種。還有就是,python 的 from 語句讓你從模組中匯入乙個指定的部分到當前命名空間中。語法如下:
frommodname importname1[,name2[,...namen]]例如,要匯入模組 fib 的 fibonacci 函式,使用如下語句:
fromfib importfibonacci這個宣告不會把整個 fib 模組匯入到當前的命名空間中,它只會將 fib 裡的 fibonacci 單個引入到執行這個宣告的模組的全域性符號表。然後我們來把乙個模組的所有內容全都匯入到當前的命名空間也是可行的,只需使用如下宣告:
frommodname import*這提供了乙個簡單的方法來匯入乙個模組中的所有專案。然而這種宣告不該被過多地使用。例如我們想一次性引入 math 模組中所有的東西,語句如下:
frommath import*我們再來看下搜尋路徑的規則。當我們匯入乙個模組,python 解析器對模組位置的搜尋順序是:
模組搜尋路徑儲存在 system 模組的 sys.path 變數中。變數裡包含當前目錄,pythonpath和由安裝過程決定的預設目錄。然後呢,我們再來看pythonpath這個環境變數。pythonpath 由裝在乙個列表裡的許多目錄組成。pythonpath 的語法和 shell 變數 path 的一樣。在 windows 系統,典型的 pythonpath 如下:
setpythonpath=c:\python27\lib;在 unix 系統,典型的 pythonpath 如下:
setpythonpath=/usr/local/lib/python我們再來看命名空間和作用域。變數是擁有匹配物件的名字(識別符號)。命名空間是乙個包含了變數名稱們(鍵)和它們各自相應的物件們(值)的字典。乙個 python 表示式可以訪問區域性命名空間和全域性命名空間裡的變數。如果乙個區域性變數和乙個全域性變數重名,則區域性變數會覆蓋全域性變數。每個函式都有自己的命名空間。類的方法的作用域規則和通常函式的一樣。python 會智慧型地猜測乙個變數是區域性的還是全域性的,它假設任何在函式內賦值的變數都是區域性的。因此,如果要給函式內的全域性變數賦值,必須使用 global 語句。global varname 的表示式會告訴 python, varname 是乙個全域性變數,這樣 python 就不會在區域性命名空間裡尋找這個變數了。例如,我們在全域性命名空間裡定義乙個變數 money。我們再在函式內給變數 money 賦值,然後 python 會假定 money 是乙個區域性變數。然而,我們並沒有在訪問前宣告乙個區域性變數 money,結果就是會出現乙個 unboundlocalerror 的錯誤。取消 global 語句的注釋就能解決這個問題。來看個例項:
#!/usr/bin/python# -*- coding: utf-8 -*-money=2000defaddmoney():# 想改正**就取消以下注釋:# global moneymoney=money+1printmoneyaddmoney()printmoney再看dir() 函式。它是乙個排好序的字串列表,內容是乙個模組裡定義過的名字。返回的列表容納了在乙個模組裡定義的所有模組,變數和函式。如下乙個簡單的例項:
#!/usr/bin/python# -*- coding: utf-8 -*-# 匯入內建math模組importmath以上例項輸出結果為:content =dir(math)printcontent;
['__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__指向該模組的匯入檔名。然後我們再來看globals() 和 locals() 函式。根據呼叫地方的不同,globals() 和 locals() 函式可被用來返回全域性和區域性命名空間裡的名字。如果在函式內部呼叫 locals(),返回的是所有能在該函式裡訪問的命名。如果在函式內部呼叫 globals(),返回的是所有在該函式裡能訪問的全域性名字。兩個函式的返回型別都是字典。所以名字們能用 keys() 函式摘取。
再來看reload()函式。當乙個模組被匯入到乙個指令碼,模組頂層部分的**只會被執行一次。因此,如果你想重新執行模組裡頂層部分的**,可以用 reload() 函式。該函式會重新匯入之前匯入過的模組。語法如下:
reload(module_name)在這裡,module_name要直接放模組的名字,而不是乙個字串形式。比如想過載 hello 模組,如下:
reload(hello)再來看下python中的包。包是乙個分層次的檔案目錄結構,它定義了乙個由模組及子包,和子包下的子包等組成的 python 的應用環境。簡單來說,包就是資料夾,但該資料夾下必須存在 __init__.py 檔案, 該檔案的內容可以為空。__int__.py用於標識當前資料夾是乙個包。考慮乙個在package_luyaran目錄下的luyaran1.py、luyaran2.py、__init__.py檔案,test.py 為測試呼叫包的**,目錄結構如下:
test.py源**如下,首先是luyaran1: #!/usr/bin/python # -*- coding: utf-8 -*-defluyaran1(): print"i'm in luyaran1"package_luyaran
|--__init__.py
|--luyaran1.py
|--luyaran2.py
再來是luyaran2:
#!/usr/bin/python# -*- coding: utf-8 -*-defluyaran2(): print"i'm in luyaran2"然後在package_luyaran目錄下建立__init__.py:
#!/usr/bin/python # -*- coding: utf-8 -*-if__name__== '__main__': print'作為主程式執行'else: print'package_luyaran 初始化'然後我們在package_luyaran同級目錄下建立 test.py 來呼叫package_luyaran包:
#!/usr/bin/python# -*- coding: utf-8 -*-# 匯入 phone 包frompackage_luyaran.luyaran1 importluyaran1 frompackage_luyaran.luyaran2 importluyaran2luyaran1()luyaran2()以上例項輸出結果為:
package_luyaran 初始化i'm in luyaran1如上,為了舉例,我們只在每個檔案裡放置了乙個函式,但其實你可以放置許多函式。你也可以在這些檔案裡定義python的類,然後為這些類建乙個包。i'm inluyaran2
好啦,到這裡,就分享完模組的內容了,如果感覺不錯的話,請多多點贊支援哦。。。
python2 7安裝requests模組
因為python2快要不被維護了,所以安裝相應庫還費了一些周折。首先公司電腦不能安裝軟體,python2也不是安裝的,是kanzi裡的乙個版本,沒有request模組,目前需要用到。但後來又發現沒有setuptools模組。1.所以先安裝setuptools 2.安裝pip 3.安裝requests...
python2 7換行 Python2 7基礎語法
1.建立檔案xx.py usr bin python3 print hello,world 2.linux下執行 python hello.py 3.編碼 預設字串unicode 設定編碼 coding utf 8 4.識別符號 第乙個字元必須是字母表中字母或下劃線 識別符號的其他的部分有字母 數字...
python2 7是什麼 python2 7是什麼
pyton2.7是python在2010年發布的乙個版本。python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言,具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。下面來解釋一下python這門語言 python是一種...