最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

簡明Python教程·更多&邁向下一步

2023-02-16 08:00 作者:琉璃汐陽  | 我要投稿

?更多

到現(xiàn)在,我們的介紹已經(jīng)涵蓋了你將使用到的 Python 的大部分方面。在本章中,我們將介紹 一些其它的方面,來讓我們對 Python 的認(rèn)識(shí)更加全面。


傳遞元組?

你可曾希望從一個(gè)函數(shù)中返回兩個(gè)不同的值?你能做到的。只需要使用一個(gè)元組。


要注意到 a, b = <some expression> 的用法會(huì)將表達(dá)式的結(jié)果解釋為具有兩個(gè)值的一個(gè)元組。

這也意味著在 Python 中交換兩個(gè)變量的最快方法是:



特殊方法?

諸如 __init__ __del__ 等一些方法對于類來說有特殊意義。?

特殊方法用來模擬內(nèi)置類型的某些行為。舉個(gè)例子,如果你希望為你的類使用 x[key] 索引 操作(就像你在列表與元組中使用的那樣),那么你所需要做的只不過是實(shí)現(xiàn) __getitem__() 方法,然后你的工作就完成了。如果你試圖理解它,就想想 Python 就是對 list 類這樣做的!?

下面的表格列出了一些有用的特殊方法。如果你想了解所有的特殊方法,請參閱手冊。

  • __init__(self, ...)

    • 這一方法在新創(chuàng)建的對象被返回準(zhǔn)備使用時(shí)被調(diào)用。

  • __del__(self)

    • 這一方法在對象被刪除之前調(diào)用(它的使用時(shí)機(jī)不可預(yù)測,所以避免使用它)

  • __str__(self)

    • 當(dāng)我們使用 print 函數(shù)時(shí),或 str() 被使用時(shí)就會(huì)被調(diào)用。

  • ?__lt__(self, other)

    • 當(dāng)小于運(yùn)算符(<)被使用時(shí)被調(diào)用。類似地,使用其它所有運(yùn)算符(+、> 等等) 時(shí)都會(huì)有特殊方法被調(diào)用。

  • ?__getitem__(self, key)

    • 使用 x[key] 索引操作時(shí)會(huì)被調(diào)用。?

  • ?__len__(self)

    • 當(dāng)針對序列對象使用內(nèi)置 len() 函數(shù)時(shí)會(huì)被調(diào)用?


單語句塊?

我們已經(jīng)見識(shí)過每一個(gè)語句塊都由其自身的縮進(jìn)級別與其它部分相區(qū)分。 是這樣沒錯(cuò),不過 有一個(gè)小小的警告。如果你的語句塊只包括單獨(dú)的一句語句,那么你可以在同一行指定它, 例如條件語句與循環(huán)語句。下面這個(gè)例子應(yīng)該能比較清楚地解釋:

注意,單個(gè)語句是在原地立即使用的,它不會(huì)被看作一個(gè)單獨(dú)的塊。盡管,你可以通過這種 方式來使你的程序更加小巧,但除非是為了檢查錯(cuò)誤,我強(qiáng)烈建議你避免使用這種快捷方 法,這主要是因?yàn)槿绻悴恍⌒氖褂昧艘粋€(gè)“恰到好處”的縮進(jìn),它就很容易添加進(jìn)額外的語 句。


Lambda 表格

? lambda 語句可以創(chuàng)建一個(gè)新的函數(shù)對象。從本質(zhì)上說, lambda 需要一個(gè)參數(shù),后跟一個(gè)表 達(dá)式作為函數(shù)體,這一表達(dá)式執(zhí)行的值將作為這個(gè)新函數(shù)的返回值。

案例(保存為 more_lambda.py ):

輸出:

它是如何工作的?

要注意到一個(gè) list sort 方法可以獲得一個(gè) key 參數(shù),用以決定列表的排序方式(通 常我們只知道升序與降序)。在我們的案例中,我們希望進(jìn)行一次自定義排序,為此我們需 要編寫一個(gè)函數(shù),但是又不是為函數(shù)編寫一個(gè)獨(dú)立的 def 塊,只在這一個(gè)地方使用,因此我 們使用 Lambda 表達(dá)式來創(chuàng)建一個(gè)新函數(shù)。?


