Python為何這麼牛逼?不就是有很多的模塊和框架嗎?最詳細的教程

Python為何這麼牛逼?不就是有很多的模塊和框架嗎?最詳細的教程

概述

模塊簡述

Python__name__

模塊優點

  • 提高了代碼的可維護性
  • 提高了代碼的服用度, 當一個模塊完畢, 可以被多個地方引用
  • 可避免函數名和變量名的衝突
Python為何這麼牛逼?不就是有很多的模塊和框架嗎?最詳細的教程

  • argv : 獲取命令行參數的列表
  • import sys 引入 python 標準庫中的 sys.py 模塊
  • import : 這是引入一個模塊的方法(後面會提到)
  • sys.path : 包含了一個 Python 解釋器自動查找所需模塊的路徑的列表

自定義模塊

  • Python 中不但可以使用第三方模塊和系統模塊, 同時我們還可以使用自定義模塊,
  • 在 Python 中一個 .py 文件就是一個模塊
  • 下面是我自定義的一個 Titan.py 模塊, 代碼如下
Python為何這麼牛逼?不就是有很多的模塊和框架嗎?最詳細的教程

需要注意的是:

  • 一個模塊只會被導入一次,不管你執行了多少次 import , 可以防止模塊被重複引用
  • 引入任何模塊時(包括自定義模塊), 不用加 .py 後綴
  • 當我們使用 import 語句的時候, Python 解釋器是怎樣找到對應的文件的呢?
  • 這就涉及到 Python 的搜索路徑,搜索路徑是由一系列目錄名組成的, Python 解釋器就依次從這些目錄中去尋找所引入的模塊。
  • 這看起來很像環境變量,事實上,也可以通過定義環境變量的方式來確定搜索路徑。
  • 搜索路徑是在 Python 編譯或安裝的時候確定的,安裝新的庫應該也會修改。搜索路徑被存儲在 sys 模塊中的 path 變量

使用示例

Python為何這麼牛逼?不就是有很多的模塊和框架嗎?最詳細的教程

需要注意的是:

這種方式, 可能會導致和本文件中定義的方法或者變量重名, 這裡需要注意

from…import* 方式

把一個模塊中所有的內容, 全部倒入當前命名空間, 但是最好不要過多地使用

# 格式:from modname import *# 使用:from Titan import *sayGood()print(age)

模塊內置屬性和函數

__name__ 屬性

.py__name__if __name__ == '__main__': print('這是Titan模塊')else: def sayGood(): print('good') def sayNice(): print('nice') def sayBad(): print('bad') age = 20 name = 'titan'
  • name 和 main 前後都是雙下劃線
  • 每一個模塊中都有一個 __name__ 屬性, 當其值等於 __main__ 時, 表明該模塊自身在執行, 否則被引入了其他文件
  • 當前文件如果為程序的入口文件, 則 __name__ 屬性的值為 __main__

dir() 函數

dir()dir()import Titanprint(dir(Titan))# 輸出結果:['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'age', 'name', 'sayBad', 'sayGood', 'sayNice']print(dir())# 輸出結果:['Titan', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']# 這裡定義一個新的變量sum = 30print(dir())# 輸出結果:['Titan', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'sum']# 把定義的變量刪除後del sumprint(dir())# 輸出結果:['Titan', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']

這裡我們先思考這樣一個問題: 在同一個項目中有兩個或兩個以上的開發者分別定義了相同名字的模塊(當然獅子啊不同的目錄中, 同一個目錄下不可能創建出相同名字的文件), 那麼模塊該如何調用

解決

  • 為了解決上述模塊命名的衝突, 引入了按照目錄來組織模塊的方法, 成為包
  • 包是一種管理 Python 模塊命名空間的形式,採用"點模塊名稱"
  • 引入包以後, 只要頂層的包不與其他人的發生衝突, 那麼模塊就都不會與別人的發生衝突
  • 所謂頂層的包指的是上一層的文件目錄
  • 同一個包可以包含多個模塊
  • 例如: 名為 A.B 的模塊表示了名為 A 的包中名為 B 的子模塊

需要注意的是:

在每一個包內(模塊的同級目錄下)必須要創建一個名為 __init__.py 的文件, 主要是為了避免一些濫竽充數的名字, 目前該文件內可以什麼都不用寫, 如圖所示:

Python為何這麼牛逼?不就是有很多的模塊和框架嗎?最詳細的教程

調用方法

import a.Titanimport b.Titanimport b.codera.Titan.sayGood()b.Titan.sayGood()b.coder.sayGood()# 輸出結果:good--agood--bgood--coder

安裝使用第三方模塊

pip 簡介

  • 在 Python 中第三方庫是通過 pip 安裝和管理的, pip 就像 iOS 中的 pod 一樣, 負責安裝和管理第三方庫
  • 在 Mac 和 Linux 系統中 pip 是默認安裝過的, 一般無需重新安裝, 如有問題, 請自行百度解決
  • 在 Mac 系統中會有一個默認的 Python2.7 版本的, 我自己安裝了一個3.6的版本, 自然默認也安裝了 pip
  • 下面是一些 Python3.6 中 pip 的命令, 這裡需要以 pip3 為命令頭執行
# 查看當前pip版本pip3 -V# 安裝第三方庫pip3 install ...# 對pip進行升級pip3 install --upgrade pip3

安裝第三方庫

  • Mac 系統安裝第三方庫, 直接打開終端執行安裝命令即可
  • Pillow 已經是 Python 平臺事實上的圖像處理標準庫了
  • PIL 功能非常強大,但 API 卻非常簡單易用
pip3 install Pillow 

第三方模塊的使用

操作圖像

下面是最常見的圖像縮放操作示例代碼

from PIL import Image# 打開一個jpg圖像文件,注意是當前路徑:im = Image.open('titan.jpg')# 獲得圖像尺寸w, h = im.sizeprint('image size: %sx%s' % (w, h))# 縮放到50%:im.thumbnail((w//2, h//2))print('image to: %sx%s' % (w//2, h//2))# 把縮放後的圖像用jpeg格式保存:im.save('jun.jpg', 'jpeg')

其他功能如切片、旋轉、濾鏡、輸出文字、調色板等一應俱全, 代碼如下:

from PIL import Image, ImageFilter# 打開一個jpg圖像文件,注意是當前路徑:im = Image.open('jun.jpg')# 應用模糊濾鏡:im2 = im.filter(ImageFilter.BLUR)im2.save('jun1.jpg', 'jpeg')


分享到:


相關文章: