模組與import陳述式· Introducing python - iampennywu
文章推薦指數: 80 %
用多個檔案來建立並使用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""
延伸文章資訊
- 1解析Python模組(Module)和套件(Package)的概念
四、dir()函式(dir function). Python提供了一個內建函式dir(),用來顯示物件(Object)的 ...
- 2Python 自學第七天:Module 模組
也就是使用其他.py 檔案中,預先定義好的變數和函式。使用模組的好處就是,別人寫過或自己定義過的變數和函式可以直接拿來使用。 Python 有一些內建好 ...
- 3Python :: 簡介模組
在Python 中,一個.py 檔案就是一個模組, import 就是載入另一個.py ... 在上面看到除了自定義的屬性,還有一些內建的屬性,這之後有機會再深入介紹 ...
- 4模組與import陳述式· Introducing python - iampennywu
用多個檔案來建立並使用Python 程式; 所謂的模組(module),只是一個Python 程式檔 ... 直接從「random 模組(Python 內建標準模組庫)」匯入「choice() ...
- 510. Python 標準函式庫概覽— Python 3.10.6 說明文件
務必使用 import os 而非 from os import * 。這將避免因系統不同而有實作差異的 os.open() 覆蓋內建函式 open() 。 在使用 os 諸如此類大型模組時搭配...