模組與import陳述式· Introducing python - iampennywu

文章推薦指數: 80 %
投票人數:10人

用多個檔案來建立並使用Python 程式; 所謂的模組(module),只是一個Python 程式檔 ... 直接從「random 模組(Python 內建標準模組庫)」匯入「choice() 函式」 ... Introducingpython Introduction Chapter1初嘗Py Chapter2Py食材:數字、字串與變數 變數、名稱與物件 數字 字串 內建字串函式 Chapter3Py填充:串列、Tuple、字典及集合 串列 串列函式 Tuple 字典 字典函式 集合 資料結構 Chapter4Py之殼:程式結構 if、elif、else 生成式 函式引數 函式 產生器 裝飾器 命名空間與範圍 使用try與except來處理錯誤 製作你自己的例外 Chapter5Py盒子:模組、套件與程式 模組與import陳述式 套件 Python標準程式庫 Chapter6Py喔喔:物件與類別 用class來定義類別 繼承 覆寫方法 添加方法 用super來讓父系幫助你 self防衛 使用特性來取得屬性值與設定它 搞砸私用名稱 方法類型 DuckTyping 特殊方法 組合 使用類別與物件V.S.模組的時機 PoweredbyGitBook 模組與import陳述式 模組與import陳述式 用多個檔案來建立並使用Python程式 所謂的模組(module),只是一個Python程式檔 按層次來架構 程式碼:資料類型(單字)→陳述式(句子)→函式(段落)→模組(章節) 在程式中,參考其他模組的程式 就像比喻:在本書中參考第八章解釋 要參考其他模組的程式:使用import陳述式→讓你的程式使用「被匯入模組裡面的程式與變數」 匯入模組 import陳述式最簡單的用法是:importmodule 其中moudle是其他的Python檔,不包括.py副檔名 【案例一】模擬一個氣象站,並印出一個氣象報告 1.撰寫主程式、獨立的模組 用一個主程式來印出報告 以及一個獨立的模組→裡面有一個函式,會回傳供報告使用的氣象狀況 主程式(weatherman.py) 在import陳述式之後,主程式就可以使用模組(report.py)內的所有東西,只要在它的名稱前面使用「模組名稱.」(report.) import模組名稱 description=模組名稱.get_description() print("文字:",description) #在import陳述式之後,主程式就可以使用report.py內的所有東西,只要在它的名稱前面使用report.即可 importreport#匯入整個report模組 description=report.get_description()#匯入整個report模組,但需要在get_description()前面使用report. print("Today'sweather:",description) 模組(report.py) 用模組的名稱來限定模組的內容,所以「可以避免名稱衝突」。

別的地方也有可能會有get_description()函式,但不會不小心呼叫它 defget_description(): """文字""" from模組名稱import函式名稱 串列名稱=['字串1','字串2','字串3','字串4','字串5','字串6'] return函式名稱(串列名稱) defget_description():#seethedocstring """Returnrandomweather,justlikethepros""" fromrandomimportchoice possibilities=['rain','snow','sleet','fog','sun','whoknows'] returnchoice(possibilities) 2.將兩個檔案放在同一個目錄下 指示Python將weatherman.py當成主程式來執行→它會存取report模組,並執行它的get_description()函式 主程式會取回並印出的東西→編寫get_description()來回傳一串串列內的隨機結果 pythonweatherman.py Today'sweather:sleet pythonweatherman.py Today'sweather:whoknows pythonweatherman.py Today'sweather:rain 在兩個不同的地方→使用import 匯入主程式weatherman.py(模組report的主程式) importreport 在模組檔report.py裡面,get_description()函式→由「Python標準隨機模組」匯入「choice函式」 fromrandomimportchoice 以兩種不同的方式→使用imports 主程式→呼叫importreport,接著執行report.get_description() report.py裡面→get_decription()呼叫fromrandomimportchoice,接著執行choice(possibilities) 【案例二】 一個函式裡面,知道這裡沒有其他叫做「choice」的東西 直接從「random模組(Python內建標準模組庫)」匯入「choice()函式」 採取下列方式來「編寫函式」→它會「回傳隨機結果」 「函式內」匯入模組v.s.「函式外」匯入模組 「函式內」匯入模組:只會在有限的範圍內使用它,就可在裡面匯入 「函式外」匯入模組: 要匯入的程式會在許多地方用到,就必須考慮在函式外面匯入它 有些人喜歡將所有的import放在檔案的開頭,清楚地展示程式間的關係 這兩種方式都是可行的 「函式內」匯入模組 如同許多其他程式部分,請挑選你最容易理解的方式 以模組來指定名稱(模組名稱.函式名稱)比較安全,但需要打較多字 這些get_description()範例展示該匯入什麼,但沒有展示從哪裡匯入,它們都在函式裡呼叫import defget_description(): import模組名稱 串列名稱=['字串1','字串2','字串3','字串4','字串5','字串6'] return模組名稱.函式名稱(串列名稱) >>>defget_description(): importrandom possibilities=['rain','snow','sleet','fog','sun','whoknows'] returnrandom.choice(possibilities)#以模組來指定名稱(random.choice)比較安全,但需要打較多字 >>>get_description() 'rain' >>>get_description() 'snow' 「函式外」匯入模組 以上這些get_description()範例展示該匯入什麼,但沒有展示從哪裡匯入,它們都在函式裡呼叫import 也可以在「函式外」匯入「模組」 >>>import模組名稱 >>>defget_description(): 串列名稱=['字串1','字串2','字串3','字串4','字串5','字串6'] return模組名稱.函式名稱(串列名稱) >>>importrandom#也可以在函式外面匯入random >>>defget_description(): possibilities=['rain','snow','sleet','fog','sun','whoknows'] returnrandom.choice(possibilities) >>>get_description() 'snow' >>>get_description() 'rain' 用其他的名稱來匯入模組 在weatherman.py主程式中,呼叫了importreport 如果有「其他的模組」使用「相同的名稱」,或想要使用「有助記憶」或「簡短名稱」時,該怎麼做?可以用別名來匯入 import模組名稱as別名 description=別名.get_description() print("文字:",description) importreportaswr description=wr.get_description() print("Today'sweather:",description) 只匯入模組內你想要的東西 在Python中,可以匯入模組的一或多個部分。

每一個部分都可以「保留它原本名稱」,也可以給它一個「別名」 【範例】 #匯入模組的get_description() from模組名稱importget_description description=get_description() print("文字:",description) #用別名來匯入 from模組名稱importget_descriptionas別名 description=別名() print("文字:",description) #首先,用原始名稱來匯入report模組的get_description() fromreportimportget_description description=get_description() print("Today'sweather:",description) #接著,用do_it來匯入它 fromreportimportget_descriptionasdo_it description=do_it() print("Today'sweather:",description) 模組搜尋路徑 Python會去哪裡尋找要匯入的檔案? 使用「sys標準模組」的「path變數」內的一串「目錄名稱串列」,以及「ZIP保存檔案(archivefiles)」 可以存取與修改這個串列 以下是在自己的Mac上,Python3.6的sys.path的值: >>>importsys >>>forplaceinsys.path: print(place) #前面一開始的空白是一個空字串'',代表目前的目錄 /Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6 /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages 如果sys.path的第一行是'',當試著匯入時,Python會先查看目前的目錄→例如:importreport會尋找report.py 會使用第一個找到的對象→例如:如果定義一個名叫random的模組,而且它的「搜尋路徑的位置」在「標準程式庫」之前,你就無法存取標準程式庫的random了 resultsmatching"" Noresultsmatching""



請為這篇文章評分?