




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第10章Python計(jì)算生態(tài)與常用庫《Python快速編程入門(第3版))》學(xué)習(xí)目標(biāo)/Target了解Python計(jì)算生態(tài),能夠列舉3個(gè)應(yīng)用領(lǐng)域以及該領(lǐng)域的常用庫熟悉包的構(gòu)建與導(dǎo)入,能夠在程序中熟練地構(gòu)建與導(dǎo)入包熟悉模塊的構(gòu)建與使用,能夠在程序中熟練地構(gòu)建和使用模塊學(xué)習(xí)目標(biāo)/Target
了解生態(tài)庫的發(fā)布,能夠復(fù)述自定義庫的發(fā)布流程掌握常用第三方庫的基本用法,能夠使用jieba、wordcloud、Pygame庫
實(shí)現(xiàn)中文分詞、繪制詞云和制作小游戲的功能掌握常用內(nèi)置庫的基本用法,能夠使用time、random、turtle庫實(shí)現(xiàn)處
理時(shí)間、生成隨機(jī)數(shù)和繪制圖形的功能章節(jié)概述/SummaryPython自其問世以來,逐步建立起了全球最龐大的編程計(jì)算生態(tài)系統(tǒng),這個(gè)強(qiáng)大的生態(tài)系統(tǒng)得益于無數(shù)開發(fā)人員的貢獻(xiàn)和努力,以及各種精心設(shè)計(jì)的Python庫的支持。這些庫涵蓋了眾多領(lǐng)域,包括數(shù)據(jù)分析、人工智能、機(jī)器學(xué)習(xí)還是Web開發(fā)等,展現(xiàn)了Python的強(qiáng)大威力。本章將簡要介紹Python的計(jì)算生態(tài)系統(tǒng),并討論P(yáng)ython生態(tài)庫的構(gòu)建與發(fā)布,以及一些常用的Python庫。目錄/Contents010203Python計(jì)算生態(tài)概覽Python生態(tài)庫的構(gòu)建與發(fā)布常用的內(nèi)置Python庫04實(shí)訓(xùn)案例目錄/Contents0506常用的第三方Python庫實(shí)訓(xùn)案例Python計(jì)算生態(tài)概覽10.1
先定一個(gè)小目標(biāo)!了解Python計(jì)算生態(tài),能夠列舉3個(gè)應(yīng)用領(lǐng)域以及該領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽Python計(jì)算生態(tài)是指由Python語言和其周邊生態(tài)系統(tǒng)所構(gòu)成的一系列工具、框架、庫和應(yīng)用,用于解決各種計(jì)算問題和開發(fā)需求。Python計(jì)算生態(tài)涵蓋網(wǎng)絡(luò)爬蟲、數(shù)據(jù)分析、文本處理、數(shù)據(jù)可視化、圖形用戶界面、機(jī)器學(xué)習(xí)、Web開發(fā)、網(wǎng)絡(luò)應(yīng)用開發(fā)、游戲開發(fā)、虛擬現(xiàn)實(shí)、圖形藝術(shù)等多個(gè)領(lǐng)域。10.1Python計(jì)算生態(tài)概覽1.網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則自動(dòng)從網(wǎng)絡(luò)上抓取信息的程序或者腳本,它可以代替手工完成很多工作,比如批量搜集網(wǎng)絡(luò)上的數(shù)據(jù)資源,為數(shù)據(jù)平臺(tái)提供數(shù)據(jù)支撐。Python作為一種簡單且高效的腳本語言,在網(wǎng)絡(luò)爬蟲領(lǐng)域得到了廣泛的應(yīng)用。網(wǎng)絡(luò)爬蟲程序涉及HTTP請(qǐng)求、Web信息提取、網(wǎng)頁數(shù)據(jù)解析等操作,Python計(jì)算生態(tài)通過Requests、Selenium、re、BeautifulSoup、Scrapy、PySpider等庫為這些操作提供了強(qiáng)有力的支持。10.1Python計(jì)算生態(tài)概覽10.1Python計(jì)算生態(tài)概覽庫名功能說明RequestsRequests庫是一個(gè)流行的網(wǎng)絡(luò)請(qǐng)求庫,提供簡潔而強(qiáng)大的API來發(fā)送各種類型的HTTP請(qǐng)求,并處理服務(wù)器返回的響應(yīng)。Requests庫支持會(huì)話管理、文件上傳和下載、SSL證書驗(yàn)證、重定向處理等功能,使得處理HTTP請(qǐng)求變得簡單而高效SeleniumSelenium庫用于處理那些需要JavaScript渲染或動(dòng)態(tài)內(nèi)容的網(wǎng)頁,通過模擬真實(shí)的瀏覽器環(huán)境,它能夠完全加載和執(zhí)行JavaScript代碼,從而爬取動(dòng)態(tài)生成的內(nèi)容,獲取更完整的網(wǎng)頁數(shù)據(jù)rere提供了定義和解析正則表達(dá)式的一系列通用功能,除網(wǎng)絡(luò)爬蟲外,還適用于各類需要解析數(shù)據(jù)的場景網(wǎng)絡(luò)爬蟲領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽庫名功能說明BeautifulSoupBeautifulSoup庫用于從HTML或XML文檔中提取所需的數(shù)據(jù),它可以將復(fù)雜的HTML或XML文檔轉(zhuǎn)化為一個(gè)易于操作的樹形結(jié)構(gòu),開發(fā)人員通過樹形結(jié)構(gòu)對(duì)象的方法和屬性便可以訪問和搜索文檔中的元素和內(nèi)容ScrapyScrapy是一款網(wǎng)絡(luò)爬蟲框架,用于構(gòu)建可擴(kuò)展的網(wǎng)絡(luò)爬蟲程序,它采用異步并發(fā)的方式,可以快速、穩(wěn)定地爬取網(wǎng)頁并抽取數(shù)據(jù),支持自定義數(shù)據(jù)處理和多種數(shù)據(jù)存儲(chǔ)方式PySpiderPySpider也是一款網(wǎng)絡(luò)爬蟲框架,與Scrapy相比,它更適合小規(guī)模的爬取工作。PySpider支持?jǐn)?shù)據(jù)庫后端、消息隊(duì)列、優(yōu)先級(jí)和分布式架構(gòu)等功能,可以幫助開發(fā)者更方便地進(jìn)行爬取任務(wù)的管理和擴(kuò)展網(wǎng)絡(luò)爬蟲領(lǐng)域的常用庫2.數(shù)據(jù)分析數(shù)據(jù)分析是指使用各種統(tǒng)計(jì)和計(jì)算方法對(duì)數(shù)據(jù)進(jìn)行整理、轉(zhuǎn)化、分析和解釋的過程。通過數(shù)據(jù)分析,可以發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)聯(lián)性、趨勢和規(guī)律,并從中獲取有價(jià)值的信息和洞察。Python計(jì)算生態(tài)通過NumPy、pandas、SciPy庫為數(shù)據(jù)分析領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明NumpyNumPy是用于科學(xué)計(jì)算的庫,它提供了表示N維數(shù)組的ndarray對(duì)象,通過ndarray對(duì)象可以便捷地存儲(chǔ)和處理大型矩陣。另外,NumPy也提供了實(shí)現(xiàn)線性代數(shù)、傅里葉變換和隨機(jī)數(shù)功能的模塊,能以優(yōu)異的效率完成科學(xué)計(jì)算pandaspandas是一個(gè)基于NumPy開發(fā)的庫,專注于數(shù)據(jù)處理、數(shù)據(jù)分析和數(shù)據(jù)可視化。它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和豐富的函數(shù),可以高效地處理各種類型的數(shù)據(jù),并提供統(tǒng)計(jì)分析和可視化工具,支持多種數(shù)據(jù)格式的輸入和輸出ScipyScipy是一個(gè)基于NumPy構(gòu)建的科學(xué)計(jì)算庫,它可以處理插值、積分、優(yōu)化等問題,也能處理圖像和信號(hào)、求解常微分方程數(shù)值數(shù)據(jù)分析領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽3.文本處理文本處理即對(duì)文本內(nèi)容的處理,包括文本內(nèi)容的分類、文本特征的提取、文本內(nèi)容的轉(zhuǎn)換等。Python計(jì)算生態(tài)通過jieba、NLTK、PyPDF2、Python-docx、等庫為文本處理領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明jiebajieba是一款優(yōu)秀的Python中文分詞庫,它可以非常方便地進(jìn)行中文文本的分詞,還可以自定義詞典以適應(yīng)自己的應(yīng)用場景。此外,jieba還支持詞性標(biāo)注、關(guān)鍵詞提取、文本分類等功能NLTKNLTK提供了用于訪問超過50個(gè)語料庫和詞匯資源的接口,支持文本分類、標(biāo)記、解析,支持語法、語義分析等功能,簡單、易用且高效,是十分優(yōu)秀的Python自然語言處理庫PyPDF2PyPDF2是一個(gè)專業(yè)且穩(wěn)定、用于處理PDF文檔的Python庫,它支持PDF文件信息的提取、文件內(nèi)容的按頁拆分與合并,支持頁面裁剪、內(nèi)容加密與解密等功能Python-docxPython-docx是一個(gè)用于處理Word文檔的Python庫,它支持Word文檔中的標(biāo)題、段落、分頁符、圖片、表格、文字等信息的管理,上手非常簡單文本處理領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽4.數(shù)據(jù)可視化數(shù)據(jù)可視化是一門關(guān)于數(shù)據(jù)視覺表現(xiàn)形式的科學(xué)技術(shù)研究,它既能夠有效傳達(dá)數(shù)據(jù)信息,也需兼顧信息傳達(dá)的美學(xué)形式,二者缺一不可。Python計(jì)算生態(tài)主要通過Matplotlib、Seaborn、Pyecharts
等庫為數(shù)據(jù)可視化領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明MatplotlibMatplotlib是一個(gè)基于NumPy開發(fā)的繪圖庫,它提供了豐富的功能,可以創(chuàng)建各種類型的圖表和圖形,并且允許用戶對(duì)每個(gè)圖表和圖形的細(xì)節(jié)進(jìn)行定制SeabornSeaborn是基于Matplotlib進(jìn)行高級(jí)封裝的數(shù)據(jù)可視化庫,支持NumPy和pandas。由于對(duì)Matplotlib進(jìn)一步的封裝,Seaborn實(shí)現(xiàn)了更簡單、豐富的調(diào)用效果,多數(shù)情況下可以輕松繪制具有吸引力的圖表PyechartsPyecharts是一個(gè)基于Python的數(shù)據(jù)可視化庫,使用EchartsJavaScript庫作為底層引擎,它提供了豐富的圖表類型和靈活的樣式定制,用于生成交互式的數(shù)據(jù)可視化圖表數(shù)據(jù)可視化領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽5.機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,涉及概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多個(gè)學(xué)科,其主要研究計(jì)算機(jī)如何模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,并通過獲取新的知識(shí)與技能以及重新組織已有知識(shí)結(jié)構(gòu)來不斷改善自身。機(jī)器學(xué)習(xí)被認(rèn)為是人工智能的核心,是使計(jì)算機(jī)具有智能的根本途徑。Python計(jì)算生態(tài)主要通過Scikit-learn、TensorFlow、PyTorch庫為機(jī)器學(xué)習(xí)領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明Scikit-learnScikit-learn是一個(gè)基于Python的機(jī)器學(xué)習(xí)庫,它建立在NumPy、SciPy和Matplotlib等庫的基礎(chǔ)上,并與這些庫緊密集成。Scikit-learn提供了各種常見的監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)的算法,包括分類、回歸、聚類、降維、特征選擇和模型評(píng)估等TensorFlowTensorFlow是谷歌開發(fā)的開源深度學(xué)習(xí)框架,可用于構(gòu)建、訓(xùn)練和部署機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型。它在多種操作系統(tǒng)和硬件平臺(tái)上運(yùn)行,并具備分布式計(jì)算、模型部署、優(yōu)化器和可視化等功能PyTorchPyTorch是一個(gè)由Facebook開發(fā)的開源深度學(xué)習(xí)框架,可以用于構(gòu)建、訓(xùn)練和部署機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型。與TensorFlow相比,PyTorch具有動(dòng)態(tài)計(jì)算圖的特點(diǎn),使得模型的開發(fā)和調(diào)試更加直觀和靈活機(jī)器學(xué)習(xí)領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽6.圖形用戶界面圖形用戶界面(GraphicalUserInterface,簡稱GUI)是采用圖形化方式展示和操作的用戶界面,該界面允許用戶使用鼠標(biāo)、鍵盤等輸入設(shè)備操縱屏幕上的圖標(biāo)或菜單選項(xiàng),以選擇命令、調(diào)用文件、啟動(dòng)程序或執(zhí)行一些其他的日常任務(wù)。Python計(jì)算生態(tài)通過PyQt5、wxPython、PyGObject庫為圖形用戶界面領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明PyQt5PyQt5庫是Python與強(qiáng)大的GUI庫——Qt的融合,它提供了Qt開發(fā)框架的Python接口,擁有超過300個(gè)類、將近6000個(gè)函數(shù)和方法,可開發(fā)功能強(qiáng)大的圖形用戶界面wxPythonwxPython是跨平臺(tái)庫wxWidgets的Python版本,該庫具有開源、支持跨平臺(tái)、高度可定制、豐富的控件等特點(diǎn),允許開發(fā)人員開發(fā)專業(yè)、功能齊全、跨平臺(tái)的圖形用戶界面PyGObjectPyGObject綁定了Linux系統(tǒng)下著名的圖形庫GTK3+,該庫簡單易用、功能強(qiáng)大、設(shè)計(jì)靈活,具有良好的設(shè)計(jì)理念和可擴(kuò)展性,允許開發(fā)人員開發(fā)現(xiàn)代、跨平臺(tái)的圖形用戶界面圖形用戶界面領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽7.Web開發(fā)Web開發(fā)是創(chuàng)建和維護(hù)互聯(lián)網(wǎng)上網(wǎng)站和應(yīng)用程序的領(lǐng)域,它涉及前端(用戶界面)、后端(服務(wù)器邏輯)和數(shù)據(jù)庫開發(fā),以及關(guān)注安全性和性能優(yōu)化等方面。Python計(jì)算生態(tài)通過Django、Tornado、Flask、Twisted等庫為Web開發(fā)領(lǐng)域提供了支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明DjangoDjango是一個(gè)功能完善且免費(fèi)開源的Web框架,采用了MTV模式,提供了URL路由映射、Request上下文和基于模板的頁面渲染技術(shù)。它內(nèi)置了強(qiáng)大的管理站點(diǎn),適用于快速搭建高性能的企業(yè)級(jí)內(nèi)容類網(wǎng)站TornadoTornado是一個(gè)高并發(fā)處理框架,通常用于構(gòu)建大規(guī)模站點(diǎn)的接口服務(wù),而不是像Django一樣用于構(gòu)建完整的網(wǎng)站。它同樣提供URL路由映射、Request上下文和基于模板的頁面渲染技術(shù)。此外,Tornado還支持異步I/O和超時(shí)事件處理,并且內(nèi)置了可直接用于生產(chǎn)環(huán)境的HTTP服務(wù)器FlaskFlask是PythonWeb領(lǐng)域的一款新興框架,它具有簡潔的功能設(shè)計(jì),并吸收了其他框架的優(yōu)點(diǎn),因此具備良好的可擴(kuò)展性。該框架常用于開發(fā)小型網(wǎng)站TwistedDjango、Tornado和Flask是建立在應(yīng)用層協(xié)議HTTP之上的框架。它們主要用于開發(fā)Web應(yīng)用程序。相比之下,Twisted是一個(gè)基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)框架,它支持多種傳輸層和應(yīng)用層協(xié)議,支持客戶端和服務(wù)器端的開發(fā),適用于開發(fā)注重服務(wù)器性能的應(yīng)用程序Web開發(fā)領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽8.網(wǎng)絡(luò)應(yīng)用開發(fā)網(wǎng)絡(luò)應(yīng)用開發(fā)指以網(wǎng)絡(luò)為基礎(chǔ)的應(yīng)用程序的開發(fā),Python計(jì)算生態(tài)通過WeRoBot、aip、MyQR等庫為網(wǎng)絡(luò)應(yīng)用開發(fā)領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明WeRoBotWeRoBot庫封裝了很多微信公眾號(hào)接口,提供了解析微信服務(wù)器消息及反饋消息的功能,該庫簡單易用,是建立微信機(jī)器人的重要技術(shù)手段aipaip封裝了百度AI開放平臺(tái)的接口,利用該庫可快速開發(fā)各類網(wǎng)絡(luò)應(yīng)用程序,如天氣預(yù)報(bào)、在線翻譯、快遞查詢等MyQRMyQR是一個(gè)用于生成與解析二維碼的庫,它可以幫助開發(fā)者輕松生成各種類型的二維碼,包括普通文本、URL、名片、郵件、短信等。同時(shí),MyQR還支持對(duì)已有的二維碼進(jìn)行解析和提取信息網(wǎng)絡(luò)應(yīng)用開發(fā)領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽9.游戲開發(fā)游戲開發(fā)分為2D游戲開發(fā)和3D游戲開發(fā),Python計(jì)算生態(tài)通過Pygame和Panda3D庫為游戲開發(fā)領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明PygamePygame是為開發(fā)2D游戲而設(shè)計(jì)的第三方跨平臺(tái)庫,開發(fā)人員利用Pygame中定義的接口,可以方便快捷地實(shí)現(xiàn)諸如圖形用戶界面創(chuàng)建、圖形和圖像的繪制、用戶鍵盤和鼠標(biāo)操作的監(jiān)聽以及播放音頻等游戲中常見的功能Panda3DPanda3D是一款免費(fèi)且開源的3D渲染和游戲開發(fā)庫,該庫強(qiáng)調(diào)能力、速度、完整性和容錯(cuò)能力,提供場景瀏覽器、性能監(jiān)視器和動(dòng)畫優(yōu)化工具游戲開發(fā)領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽10.圖形藝術(shù)圖形藝術(shù)領(lǐng)域是指涉及使用視覺元素、圖形和圖像來創(chuàng)造藝術(shù)作品的領(lǐng)域,它包括了繪畫、插畫、平面設(shè)計(jì)、數(shù)碼藝術(shù)、動(dòng)畫、電影視覺效果和游戲美術(shù)等各種形式。Python計(jì)算生態(tài)通過Quads、Ascii_art和turtle庫為圖形藝術(shù)領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明QuadsQuads是一個(gè)基于四叉樹和迭代操作的圖形藝術(shù)庫。它接受圖像作為輸入,并使用四叉樹將圖像分割為四個(gè)象限。每個(gè)象限根據(jù)輸入圖像中的顏色,分配平均顏色,并重復(fù)該過程N(yùn)次,以產(chǎn)生藝術(shù)效果Ascii_artAscii_art是一種使用ASCII字符表示圖像的技術(shù)。Python的Ascii_art庫提供了對(duì)該技術(shù)的支持,它可以將接收的圖像轉(zhuǎn)換為字符,從而重構(gòu)圖像并輸出Turtleturtle庫提供了繪制線條、圓形以及其他圖形的函數(shù),使用該庫可以輕松地創(chuàng)建一個(gè)圖形窗口,并通過簡單重復(fù)的動(dòng)作來直觀地繪制界面和圖形圖形藝術(shù)領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽11.圖像處理圖像處理是利用計(jì)算機(jī)算法和技術(shù)對(duì)圖像進(jìn)行分析、增強(qiáng)、重建和理解的科學(xué)和工程領(lǐng)域,它涉及圖像增強(qiáng)、濾波、壓縮、特征提取、圖像分割、目標(biāo)檢測和識(shí)別、圖像重建等任務(wù)。Python通過NumPy、Scipy、Pillow、OpenCV-Python等庫為圖像處理領(lǐng)域提供支持。10.1Python計(jì)算生態(tài)概覽庫名功能說明NumPy數(shù)字圖像實(shí)質(zhì)上是由像素值組成的數(shù)組,而NumPy提供了適用于存儲(chǔ)和處理圖像的數(shù)組類型。利用NumPy提供的基于數(shù)組的計(jì)算功能,我們可以輕松地修改圖像的像素值ScipyScipy提供了對(duì)NumPy數(shù)組進(jìn)行運(yùn)算的豐富函數(shù)庫,其中包括了許多在圖像處理中常用的功能,比如線性和非線性濾波、二值形態(tài)操作、B樣條插值等,這些函數(shù)可以方便地應(yīng)用于圖像處理任務(wù),提供了豐富且靈活的工具來處理和改善圖像數(shù)據(jù)PillowPillow是一個(gè)圖像處理庫,它是PIL庫的一個(gè)分支,提供了對(duì)不同格式圖像文件的打開和保存操作,也提供了包括點(diǎn)運(yùn)算、色彩空間轉(zhuǎn)換等基本的圖像處理功能OpenCV-PythonpenCV-Python是OpenCV庫的Python版,可以在Python環(huán)境中使用OpenCV的接口和功能,它簡單易用、高效快速,在圖像處理、計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)方面廣泛應(yīng)用圖像處理領(lǐng)域的常用庫10.1Python計(jì)算生態(tài)概覽Python生態(tài)的構(gòu)建與發(fā)布10.2
先定一個(gè)小目標(biāo)!10.2.1模塊的構(gòu)建與使用熟悉模塊的構(gòu)建與使用,能夠在程序中熟練地構(gòu)建和使用模塊10.2.1模塊的構(gòu)建與使用Python中的模塊本質(zhì)上是一個(gè)包含Python代碼片段的.py文件,模塊的名稱就是文件的名稱。假設(shè)現(xiàn)有文件test.py,該文件中定義了一個(gè)函數(shù),具體代碼如下:defadd(a,b):returna+btest.pytest.py就是一個(gè)Python模塊,test就是模塊的名稱。10.2.1模塊的構(gòu)建與使用通過import語句或from?import?語句可以導(dǎo)入模塊,只有導(dǎo)入模塊后,才能使用其中定義的功能。例如,使用test模塊中定義的add()函數(shù),示例代碼如下:importtest#導(dǎo)入模塊result=test.add(11,22)#使用模塊中定義的函數(shù)print(result)示例10.2.1模塊的構(gòu)建與使用模塊不僅可以導(dǎo)入到程序中使用,也可以直接作為腳本運(yùn)行。為了確保模塊的功能與預(yù)期相符,實(shí)際開發(fā)中開發(fā)人員通常會(huì)在模塊文件中添加一些測試代碼,對(duì)功能代碼進(jìn)行測試。下面以test模塊為例,在其中添加一些測試代碼來檢測add()函數(shù)的功能是否符合預(yù)期,示例代碼如下:defadd(a,b):#功能代碼returna+bresult=add(22,33)#測試代碼print('functiontest:12+22=%d'%result)示例10.2.1模塊的構(gòu)建與使用將test模塊作為腳本直接執(zhí)行,方可通過測試代碼測試add()函數(shù)的功能。但此時(shí)會(huì)出現(xiàn)一個(gè)問題,在其他文件中導(dǎo)入test模塊,模塊中的測試代碼會(huì)在其他文件執(zhí)行時(shí)一并執(zhí)行。例如,導(dǎo)入test模塊,使用該模塊中的add()函數(shù)。importtestresult=test.add(11,22)print(result)示例10.2.1模塊的構(gòu)建與使用Python為模塊定義了一個(gè)__name__變量。在模塊中對(duì)__name__屬性的取值進(jìn)行判斷:當(dāng)__name__的取值為“__main__”時(shí),說明模塊以腳本形式執(zhí)行;否則說明模塊被導(dǎo)入了其他程序。根據(jù)此原理對(duì)模塊進(jìn)行修改,修改后的代碼如下:#功能代碼defadd(a,b):returna+b#判斷__name__變量的值是否等于__main__if__name__=='__main__':result=add(22,33)print('functiontest:12+22=%d'%result)示例
先定一個(gè)小目標(biāo)!熟悉包的構(gòu)建與導(dǎo)入,能夠在程序中熟練地構(gòu)建與導(dǎo)入包10.2.2包的構(gòu)建與導(dǎo)入Python中的包是一個(gè)目錄,該目錄中包含了一組相關(guān)的模塊和子包。為了構(gòu)建一個(gè)包,需要在目錄中創(chuàng)建一個(gè)名為__init__.py的文件,這個(gè)文件可以是空的,也可以包含一些初始化代碼。10.2.2包的構(gòu)建與導(dǎo)入package是包的根目錄,它包含了一個(gè)必需的__init__.py文件,以及其他一些模塊或子包。其中,module.py是位于根目錄下的一個(gè)模塊文件;package_a是一個(gè)位于根目錄下的子包,它內(nèi)部包含一個(gè)模塊文件module_a.py,以及一個(gè)必需的__init__.py文件;package_b是另一個(gè)子包,它內(nèi)部包含一個(gè)模塊文件module_b.py。同樣,該子包也有一個(gè)必需的__init__.py文件。10.2.2包的構(gòu)建與導(dǎo)入若想在當(dāng)前程序中導(dǎo)入整個(gè)包package_a,可以使用以下方式完成:10.2.2包的構(gòu)建與導(dǎo)入importpackage_a若想在當(dāng)前程序中導(dǎo)入整個(gè)包package_a,可以使用以下方式完成:importpackage_a.module #方式一frompackage_aimportmodule #方式二若想在當(dāng)前程序中導(dǎo)入整個(gè)包package_a,可以使用以下方式完成:importpackage.package_a.module_a #方式一frompackage.package_aimportmodule_a#方式二
先定一個(gè)小目標(biāo)!了解生態(tài)庫的發(fā)布,能夠復(fù)述自定義庫的發(fā)布流程10.2.3生態(tài)庫的發(fā)布Python中的第三方庫是由Python使用者自行編寫與發(fā)布的模塊或包,同樣的,我們也可以將自己編寫的模塊與包作為庫發(fā)布。(1)在與待發(fā)布的包同級(jí)的目錄中創(chuàng)建setup.py文件。以包package為例,在包package所在的目錄下創(chuàng)建setup.py文件,此時(shí)的目錄結(jié)構(gòu)如圖所示。10.2.3生態(tài)庫的發(fā)布(2)編輯setup.py文件,在該文件中設(shè)置包中包含的模塊,示例代碼如下:10.2.3生態(tài)庫的發(fā)布fromdistutils.coreimportsetupsetup(name='lib_test',version='1.0',description='functionpackage',author='itcast',py_modules=['package.module','package.package_a.module_a','package.package_b.module_b'])(3)在setup.py文件所在目錄下打開命令行窗口,使用Python命令構(gòu)建Python庫,具體命令如下:10.2.3生態(tài)庫的發(fā)布pythonsetup.pybuild 語法格式構(gòu)建完成后,此時(shí)的目錄結(jié)構(gòu)如圖所示。(4)在setup.py文件所在目錄下打開命令行窗口,使用Python命令創(chuàng)建庫的安裝包,具體命令如下:10.2.3生態(tài)庫的發(fā)布pythonsetup.pysdist語法格式創(chuàng)建完成后,此時(shí)的目錄結(jié)構(gòu)如圖所示。dist目錄下.tar.gz格式的文件即為通過Python命令生成的庫的安裝包。此時(shí)可以將這個(gè)安裝包分享給他人,或者發(fā)布到公眾平臺(tái),便可完成庫的發(fā)布。他人在獲取此安裝包后對(duì)其解壓,并在setup.py文件所在目錄執(zhí)行安裝命令,便可安裝我們發(fā)布的庫。安裝命令如下:10.2.3生態(tài)庫的發(fā)布pythonsetup.pyinstall語法格式常用的內(nèi)置Python庫10.3
先定一個(gè)小目標(biāo)!10.3.1time庫掌握常用內(nèi)置庫的基本用法,能夠使用time庫實(shí)現(xiàn)處理時(shí)間在程序開發(fā)中,有許多場景需要根據(jù)時(shí)間選擇不同的處理方式,比如游戲的防沉迷系統(tǒng)、外賣平臺(tái)的店鋪營業(yè)狀態(tài)管理等。Python提供了一些與時(shí)間處理相關(guān)的內(nèi)置庫,包括time、datetime和calendar。其中,time是比較基礎(chǔ)的時(shí)間處理庫。10.3.1time庫10.3.1time庫1.time()函數(shù)time()函數(shù)用于獲取當(dāng)前的時(shí)間戳,它的返回值是一個(gè)浮點(diǎn)數(shù)。其中時(shí)間戳是指從世界標(biāo)準(zhǔn)時(shí)間的1970年1月1日00:00:00到當(dāng)前時(shí)間的總秒數(shù)。time()函數(shù)的使用示例如下所示:importtimeprint(time.time())#獲取時(shí)間戳需要注意的是,time()函數(shù)返回的時(shí)間戳與系統(tǒng)時(shí)間相關(guān),每次運(yùn)行以上代碼后得到的時(shí)間戳可能會(huì)有所出入,因此以上結(jié)果僅作參考。10.3.1time庫2.localtime()與gmtime()函數(shù)雖然以時(shí)間戳形式表示的時(shí)間是一種有效的計(jì)時(shí)方式,但對(duì)于人類而言卻較為抽象,難以直觀理解。為此,Python提供了兩個(gè)函數(shù):localtime()和gmtime(),用于獲取結(jié)構(gòu)化時(shí)間,從而幫助我們更直觀地了解時(shí)間的各個(gè)部分。localtime()和gmtime()函數(shù)的語法格式如下:以上格式中的參數(shù)secs是一個(gè)以浮點(diǎn)數(shù)表示的時(shí)間戳,若省略該參數(shù),默認(rèn)使用time()函數(shù)獲取的時(shí)間戳。localtime([secs])gmtime([secs])語法格式localtime()和gmtime()函數(shù)都能將時(shí)間戳轉(zhuǎn)換為以元組表示的時(shí)間對(duì)象(struct_time),不過localtime()得到的是本地時(shí)間,而gmtime()得到的是世界統(tǒng)一時(shí)間(UniversalTimeCoordinated,縮寫為UTC)。10.3.1time庫使用localtime()函數(shù)獲取結(jié)構(gòu)化時(shí)間,具體代碼如下:importtimeprint(time.localtime())#獲取結(jié)構(gòu)化時(shí)間,默認(rèn)使用當(dāng)前時(shí)間的時(shí)間戳print(time.localtime(34.54))#獲取結(jié)構(gòu)化時(shí)間,使用指定的時(shí)間戳使用gmtime()函數(shù)獲取結(jié)構(gòu)化時(shí)間,具體代碼如下:10.3.1time庫importtimeprint(time.gmtime())print(time.gmtime(34.54))時(shí)間對(duì)象其實(shí)是一個(gè)元組,元組包含9項(xiàng)元素,各項(xiàng)元素的含義與取值如表所示。10.3.1time庫元素含義取值tm_year年4位數(shù)字tm_mon月1~12tm_mday日1~31tm_hour時(shí)0~23tm_min分0~59元素含義取值tm_sec秒0~61,60或61是閏秒tm_wday一周的第幾日0~6,0為周一,其他數(shù)字依此類推tm_yday一年的第幾日1~366tm_isdst夏令時(shí)1表示夏令時(shí),0表示非夏令時(shí),-1表示不確定10.3.1time庫3.strftime()和asctime()函數(shù)無論是采用浮點(diǎn)數(shù)還是元組形式表示的時(shí)間,其實(shí)都不符合人們的認(rèn)知習(xí)慣。人們?nèi)粘=佑|的時(shí)間,常見表示形式有“2023-02-2812:30:45”、“12/31/202312:30:45”和“2023年12月31日12:30:45”。為了方便人們理解時(shí)間信息,Python提供了strftime()和asctime()函數(shù),用于返回格式化后的時(shí)間字符串。(1)strftime()函數(shù)strftime()函數(shù)用于將時(shí)間對(duì)象按照指定格式轉(zhuǎn)換為可讀性強(qiáng)的時(shí)間字符串,該函數(shù)的語法格式如下:10.3.1time庫strftime(format,p_tuple=None)語法格式上述語法格式中,參數(shù)format表示時(shí)間格式的字符串,字符串中包含一些時(shí)間格式控制符;參數(shù)p_tuple為時(shí)間對(duì)象,默認(rèn)值為當(dāng)前時(shí)間,即localtime()函數(shù)返回的時(shí)間對(duì)象。時(shí)間格式控制符是time庫預(yù)定義的,用于控制不同時(shí)間或時(shí)間成分的顯示格式,time庫中常用的時(shí)間格式控制符及其功能說明如表所示。10.3.1time庫時(shí)間格式控制符說明%Y四位數(shù)的年份,取值范圍為0001~9999%m兩位數(shù)的月份,取值范圍為01~12%d月中的兩位數(shù)的日期表示,比如01%B本地完整的月份名稱,比如January%b月份的簡寫,比如Jan%a星期的簡寫,比如Mon10.3.1time庫時(shí)間格式控制符是time庫預(yù)定義的,用于控制不同時(shí)間或時(shí)間成分的顯示格式,time庫中常用的時(shí)間格式控制符及其功能說明如表所示。時(shí)間格式控制符說明%A星期的全名,比如,Monday%H24小時(shí)制的小時(shí)數(shù),取值范圍為0~23%l12小時(shí)制的小時(shí)數(shù),取值范圍為01~12%p上午或下午,取值分別為AP或PM%M兩位數(shù)的分鐘數(shù),取值范圍為00~59%S兩位數(shù)的秒數(shù),取值范圍為00~59使用strftime()格式化時(shí)間字符串,將當(dāng)前時(shí)間對(duì)應(yīng)的時(shí)間對(duì)象按照“年-月-日時(shí):分:秒”格式輸出,示例如下:importtimenow_string=time.strftime("%Y-%m-%d%H:%M:%S")print(now_string)10.3.1time庫若只使用部分時(shí)間格式控制符,可僅對(duì)時(shí)間信息中的相關(guān)部分進(jìn)行格式化與輸出。例如只設(shè)定控制時(shí)分秒的3個(gè)格式符,則只輸出24小時(shí)制的時(shí)分秒,示例代碼如下:importtimenow_string=time.strftime("%Y-%m-%d%H:%M:%S")print(now_string)使用asctime()函數(shù)返回格式化的時(shí)間字符串,示例代碼如下:10.3.1time庫importtimenow_string=time.asctime()print(now_string)gmtime=time.gmtime()print(time.asctime(gmtime))10.3.1time庫4.ctime()函數(shù)ctime()函數(shù)用于將一個(gè)時(shí)間戳轉(zhuǎn)換為“SatJan1321:56:342018”這種形式的時(shí)間字符串,結(jié)果等同于time.asctime()函數(shù),若ctime()函數(shù)沒有傳入任何參數(shù),則默認(rèn)將調(diào)用time()函數(shù)的結(jié)果作為參數(shù)。示例代碼如下:importtimeprint(time.ctime())print(time.ctime(36.36))10.3.1time庫5.strptime()函數(shù)strptime()函數(shù)用于將格式化的時(shí)間字符串轉(zhuǎn)化為時(shí)間對(duì)象,該函數(shù)可以看作是strftime()函數(shù)的反向操作。strptime()函數(shù)的語法格式如下:strptime(string,format)語法格式string:表示格式化的時(shí)間字符串,format:表示包含時(shí)間格式控制符的字符串,string與format使用的格式必須統(tǒng)一。importtimeprint(time.strptime('Sat,11Apr202311:54:42','%a,%d%b%Y%H:%M:%S'))print(time.strptime('11:54:42','%H:%M:%S'))10.3.1time庫6.sleep()函數(shù)sleep()函數(shù)可讓調(diào)用該函數(shù)的程序進(jìn)入睡眠態(tài),即讓其暫時(shí)掛起,等待一定時(shí)間后再繼續(xù)執(zhí)行。sleep()函數(shù)接收一個(gè)以秒為單位的浮點(diǎn)數(shù)作為參數(shù),使用該參數(shù)控制程序掛起的時(shí)長。使用sleep()函數(shù)讓程序沉睡3秒,示例代碼如下:importtimeprint('開始')time.sleep(3)print('結(jié)束')importtimetime_a=time.time()time.sleep(3.5)time_b=time.time()print(time_a+time_b)print(time_b-time_a)10.3.1time庫若要對(duì)非時(shí)間戳形式表示的時(shí)間進(jìn)行計(jì)算,在計(jì)算之前可以先將其轉(zhuǎn)換為時(shí)間戳形式。各形式之間的轉(zhuǎn)換方式如圖所示。
先定一個(gè)小目標(biāo)!10.3.2random庫掌握常用內(nèi)置庫的基本用法,能夠使用random庫生成隨機(jī)數(shù)10.3.2random庫random是Python內(nèi)置的標(biāo)準(zhǔn)庫,在程序中導(dǎo)入該庫,可利用庫中的函數(shù)生成隨機(jī)數(shù)據(jù)。random庫中常用的函數(shù)如表所示。函數(shù)功能說明random()用于生成一個(gè)隨機(jī)浮點(diǎn)數(shù)n,n的取值范圍是0.0<=n<1.0uniform(a,b)用于生成一個(gè)指定范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)n,若a<b,則n的取值范圍是a<=n<=b;若a>b,則n的取值范圍是b<=n<=arandint(a,b)用于生成一個(gè)指定范圍內(nèi)的整數(shù)n,n的取值范圍是a<=n<=brandrange([start,]stop[,step])生成一個(gè)按指定基數(shù)遞增的序列,再從該序列中獲取一個(gè)隨機(jī)數(shù)。start參數(shù)表示范圍的起始值,包含在范圍內(nèi);stop參數(shù)表示范圍的結(jié)束值,不包含在范圍內(nèi);step參數(shù)是可選的,表示基數(shù),默認(rèn)值為1choice(sequence)從序列中獲取一個(gè)隨機(jī)元素,參數(shù)sequence接收一個(gè)序列類型shuffle(x[,random])將序列x中的元素隨機(jī)排列sample(sequence,k)從指定序列中獲取長度為k的片段,隨機(jī)排列后返回新的序列10.3.2random庫使用random庫中常用的函數(shù)生成各種各樣的隨機(jī)數(shù)。importrandomprint(random.random()) #生成[0.0,1.0)范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)print(random.uniform(3,5))#生成[3.0,5.0]范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)print(random.randint(2,8))#生成[2,8]范圍內(nèi)的隨機(jī)整數(shù)print(random.randrange(10))#生成[0,10)范圍內(nèi)的隨機(jī)整數(shù)print(random.randrange(1,10,2))#隨機(jī)返回1、3、5、7、9中的一個(gè)元素#隨機(jī)返回序列中的一個(gè)元素print(random.choice(['Python','C','PHP','Java']))ls=['Python','C','PHP','Java']random.shuffle(ls)print(ls) #從序列中獲取長度為3的片段,隨機(jī)排序后返回新的序列print(random.sample(('Python','C','PHP','Java'),k=3))
先定一個(gè)小目標(biāo)!掌握常用內(nèi)置庫的基本用法,能夠使用turtle庫實(shí)現(xiàn)繪制圖形的功能10.3.3Trultle庫Turtle(海龜)是Python內(nèi)置的一個(gè)標(biāo)準(zhǔn)庫,它提供了繪制線、圓以及其他形狀的函數(shù),使用該庫可以創(chuàng)建圖形窗口,在圖形窗口中通過簡單重復(fù)動(dòng)作直觀地繪制界面與圖形。turtle庫的邏輯非常簡單,利用該庫提供的一系列函數(shù),用戶可以像使用筆在紙上繪圖一樣在畫布上繪制圖形。10.3.3Trultle庫1.創(chuàng)建圖形窗口圖形窗口也稱為畫布(canas)。使用turtle庫繪制圖形化界面需要先使用setup()函數(shù)創(chuàng)建圖形窗口,該函數(shù)的語法格式如下:setup(width,height,startx=None,starty=None)語法格式width、height:分別表示窗口寬度、高度,startx、starty參數(shù):表示窗口在計(jì)算機(jī)屏幕上的橫坐標(biāo)和縱坐標(biāo)。width、height:取值可以是整數(shù)或小數(shù),值為整數(shù)時(shí)表示以像素為單位的尺寸,值為小數(shù)時(shí)表示圖形窗口的寬或高與屏幕的比例startx、starty:取值可以為整數(shù)或None,取值為整數(shù)時(shí),表示圖形窗口左側(cè)到屏幕左側(cè)的距離或圖形窗口頂部到屏幕頂部的距離,單位為像素;取值為None時(shí),窗口位于屏幕中心。10.3.3Trultle庫使用remove()函數(shù)刪除文件a.txt的示例使用remove()函數(shù)刪除文件a.txt的示例10.3.3Trultle庫使用setup()函數(shù)創(chuàng)建一個(gè)寬800像素、高600像素的圖形窗口,示例代碼如下:importturtleturtle.setup(800,600)10.3.3Trultle庫需要說明的是,使用turtle庫實(shí)現(xiàn)圖形化界面時(shí)setup()函數(shù)并不是必須的,如果程序中沒有調(diào)用setup()函數(shù),程序執(zhí)行時(shí)會(huì)生成一個(gè)默認(rèn)窗口。另外,通過turtle庫的title()函數(shù)可以為窗口設(shè)置標(biāo)題,如此每次打開的窗口左上角都會(huì)顯示指定的標(biāo)題。使用turtle庫繪制圖形完畢后,應(yīng)調(diào)用turtle庫的done()函數(shù)通知圖形窗口繪制結(jié)束,不過圖形窗口仍然處于打開狀態(tài),直到用戶手動(dòng)關(guān)閉圖形窗口時(shí)才會(huì)退出,示例如下:importturtleturtle.setup(800,600)#創(chuàng)建圖形窗口turtle.done()#繪制結(jié)束10.3.3Trultle庫2.設(shè)置畫筆畫筆(pen)的設(shè)置包括畫筆屬性和畫筆狀態(tài)的設(shè)置,其中畫筆屬性包括尺寸、顏色等,畫筆狀態(tài)包括提起、放下等。turtle庫中定義了用于設(shè)置畫筆屬性和畫筆狀態(tài)的函數(shù)。(1)畫筆屬性的相關(guān)函數(shù)turtle庫中用于設(shè)置畫筆屬性的函數(shù)主要有3個(gè),分別是pensize()、speed()和color(),pensize()函數(shù)用于設(shè)置畫筆尺寸,speed()函數(shù)用于設(shè)置設(shè)置畫筆移動(dòng)的速度,color()函數(shù)用于設(shè)置畫筆顏色。這3個(gè)函數(shù)的語法格式如下。pensize(<width>)#設(shè)置畫筆尺寸speed(speed)#設(shè)置畫筆移動(dòng)的速度color(color) #設(shè)置畫筆顏色語法格式10.3.3Trultle庫2.設(shè)置畫筆pensize()函數(shù)的參數(shù)width表示畫筆的尺寸,即畫筆繪制出線條的寬度,若該參數(shù)為空,則pensize()函數(shù)返回畫筆當(dāng)前的尺寸。speed()函數(shù)的參數(shù)speed表示畫筆移動(dòng)的速度,該參數(shù)的取值為0~10的整數(shù),包括0和10在內(nèi),整數(shù)越大,速度越快。color()函數(shù)的參數(shù)color用于設(shè)置畫筆的顏色,該參數(shù)的值有以下幾種表示方式:字符串。如“red”、“orange”、“yellow”、“green”。RGB顏色。此種方式又分為RGB整數(shù)值和RGB小數(shù)值兩種,RGB整數(shù)值如(255,255,255)、(190,213,98),RGB小數(shù)值如(1,1,1)、(0.65,0.7,0.9)。十六進(jìn)制顏色。如“#FFFFFF”、“#0060F6”。10.3.3Trultle庫常見顏色的各種表現(xiàn)形式及其對(duì)應(yīng)關(guān)系如表所示。顏色字符串顏色值RGB整數(shù)值RGB小數(shù)值十六進(jìn)制顏色值白色white(255,255,255)(1,1,1)#FFFFFF黃色yellow(255,255,0)(1,1,0)#FFFF00洋紅magenta(255,0,255)(1,0,1)#FF00FF青色cyan(0,255,255)(0,1,1)#00FFFF藍(lán)色blue(0,0,255)(0,0,1)#0000FF黑色black(0,0,0)(0,0,0)#00000010.3.3Trultle庫常見顏色的各種表現(xiàn)形式及其對(duì)應(yīng)關(guān)系如表所示。顏色字符串顏色值RGB整數(shù)值RGB小數(shù)值十六進(jìn)制顏色值淡粉色seashell(255,245,238)(1,0.96,0.93)#FFF5EE金色gold(255,215,0)(1,0.84.0)#FFD700粉紅色pink(255,192,203)(1,0.75,0.80)#FFC0CB棕色brown(165,42,42)(0.65,0.16,0.16)#A52A2A紫色purple(160,32,240)(0.63,0.13,0.94)#A020F0番茄色tomato(255,99,71)(1,0.39,0.28)#FF634710.3.3Trultle庫字符串、十六進(jìn)制形式的顏色值都可以直接傳入color()函數(shù)的color參數(shù),以將畫筆的顏色設(shè)置為指定的顏色,示例代碼如下:importturtleturtle.color('pink')turtle.color('#A22A2A')turtle.done()10.3.3Trultle庫使用RGB形式的顏色值之前,需要先使用colormode()函數(shù)設(shè)置顏色模式。colormode()函數(shù)需要接收一個(gè)cmode參數(shù),該參數(shù)支持兩種取值:1.0或255,其中1.0表示使用RGB小數(shù)值,即RGB形式的顏色值位于0.0~1.0之間;255表示使用RGB整數(shù)值,即RGB形式的顏色值位于0~255之間。示例代碼如下:importturtleturtle.colormode(1.0) #使用RGB小數(shù)值turtle.color((1,1,0))turtle.colormode(255) #使用RGB整數(shù)值turtle.color((165,42,42))turtle.done()10.3.3Trultle庫(2)畫筆狀態(tài)的相關(guān)函數(shù)正如在紙上畫圖一樣,Turtle中的畫筆分為提起(UP)和放下(DOWN)兩種狀態(tài)。只有畫筆為放下狀態(tài)時(shí),移動(dòng)畫筆,畫布上才會(huì)留下痕跡。Turtle中的畫筆默認(rèn)為放下狀態(tài)。使用penup()函數(shù)用于提起畫筆,使用pendown()函數(shù)用于放下畫筆。修改畫筆狀態(tài)的示例代碼如下。importturtleturtle.penup() #提起畫筆turtle.pendown() #放下畫筆turtle.done()turtle庫中為penup()和pendown()函數(shù)定義了別名,penup()函數(shù)的別名為pu(),pendown()函數(shù)的別名為pd()。10.3.3Trultle庫3.繪制圖形在畫筆狀態(tài)為放下時(shí),通過移動(dòng)畫筆可以在畫布上繪制圖形。此時(shí)可以將畫筆想象成一只海龜(這也是turtle庫名字的由來):海龜落在畫布上,它可以向前、向后、向左、向右移動(dòng),海龜爬動(dòng)時(shí)在畫布上留下痕跡,痕跡即為所繪圖形。為了使圖形出現(xiàn)在理想的位置,我們需要了解Turtle的坐標(biāo)體系。Turtle坐標(biāo)體系以窗口中心為原點(diǎn),以右方為默認(rèn)朝向,以原點(diǎn)右側(cè)為x軸正方向,原點(diǎn)上方為y軸正方向。Turtle的坐標(biāo)體系如圖所示。10.3.3Trultle庫如果希望在畫布上繪制想要的圖形,需要知道如何通過turtle庫的函數(shù)控制畫筆。turtle庫中控制畫筆的函數(shù)主要有3種,分別是移動(dòng)控制函數(shù)、角度控制函數(shù)和圖形繪制函數(shù)。(1)移動(dòng)控制函數(shù)移動(dòng)控制函數(shù)包括forward()、backward()和goto()函數(shù),分別用于控制畫筆向前、向后或者向指定位置移動(dòng),這些函數(shù)的語法格式如下。forward(distance) #向前移動(dòng)backward(distance) #向后移動(dòng)goto(x,y=None) #移動(dòng)到指定位置函數(shù)forward()和backward()的參數(shù)distance用于指定畫筆移動(dòng)的距離,單位為像素;函數(shù)goto()用于將畫筆移動(dòng)到畫布上指定的位置,該函數(shù)的參數(shù)x、y分別接收表示目標(biāo)位置的橫坐標(biāo)和縱坐標(biāo),也可以僅接收一個(gè)表示坐標(biāo)的向量。10.3.3Trultle庫(2)角度控制函數(shù)角度控制函數(shù)用于更改畫筆朝向,包括right()、left()和seth(),其中right()或left()函數(shù)函數(shù)用于向右或向左轉(zhuǎn)動(dòng)畫筆,使畫筆朝向順時(shí)針或逆時(shí)針方向旋轉(zhuǎn)指定的角度;seth()函數(shù)用于設(shè)置畫筆朝向?yàn)橹付ń嵌?。這些函數(shù)的語法格式如下。right(degree)#向右轉(zhuǎn)動(dòng)畫筆left(degree)#向左轉(zhuǎn)動(dòng)畫筆seth(angle)#轉(zhuǎn)動(dòng)到指定角度10.3.3Trultle庫函數(shù)right()和left()的參數(shù)degree用于指定畫筆向右與向左轉(zhuǎn)動(dòng)的角度,單位為度數(shù)。函數(shù)seth()的參數(shù)angle用于指定畫筆朝向的角度。angle以x軸正向?yàn)?°,以逆時(shí)針方向?yàn)檎?,角度?°逐漸增大;以順時(shí)針方向?yàn)樨?fù),角度從0°逐漸減小,角度與坐標(biāo)系的關(guān)系如圖所示。10.3.3Trultle庫若要使畫筆向左或向右移動(dòng)某段距離,應(yīng)先調(diào)整好畫筆角度,再使用移動(dòng)函數(shù)。例如,繪制一個(gè)邊長為200像素的正方形,具體代碼如下:importturtleturtle.forward(200)#向前移動(dòng)200像素turtle.seth(-90)#調(diào)整畫筆朝向,使其朝向-90°方向turtle.forward(200)#向前移動(dòng)200像素turtle.right(90)#調(diào)整畫筆朝向,向右轉(zhuǎn)動(dòng)90°turtle.forward(200)#向前移動(dòng)200像素turtle.left(-90)#調(diào)整畫筆朝向,向左轉(zhuǎn)動(dòng)-90°,即向右轉(zhuǎn)動(dòng)90°turtle.forward(200)#向前移動(dòng)200像素turtle.right(90)#調(diào)整畫筆朝向,向右轉(zhuǎn)動(dòng)90°turtle.done()10.3.3Trultle庫執(zhí)行代碼后,繪制的正方形如圖所示。10.3.3Trultle庫(3)圖形繪制函數(shù)turtle庫中提供了circle()函數(shù),使用該函數(shù)可繪制以當(dāng)前坐標(biāo)為圓心,以指定像素值為半徑的圓或弧。circle()函數(shù)的語法格式如下:circle(radius,extent=None,steps=None)語法格式函數(shù)circle()的參數(shù)radius用于設(shè)置半徑,extent用于設(shè)置弧的角度。radius和extent的取值可以是正數(shù),也可以是負(fù)數(shù),具體可以分成以下幾種情況:當(dāng)radius為正數(shù)時(shí),畫筆以原點(diǎn)為起點(diǎn)向上繪制弧線;radius為負(fù)數(shù)時(shí),畫筆以原點(diǎn)為起點(diǎn)向下繪制弧線。當(dāng)extent為正數(shù)時(shí),畫筆以原點(diǎn)為起點(diǎn)向右繪制弧線;extent為負(fù)數(shù)時(shí),畫筆以原點(diǎn)為起點(diǎn)向左繪制弧線。10.3.3Trultle庫假設(shè)繪制半徑為90或-90、角度為60°或-60°的弧線,繪制效果如圖所示。參數(shù)steps用于設(shè)置正多邊形的邊數(shù),它的取值可以是整數(shù)或None,默認(rèn)值為None,表示繪制一個(gè)完整的圓形。若參數(shù)steps的值為正數(shù),則使用circle()函數(shù)可以繪制一個(gè)有N條邊的正多邊形;若參數(shù)steps的值為負(fù)數(shù),則使用circle()函數(shù)不會(huì)繪制圖形。例如,在程序中寫入“turtle.circle(100,steps=3)”,程序?qū)⒗L制一個(gè)邊長為100像素的等邊三角形。10.3.3Trultle庫(4)圖形填充turtle庫中可通過fillcolor()函數(shù)設(shè)置填充顏色,使用begin_fill()函數(shù)和end_fill()函數(shù)填充圖形,實(shí)現(xiàn)“面”的繪制。以繪制一個(gè)填充為藍(lán)色的圓為例,具體代碼如下:importturtleturtle.fillcolor("blue")#設(shè)置填充顏色為藍(lán)色turtle.begin_fill()#開始填充turtle.circle(150)turtle.end_fill()#填充結(jié)束turtle.done()實(shí)訓(xùn)案例10.4
先定一個(gè)小目標(biāo)!10.4.1繪制彩虹根據(jù)任務(wù)描述實(shí)現(xiàn)案例:繪制彩虹本案例要求編寫程序,通過turtle庫繪制彩虹的形狀,效果如圖所示。10.4.1繪制彩虹
先定一個(gè)小目標(biāo)!10.4.1二十四節(jié)氣倒計(jì)時(shí)根據(jù)任務(wù)描述實(shí)現(xiàn)案例:二十四節(jié)氣倒計(jì)時(shí)10.4.1二十四節(jié)氣倒計(jì)時(shí)作為全球唯一的“雙奧之城”,北京歷經(jīng)十幾年的發(fā)展,讓一個(gè)陽光、富強(qiáng)、開放、自信的中國再次受到了世界的關(guān)注,這一時(shí)刻定將銘刻在歷史長河中。作為中國人,我們?yōu)樽约旱膰腋械阶院莉湴痢?022年北京冬季奧運(yùn)會(huì)推出了一系列與中國文化融合的活動(dòng),其中“二十四節(jié)氣倒計(jì)時(shí)”彰顯著中國文化的獨(dú)特魅力。二十四節(jié)氣代表著一年的時(shí)光輪回,用它們來倒計(jì)時(shí),體現(xiàn)了我們國家人民對(duì)時(shí)間的理解,中華文化的智慧和思想。10.4.1二十四節(jié)氣倒計(jì)時(shí)本案例要求運(yùn)用前面所學(xué)的知識(shí),編寫一個(gè)二十四節(jié)氣倒計(jì)時(shí)程序,整個(gè)程序主要分為引導(dǎo)語和倒計(jì)時(shí)兩部分,引導(dǎo)語部分用于展示中文和英文的引導(dǎo)語,倒計(jì)時(shí)部分用于展示倒計(jì)時(shí)數(shù)字、某個(gè)節(jié)氣的名稱以及的古詩詞,每隔一秒會(huì)切換到下一個(gè)節(jié)氣的名稱以及對(duì)應(yīng)的古詩詞。引導(dǎo)語與倒計(jì)時(shí)的效果如圖所示。常用的第三方Python庫10.5
先定一個(gè)小目標(biāo)!10.5.1jieba庫掌握常用第三方庫的基本用法,能夠使用jieba庫實(shí)現(xiàn)中文分詞jieba庫用于實(shí)現(xiàn)中文分詞,中文分詞即將中文語句或語段拆成若干漢語詞匯。例如,用戶輸入語句“我是一個(gè)學(xué)生”經(jīng)分詞系統(tǒng)處理之后,該語句被分成“我”“是”“一個(gè)”“學(xué)生”這4個(gè)漢語詞匯。jieba支持以下三種分詞模式。(1)精確模式:試圖將句子最精準(zhǔn)地切開。(2)全模式:將句子中所有可以成詞的詞語都掃描出來,速度非???。(3)搜索引擎模式:在精確模式的基礎(chǔ)上對(duì)長詞再次切分,適用于建立搜索引擎的索引。10.5.1jieba庫jieba中針對(duì)以上模式提供了一系列用于實(shí)現(xiàn)分詞的函數(shù),這些分詞函數(shù)及其功能說明如表所示。10.5.1jieba庫函數(shù)功能說明cut(s)以精準(zhǔn)模式對(duì)文本s進(jìn)行分詞,返回一個(gè)可迭代對(duì)象cut(s,cut_all=True)默認(rèn)以全模式對(duì)文本s進(jìn)行分詞,輸出文本s中出現(xiàn)的所有詞cut_for_search(s)以搜索引擎模式對(duì)文本s進(jìn)行分詞lcut(s)以精準(zhǔn)模式對(duì)文本s進(jìn)行分詞,分詞結(jié)果以列表形式返回lcut(s,cut_all=True)以全模式對(duì)文本s進(jìn)行分詞,分詞結(jié)果以列表形式返回lcut_for_search(s)以搜索引擎模式對(duì)文本s進(jìn)行分詞,分詞結(jié)果以列表形式返回通過分詞函數(shù)對(duì)中文語句進(jìn)行分詞,示例代碼如下:10.5.1jieba庫importjiebaseg_list=jieba.cut("我打算到中國科學(xué)研究院圖書館學(xué)習(xí)",cut_all=True)print("【全模式】:"+"/".join(seg_list))#全模式seg_list=jieba.lcut("我打算到中國科學(xué)研究院圖書館學(xué)習(xí)")print("【精確模式】:"+"/".join(seg_list))#精確模式#搜索引擎模式seg_list=jieba.cut_for_search("我打算到中國科學(xué)研究院圖書館學(xué)習(xí)")print("【搜索引擎模式】:"+",".join(seg_list))jieba實(shí)現(xiàn)分詞的基礎(chǔ)是詞庫,jieba的詞庫存儲(chǔ)在jieba庫下的dict文件中,該文件中存儲(chǔ)了中文詞庫以及每個(gè)詞的詞頻、詞性等信息。利用jieba模塊的add_word()函數(shù)可以向詞庫中增加新詞。新詞添加之后,進(jìn)行分詞時(shí)不會(huì)對(duì)該詞進(jìn)行劃分。例如,向中文詞庫中加入詞語“好天氣”,之后再對(duì)一段包含這個(gè)詞語的語句進(jìn)行分詞,具體代碼如下:10.5.1jieba庫jieba.add_word("好天氣")result=jieba.lcut("今天真是個(gè)好天氣")print(result)
先定一個(gè)小目標(biāo)!10.5.2wordcloud庫掌握常用第三方庫的基本用法,能夠使用wordcloud庫繪制詞云10.5.2wordcloud庫wordcloud庫用于生成詞云圖。詞云圖是一種以詞語頻率為基礎(chǔ)的可視化方式,通過將文本中出現(xiàn)頻率較高的詞語以更大的字體展示,從而呈現(xiàn)出詞語在文本中的重要性和流行程度。詞云圖常被用于分析和展示大量文本數(shù)據(jù)的關(guān)鍵詞,幫助人們直觀地了解文本的主題、熱點(diǎn)和關(guān)鍵話題。10.5.2wordcloud庫wordcloud庫會(huì)將文本中詞語出現(xiàn)的頻率作為參數(shù)來繪制詞云,它基于Pillow和Matplotlib庫,支持對(duì)詞云的形狀、顏色和大小等屬性進(jìn)行設(shè)置。利用wordcloud庫生成詞云主要包含三個(gè)步驟:(1)利用WordCloud類的構(gòu)造方法WordCloud()創(chuàng)建詞云對(duì)象。(2)利用WordCloud對(duì)象的generate()方法加載詞云圖用到的文本。(3)利用WordCloud對(duì)象的to_file()方法生成詞云圖。10.5.2wordcloud庫WordCloud()方法在創(chuàng)建詞云對(duì)象時(shí)可通過參數(shù)設(shè)置詞云的屬性,參數(shù)及參數(shù)說明如表所示。函數(shù)功能說明width指定詞云對(duì)象生成圖片的寬度,默認(rèn)為400像素height指定詞云對(duì)象生成圖片的高度,默認(rèn)為200像素min_font_size指定詞云中字體的最小字號(hào),默認(rèn)為4號(hào)max_font_size指定詞云中字體的最大字號(hào),默認(rèn)根據(jù)高度自動(dòng)調(diào)節(jié)font_step指定詞云中字體字號(hào)的步間隔,默認(rèn)為110.5.2wordcloud庫WordCloud()方法在創(chuàng)建詞云對(duì)象時(shí)可通過參數(shù)設(shè)置詞云的屬性,參數(shù)及參數(shù)說明如表所示。函數(shù)功能說明font_path指定字體文件的路徑,默認(rèn)為當(dāng)前路徑max_words指定詞云顯示的最大單詞數(shù)量,默認(rèn)為200stop_words指定詞云的排除詞列表,即不顯示的單詞列表background_color指定詞云圖片的背景顏色,默認(rèn)為黑色mask指定詞云形狀,默認(rèn)為長方形10.5.2wordcloud庫generate()方法需要接收一個(gè)字符串作為參數(shù),字符串中的內(nèi)容便是詞云圖用到的文本。若字符串中的內(nèi)容全部為漢字,那么在創(chuàng)建詞云對(duì)象時(shí)必須通過font_path參數(shù)指定字體文件的路徑,不指定的話將無法正常顯示漢字。to_file()方法用于以圖片形式輸出詞云圖,該方法接收一個(gè)表示圖片文件名的字符串作為參數(shù),圖片的格式可以為PNG或JPEG格式。以xiyouji.txt文件的內(nèi)容為例,簡單演示通過wordcloud庫繪制詞云圖的基本過程,具體代碼如下:importwordcloud#創(chuàng)建詞云對(duì)象w=wordcloud.WordCloud(font_path='AdobeHeitiStd-Regular.otf',max_words=500,max_font_size=40,background_color='white')file=open(r'xiyouji.txt',encoding='utf-8')#加載詞云圖用到的文本string=file.read()file.close()w.generate(string)#生成詞云圖w.to_file('xiyou.jpg')10.5.2wordcloud庫生成了詞云圖片xiyou.jpg,如圖所示。10.5.2wordcloud庫在網(wǎng)絡(luò)上見到的詞云圖往往是形狀各異的,但上面示例生成的詞云圖只是尋常的長方形。如果想生成如網(wǎng)絡(luò)詞云一樣以其他圖片作為外型的詞云圖,需要先利用Pillow庫中Image模塊的open()函數(shù)加載圖片文件,open()函數(shù)的語法格式如下:10.5.2wordcloud庫open(fp,mode="r",formats=None)語法格式fp:表示圖片文件名,它可以取值為包含文件名稱的字符串等。mode:表示打開圖片文件的模式,如果給定值,則參數(shù)的值必須為r。formats:表示試圖加載文件的格式,它的值是一個(gè)包含格式的列表或元組。open()函數(shù)加載圖片文件后會(huì)返回一個(gè)圖片對(duì)象,該對(duì)象無法直接傳遞給WordCloud()方法的mask參數(shù),而是需要先使用numpy庫的array()函數(shù)將圖片對(duì)象轉(zhuǎn)換成數(shù)組,再將這個(gè)數(shù)組傳遞給mask參數(shù)。需要說明的是,以上提到了兩個(gè)庫:Pillow和numpy,這兩個(gè)庫都需要提前安裝到當(dāng)前的開發(fā)環(huán)境中,具體安裝命令如下:10.5.2wordcloud庫pipinstallPillow==9.5.0pipinstallnumpy==1.24.3安裝命令以xiyouji.txt文件和孫悟空?qǐng)D片wukong.png為例,演示如何通過wordcloud庫生成其他形狀的詞云圖片。10.5.2wordcloud庫importwordcloudimportnumpyasnpfromPILimportImagepicture=Image.open("wukong.png")mk=np.array(picture)w=wordcloud.WordCloud(font_path='AdobeHeitiStd-Regular.otf',mask=mk,max_words=500,background_color='white')file=open(r'xiyouji.txt',encoding='utf-8')string=file.read()file.close()w.generate(string)w.to_file('xiyou.jpg')生成了詞云圖片xiyou.jpg,如圖所示。10.5.2wordcloud庫
先定一個(gè)小目標(biāo)!10.5.3Pygame庫掌握常用第三方庫的基本用法,能夠使用Pygame庫制作小游戲Pygame是為開發(fā)2D游戲而設(shè)計(jì)的Python跨平臺(tái)模塊,開發(fā)人員利用Pygame模塊中定義的函數(shù)可以方便快捷地實(shí)現(xiàn)諸如圖形用戶界面創(chuàng)建、圖形和圖像繪制、用戶鍵盤和鼠標(biāo)操作的監(jiān)聽以及播放音頻等游戲中常用的功能。10.5.3Pygame庫1.Pygame的初始化和退出Pygame庫根據(jù)不同的開發(fā)需求定義了各種子模塊,包括顯示模塊、字體模塊、混音器模塊等。在使用一些子模塊之前,需要進(jìn)行初始化,比如字體模塊。為了簡化開發(fā)流程,Pygame提供了以下兩個(gè)函數(shù):init()函數(shù):用于一次性初始化Pygame的所有模塊,如此開發(fā)人員無需再單獨(dú)調(diào)用每個(gè)子模塊的初始化方法,便可以直接使用所有子模塊。quit()函數(shù):用于卸載所有之前被初始化的Pygame模塊。盡管Python解釋器在程序退出時(shí)會(huì)自動(dòng)釋放已經(jīng)加載的所有模塊,quit()函數(shù)并非必須調(diào)用,然而為了良好的開發(fā)習(xí)慣,應(yīng)該遵循誰申請(qǐng)、誰釋放的原則,因此,在需要釋放Pygame模塊資源的時(shí)候,開發(fā)人員應(yīng)當(dāng)在需要時(shí)主動(dòng)調(diào)用quit()函數(shù)卸載模塊資源。10.5.3Pygame庫導(dǎo)入Pygame模塊,在自定義的主函數(shù)中先后初始化和卸載所有模塊,具體代碼如下:importpygame#導(dǎo)入pygamedefmain():pygame.init()#初始化所有模塊
pygame.quit()#卸載所有模塊if__name__=='__main__':main()10.5.3Pygame庫2.創(chuàng)建游戲窗口若要開發(fā)帶有圖形界面的游戲,程序應(yīng)先創(chuàng)建一個(gè)圖形界面窗口。Pygame通過子模塊display創(chuàng)建圖形界面窗口,該子模塊中與窗口相關(guān)的常用函數(shù)如表所示。函數(shù)功能說明set_mode()初始化游戲窗口set_caption()設(shè)置窗口標(biāo)題update()更新屏幕顯示內(nèi)容10.5.3Pygame庫(1)set_mode()set_mode()函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福州職業(yè)技術(shù)學(xué)院《高級(jí)語言與程序設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州商學(xué)院《不動(dòng)產(chǎn)籍管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 徐州工程學(xué)院《油畫間接技法》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川商務(wù)職業(yè)學(xué)院《電氣控制與PC》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑河學(xué)院《大數(shù)據(jù)原理與實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京醫(yī)科大學(xué)《無人機(jī)通信與導(dǎo)航技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 宿遷澤達(dá)職業(yè)技術(shù)學(xué)院《醫(yī)學(xué)電生理》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇航空職業(yè)技術(shù)學(xué)院《智能運(yùn)輸系統(tǒng)2》2023-2024學(xué)年第二學(xué)期期末試卷
- 河南應(yīng)用技術(shù)職業(yè)學(xué)院《鋼鐵工業(yè)技術(shù)路線圖研發(fā)計(jì)劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西農(nóng)業(yè)工程職業(yè)學(xué)院《家用電器》2023-2024學(xué)年第二學(xué)期期末試卷
- 農(nóng)行超級(jí)柜臺(tái)業(yè)務(wù)知識(shí)考試題庫(含答案)
- 免疫治療免疫相關(guān)不良反應(yīng)的處理PowerPoint-演示文稿
- 農(nóng)產(chǎn)品加工工藝培訓(xùn)PPT創(chuàng)新農(nóng)產(chǎn)品加工工藝與技術(shù)
- 精神病患者藏藥的護(hù)理措施
- 提高中醫(yī)技術(shù)使用率品管圈課件
- 譯林版英語一年級(jí)下教學(xué)計(jì)劃各單元都有
- 濕疹病人的護(hù)理查房
- 海上油氣田前期研究
- 研究生英語翻譯答案
- 呼吸衰竭病人護(hù)理課件
- 運(yùn)動(dòng)員健康證明表
評(píng)論
0/150
提交評(píng)論