豬行天下之Python基礎——2.1 Python註釋與模組

coder-pig發表於2019-04-02

內容簡述:

  • 1、註釋
  • 2、模組

1、註釋

註釋是一段「解釋性」文字,在程式執行時會被程式跳過,不做處理,一般是對程式碼的解釋或提示,以此提高程式碼的可讀性。寫註釋既方便了別人閱讀程式碼,也方便自己日後回顧,而不用苦思冥想當初寫這段程式碼的目的。當然註釋也不是寫的越多越好,應該「儘量避免沒用的註釋或寫過多的廢話」。

Python中提供了兩種註釋方式:「單行註釋」和「多行註釋」,單行註釋通過#進行標識,多行註釋則通過兩個三引號來標識,程式碼示例如下:

# 這是一個單行註釋

'''
這是一個多行註釋
'''

複製程式碼

2、模組


①模組的基本使用

就是一個Python檔案,以.py結尾,包含了Python定義和宣告。舉個簡單的例子:你可以把常用的程式碼塊抽取出來,放到一個py檔案中,然後在用到的地方對自己的模組進行引用。使用程式碼示例如下:

# 匯入整個模組
import sys 

# 匯入模組中的需要用到的部分
from sys import argv 
# 多個的時候可以用逗號隔開
from urllib.error import URLError, HTTPError 

# 匯入模組中所有不是以下劃線開頭的名字,不建議這樣做,如果同名會覆蓋
# 定義過的名字;如果你硬想用這種匯入方式,可以新增__all__成員來進行約束
# 比如:__all__ = ['a','b']
from sys import * 
複製程式碼

另外,在匯入自己的模組的時候,你可能遇到這樣的問題:

寫在模組裡的測試程式碼都執行了!!!

你可以通過內建屬性__name__來區分,當此模組作為程式執行時,會等於__main__,而作為一個模組匯入到其他程式,則等於檔名字(去掉.py)。所以可以通過判斷:__name__ 是否等於__main__ 來決定測試程式碼是否執行。

簡單的程式碼示例如下:

if __name__ == '__main__':
    test()
複製程式碼

接著說說幾個問題


② 重複匯入一個模組多次會怎麼樣?

答:第一次匯入後就將模組名載入到記憶體中,後續的import只是對已載入到記憶體中的
模組物件增加一次引用,不會重新執行模組裡的語句


③ 模組的搜尋路徑與順序?

答:可以通過列印sys.path來檢視模組的搜尋路徑,比如我的電腦:

[
'/Users/jay/Project/Python/Book/Chapter 6', 
'/Users/jay/Project/Python/Book',
'/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',
'/Users/jay/Library/Python/3.6/lib/python/site-packages',
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages'
]
複製程式碼

從上面不難看出Python對於模組的搜尋順序

程式所在目錄 ===> 標準安裝目錄 ===> 標準庫安裝目錄 ===> Python環境變數所包含的目錄

所以,如果你自定義的模組與內建模組重名的話,會呼叫你的模組而非內建的模組,所以在命名模組的時候還是儘量別重名如果硬是要同名且兩個模組都用到,可以使用「完整路徑引入」,並使用as 關鍵字為模組設定別名。另外,如果你的模組都不在這些搜尋路徑裡的話,可以通過呼叫sys.path.append("路徑")臨時把路徑新增到搜尋路徑中。


④ __init__.py檔案是做什麼的?

答:標識檔案所在的目錄是一個python的模組包(package),一般是空檔案,當然你也可以加點東西來控制包的匯入行為,直接在__init__.py檔案中批量匯入所需模組,而不用一個個匯入,如下所示(還可以將一些初始化的程式碼放入到該檔案中。)

# xxx包裡的__init__.py
import a
import b
import c    

# 呼叫這個模組的py檔案
import xxx
print(xxx.a,xxx.b,xxx.c)

# 還可以利用上面講到的__all__變數來簡化下:
# xxx包裡的__init__.py
__all__ = ['a','b,'c']

# 呼叫這個模組的py檔案
from xxx import *
複製程式碼

對了,還可以通過相對匯入的方式匯入模組,示例如下:

import .a import A  # 點號表示使用當前路徑的a模組
import ..b import B # 兩個點號表示訪問上層的父類
複製程式碼

⑤ 模組如何遷移到新的環境?

有時我們寫的模組或者程式碼需要遷移到另一個裝置上去執行,而你的指令碼可能用到了一些依賴模組,如果pip命令一個個裝顯得有些繁瑣,可以通過「pipreqs」模組來完成。

答:鍵入 pip install pipreqs 安裝pipreqs模組,接著終端切換到專案路徑,鍵入pipreqs 匯出檔案的存放路徑 就可以匯出一個requirements.txt的依賴檔案,檔案內容就是依賴的模組,複製到新的裝置上,鍵入:pip install -r requirements.txt 即可自動下載安裝需要用到的模組。另外,如果是想把電腦裡Python環境中所有的模組遷移到另一臺電腦,可使用命令匯出依賴檔案:pip freeze > requirement.txt,安裝方法同pipreqs。


⑥ 模組的過載

上面說了重複匯入模組,只是新增一個引用,而不會重新匯入。有時可能需要在同一個會話中去更新模組,可以通過「imp標準庫中的reload()函式」來完成。

from imp import reload  
load(模組名)
複製程式碼

如果本文對你有所幫助,歡迎
留言,點贊,轉發
素質三連,謝謝?~


相關文章