標籤:import python 模組 調用
Python入門學習筆記之Python模組
Python模組:
一、認識Python模組
1.什麼是模組
函數是可以實現一項或多項功能的一段程式。我們的模組是函數功能的擴充,模組是可以實現一項或多項功能的程式塊。從定義可以看出:函數是一段程式,模組是一項程式塊,也就是說函數,模組都是用來實現功能的,但是模組範圍要廣,在模組裡可以重用多個函數
2.如何匯入模組
在Python程式中如果要使用某個模組,不能直接使用某個模組的功能。在模組使用之前,我們需要先匯入指定模組,只要匯入模組後我們才能使用
>>> import math>>> math.pi3.141592653589793>>>
3.sys系統內建模組
在Python中有一些模組是不用我們去定義的,Python官方提供的內建的模組。這些模組伴隨這Python的安裝而產生,我們把這些模組叫做標準庫模組。標準庫模組是一類別模組,而不是一種模組,在標準庫模組中,也有非常多的模組,有的模組和電子郵件相關,有的和作業系統相關,還有的和系統功能相關,我們把標準庫中和系統相關的這些模組稱為sys模組
#執行個體:
>>> import sys>>> sys.version‘2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]‘>>> sys.executable‘D:\\Python27\\Python279\\pythonw.exe‘#當前運行檔案的位置>>> sys.getwindowsversion()sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack=‘Service Pack
1‘)#返回當前windows系統資訊
>>> sys.modules.keys()#查看已經匯入的模組關鍵字
二、位元組編譯
1.何為Python的.pyc檔案
我們所說的.pyc檔案是以.pyc為尾碼名的這一類檔案。我們知道,由於我們電腦只認識二進位的機器語言,所以我們在執行Python模組的時候,有兩種執行方式:一種是將模組的內容編譯成二進位語言,然後執行這些二進位語言,另一種是執行對應模組裡面的二進位語言程式。第二種方式省略了編譯這一步,所以執行速度相對來說要快一些。而把模組編譯成二進位語言程式的這個過程叫做位元組編譯,這個過程會產生一個與編譯的模組對應的.pyc檔案,所以說.pyc檔案就是經過編譯後的模組對應的二進位檔案
2.位元組編譯和編譯的區別
位元組編譯:把模組編譯成二進位語言程式的這個過程
Python是一種解釋型語言,not編譯型語言,所以有人會說怎麼來的位元組編譯,其實Python中雖然出現了編譯這個過程,但是它和其他的編譯型語言不同的是,它的編譯是由解譯器完成的,畢竟每個程式想要執行都需要變成二進位的形式,編譯型語言是指軟體中有一個獨立的編譯模組去將程式編譯,而Python沒有,它有解譯器
3..pyc檔案的產生
位元組編譯過程中會產生一個與編譯的模組對應的.pyc檔案,即.pyc檔案就是經過編譯後模組對應的二進位檔案。
有兩種.pyc產生的方式:
第一種:import
>>> import zipfile>>>
第二種:CMD命令列
通過輸入:cd: d:\Python27\Lib進入到lib檔案行,然後輸入:python -m compileall xmllib.py
4..pyc檔案的使用
在Python中,.pyc檔案最大的一個作用就是加快了模組的運行速度(可以直接運行.pyc檔案,不需要編譯)。其實.pyc還有反編譯等進階功能
反編譯:把二進位檔案還原成源檔案
三、From...import詳解
1.Python中陰道一個模組的方法就是使用import,但是import只是匯入了這個模組,而並沒有匯入我們模組的某個屬性和方法,而我們不僅要匯入一個模組,還要匯入模組中對應的一個功能,我們可以使用From...import語句
#執行個體:
>>> import sys>>> sys.version‘2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]‘>>> versionTraceback (most recent call last): File "<pyshell#4>", line 1, in <module> versionNameError: name ‘version‘ is not defined>>> from sys import version>>> version
‘2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]‘
>>> #直接調用version,沒有出現錯誤
2.使用from...import*
在Python中是用from...import語句只能匯入一個模組的一個功能,如果我們要把這個模組的所有功能,也就是所有屬性和方法都到如的話,我們可以使用from...import*語句。
#執行個體:
>>> executableTraceback (most recent call last): File "<pyshell#9>", line 1, in <module> executableNameError: name ‘executable‘ is not defined>>> #executable是sys的另外一個功能,用於查看目前的目錄>>> from sys import *>>> executable‘D:\\Python27\\Python279\\pythonw.exe‘
四、認識__name__屬性
1.認識主模組
在Python函數中,如果一個函數調用其他函數完成一項功能,我們稱這個函數為主函數,如果一個函數沒有調用其他函數,我們稱這種函數為非主函數。模組也是類似的,如果一個模組被直接使用,而沒有被別人調用,我們稱之為主模組,如果一個模組被別人調用,我們稱之為非主模組
2.認識_name_屬性
#首先我們分別看一下這個模組在不同情境中的__name__的值
print __name__
#輸出結果:
_main_#主模組
區分是否主模組,就看自己調用還是被別人調用
3.__name__屬性的使用
在Python中有主模組和非主模組之分,那麼如何區分主模組和非主模組呢,如果一個模組的_name_屬性值是_main_,那麼說明這個模組是主模組,反之不是,其實我們可以把_name_看作一個變數,這個變數由sye系統給出,用於判斷一個模組是否是主模組
#執行個體
#其次我們看一下__name__屬性的常用情況,用來判斷是不是自己執行,還是被調用
#‘*‘coding=utf-8‘*‘#用來防止編碼錯誤if __name__=="__main__":#兩個底線 print "It‘s main"else: print "It‘s not main"#輸出結果:>>> import lname_It‘s not main>>>
五、自訂模組
1.何為自訂模組
Python中有許多模組,有的模組是不需要使用者自己去定義的去編寫的,Python在安裝的時候就內建的模組,這些模組是系統內建模組。而有一些模組剛好跟這種模組不同,它是需要我們自己去定義去編寫的模組,稱之為自訂模組
2.自訂模組使用詳解
(1).只要將自己編寫的Python程式(.py)儲存到Lib目錄下就可以了
(2).編寫代碼
Ctrl+s儲存然後儲存到Lib就可以了
#執行個體:
建立程式,定義函數:
def add(i,j): k=i+j return kk=add(i,j)print k
痛點:參數傳遞,把參數傳遞到i,j
在函數之前加入初始化值:
i=0j=0def add(i,j): k=i+j return kk=add(i,j)print k
這樣文法和邏輯就不會出現錯誤
Crtl+s
然後開始傳遞參數:
>>> import add0>>> i=6>>> j=7>>> add.add (i,j)13>>>
或者在函數前先進行聲明後再儲存:
int iin jdef add(i,j): k=i+j return kk=add(i,j)print k
#輸出結果:
>>> import add>>> i=6>>> j=7>>> add.add (i,j)13>>>
六、dir函數
1.認識dir()函數
Python中有非常多的模組,但是有時候我們會忘記一個模組有哪些功能,這時候,我們可以通過dir()函數來查看下指定模組的功能列表
#查看sys模組:
>
>> import sys #先匯入>>> dir(sys) #再查看[‘__displayhook__‘, ‘__doc__‘, ‘__excepthook__‘, ‘__name__‘, ‘__package__‘, ‘__stderr__‘, ‘__stdin__‘, ‘__stdout__‘, ‘_clear_type_cache‘, ‘_current_frames‘, ‘_getframe‘, ‘_mercurial‘, ‘api_version‘, ‘argv‘, ‘builtin_module_names‘, ‘byteorder‘, ‘call_tracing‘, ‘callstats‘, ‘copyright‘, ‘displayhook‘, ‘dllhandle‘, ‘dont_write_bytecode‘, ‘exc_clear‘, ‘exc_info‘, ‘exc_traceback‘, ‘exc_type‘, ‘exc_value‘, ‘excepthook‘, ‘exec_prefix‘, ‘executable‘, ‘exit‘, ‘flags‘, ‘float_info‘, ‘float_repr_style‘, ‘getcheckinterval‘, ‘getdefaultencoding‘, ‘getfilesystemencoding‘, ‘getprofile‘, ‘getrecursionlimit‘, ‘getrefcount‘, ‘getsizeof‘, ‘gettrace‘, ‘getwindowsversion‘, ‘hexversion‘, ‘long_info‘, ‘maxint‘, ‘maxsize‘, ‘maxunicode‘, ‘meta_path‘, ‘modules‘, ‘path‘, ‘path_hooks‘, ‘path_importer_cache‘, ‘platform‘, ‘prefix‘, ‘py3kwarning‘, ‘setcheckinterval‘, ‘setprofile‘, ‘setrecursionlimit‘, ‘settrace‘, ‘stderr‘, ‘stdin‘, ‘stdout‘, ‘subversion‘, ‘version‘, ‘version_info‘, ‘warnoptions‘, ‘winver‘]>>> sys.__doc__#可以進行查看
2.dir函數擴充詳解
#執行個體:
>>> d=[]>>> dir(d)[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]>>> c=[‘a‘,‘b‘]>>> dir(c)[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]>>> #傳回值一樣,dir返回的只有屬性,不區分資料>>> e=()>>> dir(e)[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘count‘, ‘index‘]>>>
本文出自 “8626774” 部落格,請務必保留此出處http://8636774.blog.51cto.com/8626774/1677733
Python學習日誌之Python模組