列表推導(dǎo)?

列表推導(dǎo)(List Comprehension)用于從一份現(xiàn)有的列表中得到一份新列表。想象一下,現(xiàn)在 你已經(jīng)有了一份數(shù)字列表,你想得到一個(gè)相應(yīng)的列表,其中的數(shù)字在大于 2 的情況下將乘以 2。列表推導(dǎo)就是這類情況的理想選擇。

案例(保存為 more_list_comprehension.py ):

輸出:

它是如何工作的?

在本案例中,當(dāng)滿足了某些條件時(shí)( if i > 2 ),我們進(jìn)行指定的操作( 2*i ),以此來獲 得一份新的列表。要注意到原始列表依舊保持不變。

使用列表推導(dǎo)的優(yōu)點(diǎn)在于,當(dāng)我們使用循環(huán)來處理列表中的每個(gè)元素并將其存儲(chǔ)到新的列表 中時(shí)時(shí),它能減少樣板(Boilerplate)代碼的數(shù)量。?


在函數(shù)中接收元組與字典?

有一種特殊方法,即分別使用 * ** 作為元組或字典的前綴,來使它們作為一個(gè)參數(shù)為 函數(shù)所接收。當(dāng)函數(shù)需要一個(gè)可變數(shù)量的實(shí)參時(shí),這將頗為有用。

因?yàn)槲覀冊?args 變量前添加了一個(gè) * 前綴,函數(shù)的所有其它的額外參數(shù)都將傳遞到 args 中,并作為一個(gè)元組予以儲(chǔ)存。如果采用的是 ** 前綴,則額外的參數(shù)將被視為字典 的鍵值—值配對。


?assert 語句?

assert 語句用以斷言(Assert)某事是真的。例如說你非常確定你正在使用的列表中至少包 含一個(gè)元素,并想確認(rèn)這一點(diǎn),如果其不是真的,就拋出一個(gè)錯(cuò)誤, assert 語句就是這種情 況下的理想選擇。當(dāng)語句斷言失敗時(shí),將會(huì)拋出 AssertionError

你應(yīng)該明智地選用 assert 語句。在大多數(shù)情況下,它好過捕獲異常,也好過定位問題或向 用戶顯示錯(cuò)誤信息然后退出。


裝飾器

裝飾器(Decorators)是應(yīng)用包裝函數(shù)的快捷方式。這有助于將某一功能與一些代碼一遍又一 遍地“包裝”。舉個(gè)例子,我為自己創(chuàng)建了一個(gè) retry 裝飾器,這樣我可以將其運(yùn)用到任何函 數(shù)之中,如果在一次運(yùn)行中拋出了任何錯(cuò)誤,它就會(huì)嘗試重新運(yùn)行,直到最大次數(shù) 5 次,并 且每次運(yùn)行期間都會(huì)有一定的延遲。這對于你在對一臺(tái)遠(yuǎn)程計(jì)算機(jī)進(jìn)行網(wǎng)絡(luò)調(diào)用的情況十分 有用:

輸出:

它是如何工作的?

請參閱:

  • http://www.ibm.com/developerworks/linux/library/l-cpdecor.html

  • http://toumorokoshi.github.io/dry-principles-through-python-decorators.html?


Python 2Python 3 的不同?

請參閱:

  • "Six" library?

  • Porting to Python 3 Redux by Armin?

  • Python 3 experience by PyDanny?

  • Official Django Guide to Porting to Python 3?

  • Discussion on What are the advantages to python 3.x??


總結(jié)

我們在本章中介紹了有關(guān) Python 的更多功能,不過我們還未涵蓋到 Python 的所有功能。不 過,在這一階段,我們已經(jīng)涉獵了大多數(shù)你將在實(shí)踐中遇到的內(nèi)容。這足以讓你開始編寫任 何你所期望的程序。

