14.Python 模塊

目錄

    • 1. 使用模塊
    • 2. 使用包
    • 3. 常用模塊
      • 3.1 日期和時間
      • 3.2 偽隨機數
      • 3.3 摘要算法
      • 3.4 JSON 處理
      • 3.5 圖像處理

模塊是Python用來組織代碼的一種方法,包是Python用來組織模塊的一種方法。

1. 使用模塊

Python 把能夠相互包含,且有組織的代碼段稱為模塊(module)。使用模塊的好處如下:

  • 提高代碼的可維護性。
  • 提高代碼的可重用性。
  • 避免命名沖突和代碼污染。

文件能夠在物理層面組織模塊,一個文件被看作是一個獨立模塊,一個模塊也可以被看作一個文件。模塊的文件名就是模塊的名字加上擴展名.py。在.py文件中可以包含類、函數、變量、可運行的代碼等。模塊也可以被其他模塊、腳本、交互式解析器導入(import),也可以被其他程序引用。

Python 模塊一般位于安裝目錄下Lib文件夾中,執行help(“moduels”)命令,可以查看已經安裝的所有模塊列表。模塊可以分為3種類型:

  • 內置標準模塊:Python 預安裝了很多標準模塊,如systimejson模塊等。
  • 第三方開源模塊:由第三方商業公司或個人開發,并免費分享到網上的模塊。用戶使用的大部分模塊都是這種類型。
  • 自定義模塊:由開發者自己開發的模塊,方便在腳本中使用

自定義模塊的名字不能與系統模塊重名,否則有覆蓋內置模塊的風險。例如,自定義一個sys.py模塊后,就不能夠使用系統的sys模塊。

使用第三方模塊時,有2種方法:

1.使用pip命名安裝。

'''Windows 按住win+R 輸入 cmd,Mac 打開Terminal'''
pip install 模塊名 # 安裝模塊
pip uninstall 模塊名 # 卸載模塊
pip list # 查看所安裝的模塊