?接下來,我們將討論如何進(jìn)一步探索 Python。

邁出下一步 1?

如果到現(xiàn)在你已經(jīng)閱讀過本書并且編寫了許多程序,那么你一定已經(jīng)開始熟悉并且習(xí)慣 Python 了?;蛟S你已經(jīng)創(chuàng)建了一些 Python 程序來嘗試完成一些工作,同時(shí)鍛煉你自己的 Python 技能。如果你尚未至此,你也應(yīng)該作出努力?,F(xiàn)在我們面臨的問題是“下一步該做什 么?”。

?我會(huì)建議你試圖解決這個(gè)問題:?

編寫一款你自己的命令行地址簿程序,你可以用它瀏覽、添加、編輯、刪除或搜索你的 聯(lián)系人,例如你的朋友、家人、同事,還有他們諸如郵件地址、電話號(hào)碼等多種信息。 這些詳細(xì)信息必須被妥善儲(chǔ)存以備稍后的檢索。

如果你回想至今我們學(xué)過、討論過、遇見過的所有東西,你會(huì)發(fā)現(xiàn)這其實(shí)非常簡單。如果你 仍想要有關(guān)如何進(jìn)行的提示,這兒倒是有一些。2?

一旦你能夠做到這件事,你便可以說自己是一名 Python 程序員了?,F(xiàn)在,趕快寫封郵件來感 謝我寫出了這么棒的一本書 ;-)。這一步并非強(qiáng)制但我仍建議如此。同時(shí),請考慮購買本書的 實(shí)體書來支持本書的后續(xù)改進(jìn)。

?如果你覺得上面的程序太容易了,這還有另一個(gè):?

實(shí)現(xiàn)替換命令。這個(gè)命令能將一串字符串替換為另外提供的文件或列表中的另一串。

?只要你想,替換命令可以或簡單或復(fù)雜地實(shí)現(xiàn),從簡單的字符串替換到搜尋搭配的樣式(正 則表達(dá)式)。


?下一個(gè)項(xiàng)目?

如果你發(fā)現(xiàn)上面的程序都能很容易地編寫出來,那么看看下面這個(gè)完整的項(xiàng)目列表,并嘗試 編寫你自己的程序:https://github.com/thekarangoel/Projects#numbers (這一列表與 Martyr2 的超級項(xiàng)目列表相同)。

?你還可以看看:

  • Exercises for Programmers: 57 Challenges to Develop Your Coding Skills?

  • Intermediate Python Projects?


示例代碼?

學(xué)習(xí)一門編程語言的最好方式就是編寫大量代碼,并閱讀大量代碼:

  • Python Cookbook 是一本極具價(jià)值的“烹飪法”與提示的集合,它介紹了如何通過 Python 解決某些特定類型的問題。

  • Python Module of the Week 是另一本優(yōu)秀的標(biāo)準(zhǔn)庫必讀指南。


?建議

  • The Hitchhiker's Guide to Python!?

  • The Elements of Python Style?

  • Python Big Picture?

  • "Writing Idiomatic Python" ebook (付費(fèi))


視頻

  • Full Stack Web Development with Flask?

  • PyVideo?


問與答

  • Official Python Dos and Don'ts

  • Official Python FAQ

  • Norvig's list of Infrequently Asked Questions?

  • Python Interview Q & A?

  • StackOverflow questions tagged with python?


教程

  • Hidden features of Python

  • What's the one code snippet/python trick/etc did you wish you knew when you learned python?

  • ?Awaretek's comprehensive list of Python tutorials?


討論

如果你遇到了一個(gè) Python 問題,但不知道該問誰,那么 python-tutor list 是你提問的最佳場 所。?

請確保你會(huì)自己做你的家庭作業(yè),你會(huì)首先嘗試自己解決問題,同時(shí),還要會(huì)問聰明的問 題。


新聞

如果你希望了解 Python 世界的最新動(dòng)態(tài),那就跟隨 Official Python Planet 的腳步吧。