2.通過下面網址下載模塊并安裝模塊。下載.whl或者.gz文件,在命令行進入到文件目錄,使用pip install 文件名或者 python [setup.py](http://setup.py) install

  • PyPi官網:https://pypi.org
  • Gohlke:https://www.lfd.uci.edu/~gohlke/pythonlibs/

使用import語句可以導入模塊,模塊名不包含.py擴展名。如果模塊名比較長,在導入時可以起一個別名。

# 導入模塊
import 模塊名1
import 模塊名2
import 模塊名1[,模塊名2,..,模塊名N]
# 導入模塊并起別名
import 模塊名1 as 別名 

所有的模塊在開頭部分導入,并且建議遵循如下順序:

  1. Python 標準模塊。
  2. Python 第三方模塊。
  3. 自定義模塊。

一個模塊無論被導入多少次,它只被加載一次,當Python解釋器在源代碼中遇到import關鍵字時,自動在搜索路徑(sys.path)中搜尋對應的模塊,如果發現在函數中導入,那么它的作用域是局部的。

搜索路徑是一個目錄列表,被存儲在sys模塊中的path變量中,供解釋器在導入模塊時參考,可以事先配置,或者在源代碼中設置。

import sys # 導入sys模塊
for i in sys.modules: # 遍歷所有導入的模塊print(i,end='\n')dir(sys) # 查看該模塊中可用的成員# 兼容導入適配的模塊版本
try:import json # python 2.6版本后
except ImportError:import simplejson as json # python 2.5版本前

使用from-import語句可以將指定模塊中的成員名稱導入當前作用域中,如函數、類或變量等,語法和示例如下:

from 模塊名 import 成員 # 導入單個成員
from 模塊名 import 成員1[,成員2,...,成員N] # 導入多個成員
from 模塊名 import * # 導入所有成員from time import * # 導入time模塊中所有成員
print(dir())  # 查看導入的所有成員名稱

2. 使用包

包是Python組織模塊的一種邏輯方法,是一個有層次的目錄結構,它定義了由多個模塊或多個子包組成的Python應用程序運行環境。一個文件夾就是一個包,包的名稱就是文件夾的名稱,包可以相互嵌套。包的好處如下:

  • 為名稱空間加入有層次的組織結構。
  • 允許開發人員把有聯系的模塊組合到一起。
  • 允許分發者使用目錄結構而不是一大堆混亂的文件。
  • 解決同一個允許環境中導入模塊重名問題。

創建包就是創建文件夾

包文件夾下存在一個名為__init__.py的文件,用于標識當前文件夾是一個包,建議創建包時都添加__init__.py該文件init.py可以是一個空文件,也可以初始化設置代碼。

導入包有兩種方法:

  1. 絕對路徑導入:通過指定“包.模塊.名字”的完整路徑進行導入。
  2. 相對路徑導入:在一個包(package)的內部,模塊之間可以使用相對路徑導入。
    • 在導入路徑前面添加1個點號(.),表示當前目錄。
    • 在導入路徑前面添加2個點號(…),表示父級目錄。
importimport.子包 
# 常用形式1
import.子包.模塊  
# 常用形式2
fromimport 模塊  
from.子包 import 模塊
from.子包.模塊 import 成員

使用相對路徑導入,必須是一個完整的項目,切必須從入口程序開始執行。

3. 常用模塊

3.1 日期和時間

操作日期和時間的內置模塊有:timedatetimecalendar

time 是基礎模塊,可滿足對時間類型數據的基本處理;

時間也是一種數據類型,分3種形式:時間戳(timestamp)、結構化時間(struct_time)、格式化的時間字符串(format string)。

import time # 導入time模塊
print(time.time())  # 返回當前時間戳,浮點數:1700636693.016157
'''返回結構化時間,一個元組:
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=22, 
tm_hour=15, tm_min=6, tm_sec=30, 
tm_wday=2, tm_yday=326, tm_isdst=0)
'''
print(time.localtime()) 
print(time.ctime()) # 返回當前本地時間的字符串:Wed Nov 22 15:06:30 2023
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2023-11-22 15:16:00

datetime 模塊是對time模塊進行高級封裝,功能更強大,使用更方便;

包含6個字類型:

  • datetime.date:表示日期,常用的屬性有year、month、day。
  • datetime.time:表示時間,常用屬性有hour、minute、second、microsecod。
  • datetime.datetime:表示日期時間
  • datetime.timedelta:表示兩個date、time、datetime實例之間的時間間隔。
  • datetime.tzinfo:時區對象。
  • datetime.timezone:tzinfo的子類,表示時區,計算UTC的偏移量。
import time
import datetime
# 獲取當前時間
print(datetime.datetime.now()) # 2023-11-22 15:35:44.190278
print(datetime.datetime.today()) # 2023-11-22 15:35:44.190382
# datetime 和結構化時間之間相互轉換
print(datetime.datetime(year=2023,month=11,day=22,hour=15,minute=30,second=00)) # 2023-11-22 15:30:00
print(datetime.datetime.now().timetuple()) # 轉換為結構化時間元組
# datetime和時間戳之間相互轉換
print(datetime.datetime.timestamp(datetime.datetime.now()))
print(datetime.datetime.fromtimestamp(1700638527.603307))
# datetime和時間字符串之間的相互轉換
dt = datetime.datetime.now()
print(dt.strftime('%Y=%m-%d %H:%M:%S')) # 2023=11-22 15:44:19
print(dt + datetime.timedelta(hours=8)) # 2023-11-22 23:44:19.150674

calendar 模塊用于處理日歷相關;

import calendar
n = calendar.month(2023,11)
print(n)

3.2 偽隨機數

random 內置模塊,能夠實現各種分布的偽隨機數。

  • random.random():用于生成(0<=n<1.0)的浮點數。
  • random.unform(a,b):用于生成(a<=n<b)的浮點數。
  • random.randint(a,b):用于生成(a<=n<=b)的整數。
  • random.randirange([start=0], stop[,step=1]):指定范圍內,按指定步長遞增的集合中獲取一個隨機數。
  • random.choice(sequence):從參數序列sequence對象中獲取一個隨機元素。
  • random.shuffle(x[,random]):將一個列表中的元素打亂。
  • random.sample(sequence,k):從指定序列sequence中隨機獲取指定長度的片段。
import random 
print(random.random()) # 產生[0,1)浮點數 0.10565535904276113
print(random.uniform(1.1,5.4)) # 產生[1.1,5.4)浮點數 2.2114464386429304
print(random.randint(1,10)) # 產生[0,1]整數 4
print(random.choice([1,2,3,4,5,6,7,8,9,0])) # 從序列中隨機選取一個元素 9
print(random.randrange(1,100,2)) # 生成 1~ 100的間隔2的隨機整數 79
a = [1,3,5,7,8]
random.shuffle(a) # 將序列a中元素順序打亂
print(a) # [5, 8, 1, 3, 7]

3.3 摘要算法

hashlib 內置模塊包含hash和md5加密方法,這種加密是不可逆的,也稱摘要算法。

hash 為哈希,表示把任意的輸入,通過某種hash算法,轉換成固定長度的輸出,這個輸出值就是散列值,也稱摘要值,算法為哈希函數,摘要函數。

MD5 是最常見的摘要算法,速度快,生成結果是固定的16字節,通常用一個32位的十六進制字符串表示。

常用的方法有如下:

  • md5()sha1():加密算法,獲取一個加密的哈希對象。
  • update():用參數字符串更新哈希對象。
  • digest():以二進制數據字符串返回摘要信息。
  • hexdigest():以十六進制數據字符串返回摘要信息。
  • copy():復制哈希對象。
import hashlib # 導入加密模塊
s = 'Python'  # 待加密的字符串
md5 = hashlib.md5() # md5加密
md5.update(s.encode('utf-8')) # 注意轉碼
r = md5.hexdigest() # 返回十六進制的數據字符串值
print(r) # a7f5f35426b927411fc9231b56382173

3.4 JSON 處理

JSON 是一種廣泛應用的輕量級的數據交換格式,字典格式,其中包含方括號起來的數組,也就是列表。

json 提供了4中方法來實現Python對象與JSON對象進行快速交換。

  • dumps():將Python對象序列化為JSON字符串表示。
  • dump():將Python對象序列化為JSON字符串,然后保存到文件中。
  • loads():把JSON格式的字符串反序列化為Python對象。
  • loas():從文件中讀取內容,然后讀取的字符串反序列化為Python對象。
import json
a = {'name':'Tom','age':23}
b = json.dumps(a) # 把序列化Python對象轉換為JSON格式字符串
print(type(a)) # <class 'dict'>
print(b,type(b)) # {"name": "Tom", "age": 23} <class 'str'>
c = json.loads(b) # 把JSON格式字符串轉換序列化Python對象
print(c['name']) # Tom
print(type(c)) # <class 'dict'>with open('test.json','w',encoding='utf-8') as f:
# indent 表示格式化保存字符串,默認為None,小于0個空格json.dump(a,f,indent=4) # 將字典對象序列化字符串# f.write(json.dumps(a,indent=4)) # 與json.dump()效果一樣with open('test.json','r',encoding='utf-8') as f:d = json.load(f) # 轉換python對象f.seek(0) # 重寫把文件指針移到文件開頭e = json.loads(f.read()) # 與json.load(f)執行效果一樣print(d) # {'name': 'Tom', 'age': 23}
print(e) # {'name': 'Tom', 'age': 23}

3.5 圖像處理

Python Imaging Library 是免費的圖像處理工具包,是Python平臺上的圖像處理標準庫。PIL提供強大的圖形、圖像處理功能,API使用簡單。

  • 支持數十種格式,如PNG、JPEG、BMP、GIF、TIFF等。
  • 支持黑白、灰階、RGB、CMYK等多種色彩模式。
  • 圖像基本操作,如裁切、平移、旋轉、改變尺寸、調置、剪切、粘貼等
  • 圖像色彩處理,如亮度、色調、對比、銳利度等。
  • 支持十多種濾鏡。
  • 在圖像中繪制點、線、面、幾何形狀、文字等。

圖像的基本操作:

  • open():打開圖像
  • new():創建新圖像
  • show():顯示圖像
  • save():保存圖像
  • copy():復制圖像

圖像基本屬性

  • format:圖像來源
  • size:圖像大小
  • mode:圖像模式

圖像變換操作

  • resize():改變圖像大小
  • rotate():旋轉圖像
  • transpose():翻轉圖像
  • convert():轉換圖像
  • filter():特效處理

圖像合成、裁切、分離等操作

  • blend():合成圖像
  • crop():裁切圖像
  • paste():粘貼圖像
  • split():根據顏色通道分離圖像
  • merge():核查單一圖像

圖像像素點操作:

  • point():對每個像素點執行一次函數調用操作
  • getpixel():獲取指定像素點的顏色值
  • putpixel():為指定像素點設置顏色值
from PIL import Image
im = Image.open('/Users/guanfawang/Downloads/Untitled-89.png')
w,h = im.size
print(w,h) # 506 526
a = im.resize((w//2,h//2)) # 改變尺寸
a.save('/Users/guanfawang/Downloads/a.png') # 保存新尺寸圖像
a.rotate(90) # 旋轉90度
a.show() # 打開查看圖像'''
設計生成驗證碼圖片
'''
# 第一步:從PIL模塊中導入圖像類、繪圖類、圖像字體類和圖像特效類
from PIL import Image,ImageDraw,ImageFont,ImageFilter
# 第二步:初始化設置
import random  # 導入隨機數模塊
def rndchar(): # 隨機字母return chr(random.randint(65,90))
def rndcolor1(): # 隨機顏色1return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
def rndcolor2(): #隨機顏色2return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
width = 60*4 # 初始化圖像寬度,單位為像素
height = 60 # 初始化圖像高度,單位為像素
# 第三步:創建圖像對象、字體對象、繪圖對象
image = Image.new('RGB',(width,height),(255,255,255)) # 創建Image對象
font = ImageFont.truetype('arialuni.ttf',36) # 創建Font對象
draw = ImageDraw.Draw(image) # 創建Draw對象
# 生成麻點背景
for x in range(width): # 使用隨機顏色繪圖for y in range(height):draw.point((x,y),fill=rndcolor1())
# 在畫布上生成隨機字符
for t in range(4): # 輸出4個隨機字符draw.text((60*t+10,10),rndchar(),font=font,fill=rndcolor2())
image = image.filter(ImageFilter.BLUR) # 模糊化處理
# 第四步:保存圖像
image.save('code.jpg','jpeg')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161755.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161755.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161755.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET面試題1

1.什么是C#&#xff1f; C#&#xff08;讀作"C sharp"&#xff09;是一種通用的、面向對象的編程語言&#xff0c;由Microsoft開發。它是一種靜態類型語言&#xff0c;支持強類型檢查和面向對象編程&#xff08;OOP&#xff09;的概念。C#主要用于開發Windows應用程序…

Bug等級劃分

Bug是指在程序或系統中存在的錯誤、缺陷或異常&#xff0c;是由于編碼錯誤、設計問題、邏輯錯誤或其他因素導致的。 常見的Bug分類方法 功能性Bug與軟件的功能有關&#xff0c;軟件無法正常工作、功能與需求不符或功能執行不正確。 用戶界面Bug與軟件的用戶界面有關&#xff…

Unity中Shader雙向反射分布函數BRDF

文章目錄 前言一、渲染方程二、什么是BxDF1、BSSRDF2、BRDF3、BTDF4、BSDF 三、迪士尼原則的BRDF四、迪士尼原則的BRDF的參數五、在Unity中看一下默認Shader的這些參數六、在這里記錄一下使用 Blender 和 SubstancePainter 的流程1、在Blender中導出模型為 .obj 格式2、在Subst…

Android WMS—— Surace管理 (二十)

WMS 負責創建 Surface 以及對 Surface 的擺放工作,之后將 Surface 提交給SurfaceFlinger 進行合并。在 App 層也創建了一個 Surface 對象,但是那個是空對象,用于 WMS 的填充。 一、Surface的創建 首先 APP 層在 ViewRootImpl 的 relayoutWindow() 方法中發起創建任務。 1、…

Go 實現網絡代理

使用 Go 語言開發網絡代理服務可以通過以下步驟完成。這里&#xff0c;我們將使用 golang.org/x/net/proxy 包來創建一個簡單的 SOCKS5 代理服務作為示例。 步驟 1. 安裝 golang.org/x/net/proxy 包 使用以下命令安裝 golang.org/x/net 包&#xff0c;該包包含 proxy 子包&am…

天軟特色因子看板 (2023.11 第12期)

該因子看板跟蹤天軟特色因子A05006(近一月單筆流入流出金額之比(%)&#xff0c;該因子為近一個月單筆流入流出金額之比(%)均值因子&#xff0c;用以刻畫在 市場日內分時成交中流入、流出成交金額的差異性特點&#xff0c;發掘市場主力資金的作用機制。 今日為該因子跟蹤第12期&…

expect腳本在自動化部署中的具體應用案例

#expect腳本在自動化部署中的具體應用 expect腳本是一個非常好的交互式應用腳本&#xff0c;在自動化部署中&#xff0c;可以使用這個腳本來實現全自動的自動化部署。下面是一些具體的應用案例。 場景一&#xff1a;自動安裝mysql 可以使用expect腳本來實現mysql自動安裝&…

Windows平臺Unity下實現camera場景推送RTMP|輕量級RTSP服務|實時錄像

技術背景 我們在對接Unity平臺camera場景采集的時候&#xff0c;除了常規的RTMP推送、錄像外&#xff0c;還有一些開發者&#xff0c;需要能實現輕量級RTSP服務&#xff0c;對外提供個拉流的RTSP URL。 目前我們在Windows平臺Unity下數據源可采集到以下部分&#xff1a; 采集…

@PostConstruct雖好,請勿亂用

1.問題說明 在日常的業務開發中&#xff0c;有時會利用PostConstruct在容器啟動時執行一些任務。例如&#xff1a; PostConstruct public void init(){System.out.println("service 初始化..............."); }一般情況這沒什么問題&#xff0c;但最近一個同事在做…

ui5使用echart

相關的代碼已經發布到github上。 展示下相關的實現功能 1、柱狀圖-1 2、柱狀圖-2 3.折線圖 4.餅狀圖 如何使用&#xff1a; 使用git clone項目到本地 git clone https://github.com/linhuang0405/com.joker.Zechart找到index.html。在vscode里右鍵選擇Open with Live Serve…

1

【任務 1】私有云服務搭建[10 分] 【題目 1】基礎環境配置[0.5 分] 【題目 2】Yum 源配置[0.5 分] 【題目 3】配置無秘鑰 ssh[0.5 分] 【題目 4】基礎安裝[0.5 分] 【題目 5】數據庫安裝與調優[0.5 分] 【題目 6】Keystone 服務安裝與使用[0.5 分] 【題目 7】Glance 安裝與使用…

BLE通用廣播包

文章目錄 1、藍牙廣播數據格式2、掃描響應數據 1、藍牙廣播數據格式 藍牙廣播包的最大長度是37個字節&#xff0c;其中設備地址占用了6個字節&#xff0c;只有31個字節是可用的。這31個可用的字節又按照一定的格式來組織&#xff0c;被分割為n個AD Structure。如下圖所示&…

npm命令

node -v --查看版本 npm install --安裝npm npm config get registry --查看npm當前鏡像 npm config set registry https://registry.npmmirror.com --設置淘寶鏡像 npm版本管理工具

VS Code 如何搭建C/C++環境

目錄 一、VS Code是什么&#xff1f; 二、VS Code下載和安裝 2.1下載 2.2安裝 2.3環境介紹 三、Vs Code配置C/C環境 3.1下載和配置MinGW-w64編譯器套件 3.1.1下載 3.1.2配置 一、VS Code是什么&#xff1f; 跨平臺&#xff0c;免費且開源的現代輕量級代碼編輯器 Vis…

【MATLAB源碼-第85期】基于farrow結構的濾波器仿真,截止頻率等參數可調。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 Farrow結構是一種用于實現可變數字濾波器的方法&#xff0c;尤其適用于數字信號處理中的采樣率轉換和時變濾波。它通過多項式近似來實現對濾波器系數的平滑變化&#xff0c;使得濾波器具有可變的群延時或其他參數。 Farrow結…

mysql中數據是如何被用B+樹查詢到的

innoDB是按照頁為單位讀寫的 那頁中有很多行數據&#xff0c;是怎么執行查詢的呢&#xff0c;首先我們肯定&#xff0c;是以單向列表形式存儲的&#xff0c;提高了增刪的效率&#xff0c;但是查詢效率低。所以實際上對頁中的行數據進行了優化&#xff0c;能以二分的方式進行查…

Mac Goland無法調試

去github上下載golang的debug工具delve&#xff1a; go-delve/delve?github.com/go-delve/delve/blob/master/Documentation/installation/README.md?編輯 或者: go install github.com/go-delve/delve/cmd/dlvlatest按照他的安裝方式進行安裝&#xff0c;最后會在本地的…

基于北方蒼鷹算法優化概率神經網絡PNN的分類預測 - 附代碼

基于北方蒼鷹算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于北方蒼鷹算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于北方蒼鷹優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xff1a;針對PNN神…

Java面試-框架篇-Mybatis

Java面試-框架篇-Mybatis MyBatis執行流程延遲加載使用及原理一, 二級緩存來源 MyBatis執行流程 讀取MyBatis配置文件: mybatis-config.xml加載運行環境和映射文件構造會話工廠SqlSessionFactory會話工廠創建SqlSession對象(包含了執行SQL語句的所有方法)操作數據庫的接口, Ex…

vue腳手架的基礎搭建過程

MVVM架構 Vue框架底層設計遵循MVVM架構。 Model層&#xff08;M&#xff09;模型層&#xff08;業務邏輯層&#xff09; View層&#xff08;V&#xff09;視圖層 主管UI ViewModel層&#xff08;VM&#xff09; 將項目代碼劃分清晰的層次結構后&#xff0c;非常有利于后期代…