安裝庫?

Python 庫索引中包含了大量開源的庫,你可以在你自己的程序中使用它們。

?要想了解如何安裝并使用這些庫,你可以使用 pip。


?創(chuàng)建一個(gè)網(wǎng)站?

學(xué)習(xí)使用 Flask 來創(chuàng)建你自己的網(wǎng)站。下面這些資源有助于你開始學(xué)習(xí):

  • Flask Official Quickstart?

  • The Flask Mega-Tutorial

  • Example Flask Projects?


圖形軟件?

假設(shè)你希望使用 Python 來創(chuàng)建你自己的圖形程序。這可以通過采用一個(gè) GUIGraphical User Interface,圖形用戶界面)庫和它們的 Python 綁定來實(shí)現(xiàn)。綁定是允許你用 Python 編 寫你自己的程序,然后使用它們在 CC++ 或其它語言寫編寫的庫。?

使用 PythonGUI 有許多選擇:

  • ?Kivy

    • http://kivy.org?

  • PyGTK

    • 這是 GTK+ 工具包的 Python 綁定,它是構(gòu)建 GNOME 的基礎(chǔ)。GTK+ 有許多奇怪 的用法,但是你一旦習(xí)慣了使用它,就能很快的創(chuàng)建出你的 GUI 應(yīng)用。Glade 圖形 界面設(shè)計(jì)工具是不可或缺的。它的文檔至今仍在不斷改進(jìn)。GTK+GNU/Linux 下 能夠良好工作,但是它針對 Windows 平臺(tái)的移植工作尚未完成。你可以使用 GTK+ 創(chuàng)建免費(fèi)或?qū)S械能浖?。要想開始使用,請閱讀 PyGTK 教程。?

  • PyQt?

    • Qt 工具包的 Python 綁定,它是構(gòu)建 KDE 的基礎(chǔ)。 受益于 Qt Designer 與令 人驚訝的 Qt 文檔,Qt 十分容易使用也十分強(qiáng)大。如果你希望創(chuàng)建一款開源 (GPL)軟件,你可以免費(fèi)使用 PyQt,不過如果你想創(chuàng)建專有的比原軟件,你需要購買它。從 Qt 4.5 開始你可以使用它來創(chuàng)建不采用 GPL 授權(quán)的軟件。要想開始使用,請閱讀 PySide

wxPython?

這是 wxWidgets 工具包的 Python 綁定。wxPython 有一個(gè)與之相關(guān)的學(xué)習(xí)曲線。不 過,它非常便攜,并且可以運(yùn)行在 GNU/Linux、Windwos、Mac、甚至是嵌入式平臺(tái)中。有許多 IDE 可以采用 wxPython,并且包含了 GUI 設(shè)計(jì)工具,例如 SPE (Stani's Python Editor) 還有 wxGlade GUI 構(gòu)建工具。你可以使用 wxPython 來創(chuàng)建 免費(fèi)或?qū)S械能浖?。要想開始使用,請閱讀wxPython 教程。


?GUI 工具總結(jié)?

想要了解更多的選擇,可以參閱 GuiProgramming wiki page at the official python website。

不幸的是,Python 沒有一款標(biāo)準(zhǔn) GUI 工具。我建議你根據(jù)你的實(shí)際情況從上面列出的工具中 進(jìn)行挑選。第一個(gè)因素是你是否愿意為使用任何 GUI 工具付費(fèi)。第二個(gè)因素是你希望你的程 序只在 Windwos 上運(yùn)行,還是在 MacGNU/Linux 上運(yùn)行,還是在它們?nèi)咧隙寄苓\(yùn) 行。第三個(gè)因素,如果 GNU/Linux 是目標(biāo)平臺(tái),那你是要做 KDE 用戶還是 GNOME 用戶。

有關(guān)更詳盡且更全面的分析,請參閱 'The Python Papers, Volume 3, Issue 1' (PDF) 的第 26 頁。


各種實(shí)現(xiàn)?

編程語言主要有兩部分——語言與軟件。語言是你如何編寫,軟件是你怎樣實(shí)際運(yùn)行我們的 程序。?

我們一直在使用 CPython 軟件來運(yùn)行我們的程序。它被成為 CPython 是因?yàn)樗鞘褂?C 語 言編寫的,同時(shí)它也是經(jīng)典的(ClassicalPython 解釋器。

?還有其他軟件可以運(yùn)行你的 Python 程序:

  • ?Jython?

    • Java 平臺(tái)上運(yùn)行的 Python 實(shí)現(xiàn)。這意味著你可以在 Python 語言中使用 Java 的 庫與類,反之亦然。

  • ?IronPython

    • .NET 平臺(tái)上運(yùn)行的 Python 實(shí)現(xiàn)。這意味著你可以在 Python 語言中使用 .NET 的庫與類,反之亦然。

  • PyPy

    • Python 編寫的 Pyhon 實(shí)現(xiàn)!這是一項(xiàng)研究項(xiàng)目,旨在于使其能快速且方便的改 進(jìn)解釋器,因?yàn)榻忉屍鞅旧砭褪怯脛?dòng)態(tài)語言編寫的了(而不是采用上述三種 C、 Java、C# 等動(dòng)態(tài)語言來編寫)。

還有其它諸如 CLPython——采用 Common Lisp 編寫的 Python 實(shí)現(xiàn),和Brython ,它在 JavaScript 解釋器之上實(shí)現(xiàn),意味著你可以使用 Python(而非 JavaScript)編寫你的 Web 瀏 覽器(“Ajax”)程序。?

上述這些實(shí)現(xiàn)每一種都有其大有作為的專門領(lǐng)域。?


函數(shù)式編程(面向高階讀者)

當(dāng)你開始編寫更加龐大的程序時(shí),你應(yīng)該清楚了解更多關(guān)于使用函數(shù)的方式來進(jìn)行編程,而 不是我們在《面向?qū)ο缶幊獭氛鹿?jié)中所學(xué)習(xí)的基于類的方式進(jìn)行編程:

  • Functional Programming Howto by A.M. Kuchling?

  • Functional programming chapter in 'Dive Into Python' book?

  • Functional Programming with Python presentation?

  • Funcy library?

  • PyToolz library?


總結(jié)

現(xiàn)在我們已經(jīng)行至本書末尾,不過,正如人們所說,這是昭示著開始的終結(jié)!你現(xiàn)在已經(jīng)是 一名狂熱 Python 用戶,毫無疑問,你已準(zhǔn)備好通過 Python 來解決諸多問題了。你可以開始 自動(dòng)化你的電腦,去做任何你以前難以想象的事情,你可以開始編寫你自己的游戲,開始做 更多更多的事,遠(yuǎn)不僅此。來,讓我們出發(fā)吧!

  1. 本章所提供的所有學(xué)習(xí)資源均為英文,故對于其標(biāo)題不作翻譯。 ??

  2. 創(chuàng)建一個(gè)類用來表示人的信息。使用一份字典來存儲(chǔ)人物對象,將它們的名字當(dāng)作鍵 值。使用 pickle 模塊來將對象長久地存儲(chǔ)在硬盤上。使用字典的內(nèi)置方法來添加、刪除 或編輯地址簿中的人物?!瓡??



未完待續(xù)......

簡明Python教程·更多&邁向下一步的評論 (共 條)

分享到微博請遵守國家法律
博兴县| 普定县| 永仁县| 平阴县| 贞丰县| 清涧县| 都昌县| 灌云县| 洪洞县| 泾阳县| 玉林市| 茌平县| 长岭县| 章丘市| 庆城县| 潮州市| 砀山县| 满城县| 新密市| 呼和浩特市| 洛浦县| 新宁县| 四子王旗| 葫芦岛市| 磐安县| 比如县| 福安市| 泾阳县| 邢台市| 体育| 通渭县| 渑池县| 文安县| 社会| 正宁县| 台南市| 扬州市| 青川县| 肃南| 报价| 高碑店市|