本文目錄一覽:
- 1、學Python,怎能不懂點PEP?
- 2、Python 入門指南之使用 Python 解釋器
- 3、Python性能分析指南
- 4、Python 有哪些入門學習方法和值得推薦的經典教材?
- 5、強力推薦!非常全的Python學習資料
學Python,怎能不懂點PEP?
PEP是Python增強提案(Python Enhancement Proposal)的縮寫。社區通過PEP來給Python語言建言獻策,每個版本的新特性和變化都是通過PEP提案經過社區決策層討論、投票決議,最終確定的。
也就是說,PEP是各種增強功能和新特性的技術規格,也是社區指出問題、精確化技術文檔、推動Python發展的提案。一般情況下,可以將PEP視為Python語言的設計文檔,包含了技術規範和功能的基本原理說明等。
官方將PEP分成三類:
說到底,PEP是深入了解Python的途徑,是真正掌握Python語言的一把鑰匙,也是得心應手使用Python的一本指南。
PEP從2000年開始到目前已經發布了幾百個,所有PEP都存在一個 github repository 倉庫中,PEP索引及分類匯總在 PEP 0 — Index of Python Enhancement Proposals (PEPs) ,其中有一些對我們理解和使用python非常重要,推薦大家一讀:
Python 2 版本重點關注以下PEP:
Python 3 重點:
Python 入門指南之使用 Python 解釋器
Python 解釋器通常被安裝在目標機器的 /usr/local/bin/python3.5 目錄下。將 /usr/local/bin 目錄包含進 Unix shell 的搜索路徑里,以確保可以通過輸入:
命令來啟動他。[1] 由於 Python 解釋器的安裝路徑是可選的,這也可能是其它路徑,你可以聯繫安裝 Python 的用戶或系統管理員確認(例如, /usr/local/python 就是一個常見的選擇)。
在 Windows 機器上,Python 通常安裝在 C:Python35 位置,當然你可以在運行安裝嚮導時修改此值。要想把此目錄添加到你的 PATH 環境變量中,你可以在 DOS 窗口中輸入以下命令:
通常你可以在主窗口輸入一個文件結束符(Unix 系統是 Control-D ,Windows 系統是 Control-Z )讓解釋器以 0 狀態碼退出。如果那沒有作用,你可以通過輸入 quit() 命令退出解釋器。
Python 解釋器具有簡單的行編輯功能。在 Unix 系統上,任何 Python 解釋器都可能已經添加了 GNU readline 庫支持,這樣就具備了精巧的交互編輯和 歷史 記錄等功能。在 Python 主窗口中輸入 Control-P 可能是檢查是否支持命令行編輯的最簡單的方法。如果發出嘟嘟聲(計算機揚聲器),則說明你可以使用命令行編輯功能;更多快捷鍵的介紹請參考 交互式輸入行編輯 歷史 回溯。如果沒有任何聲音,或者顯示 ^P 字符,則說明命令行編輯功能不可用;你只能通過退格鍵從當前行刪除已鍵入的字符並重新輸入。
Python 解釋器有些操作類似 Unix shell:當使用終端設備(tty)作為標準輸入調用時,它交互的解釋並執行命令;當使用文件名參數或以文件作為標準輸入調用時,它讀取文件並將文件作為 腳本 執行。
第二種啟動 Python 解釋器的方法是 python -c command [arg] … ,這種方法可以在 命令行 執行 Python 語句,類似於 shell 中的 -c 選項。由於 Python 語句通常會包含空格或其他特殊 shell 字符,一般建議將 命令 用單引號包裹起來。
有一些 Python 模塊也可以當作腳本使用。你可以使用 python -m module [arg] … 命令調用它們,這類似在命令行中鍵入完整的路徑名執行 模塊 源文件一樣。
使用腳本文件時,經常會運行腳本然後進入交互模式。這也可以通過在腳本之前加上 -i 參數來實現。
調用解釋器時,腳本名和附加參數傳入一個名為 sys.argv 的字符串列表。你能夠獲取這個列表通過執行 import sys ,列表的長度大於等於1;沒有給定腳本和參數時,它至少也有一個元素: sys.argv[0] 此時為空字符串。腳本名指定為 ‘-‘ (表示標準輸入)時, sys.argv[0] 被設定為 ‘-‘ ,使用 -c 指令 時, sys.argv[0] 被設定為 ‘-c’ 。使用 -m 模塊 參數時, sys.argv[0] 被設定為指定模塊的全名。-c 指令 或者 -m 模塊 之後的參數不會被 Python 解釋器的選項處理機制所截獲,而是留在 sys.argv 中,供腳本命令操作。
從 tty 讀取命令時,我們稱解釋器工作於 交互模式 。這種模式下它根據主提示符來執行,主提示符通常標識為三個大於號( );繼續的部分被稱為 從屬提示符 ,由三個點標識( … )。在第一行之前,解釋器打印歡迎信息、版本號和授權提示:
輸入多行結構時需要從屬提示符了,例如,下面這個 if 語句:
關於交互模式更多的內容,請參見 交互模式。
默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字符可以同時用在字符串、標識符和注釋中 — 儘管 Python 標準庫僅使用 ASCII 字符做為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字符,你的編輯器必須能識別出文件是 UTF-8 編碼,並且它使用的字體能支持文件中所有的字符。
你也可以為源文件指定不同的字符編碼。為此,在 #! 行(首行)後插入至少一行特殊的注釋行來定義源文件的編碼:
例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:
這樣就可以在源文件中使用 Windows-1252 字符集中的所有字符了。這個特殊的編碼注釋必須在文件中的 第一或第二 行定義。
Footnotes
Python性能分析指南
原文來源 | Huy Nguyen
譯文來源 | 開源中國
雖然你所寫的每個Python程序並不總是需要嚴密的性能分析,但是當這樣的問題出現時,如果能知道Python生態系統中的許多種工具,這樣總是可以讓人安心的。
分析一個程序的性能可以歸結為回答4個基本的問題:
1.它運行的有多塊?
2.那裡是速度的瓶頸?
3.它使用了多少內存?
4.哪裡發生了內存泄漏?
下面,我們將用一些很酷的工具,深入細節的回答這些問題。
使用time工具粗糙定時
首先,我們可以使用快速然而粗糙的工具:古老的unix工具time,來為我們的代碼檢測運行時間。
上面三個輸入變量的意義在文章 stackoverflow article 中有詳細介紹。簡單的說:
real – 表示實際的程序運行時間
user – 表示程序在用戶態的cpu總時間
sys – 表示在內核態的cpu總時間
通過sys和user時間的求和,你可以直觀的得到系統上沒有其他程序運行時你的程序運行所需要的CPU周期。
若sys和user時間之和遠遠少於real時間,那麼你可以猜測你的程序的主要性能問題很可能與IO等待相關。
使用計時上下文管理器進行細粒度計時
我們的下一個技術涉及訪問細粒度計時信息的直接代碼指令。這是一小段代碼,我發現使用專門的計時測量是非常重要的:
timer.py
為了使用它,你需要用Python的with關鍵字和Timer上下文管理器包裝想要計時的代碼塊。它將會在你的代碼塊開始執行的時候啟動計時器,在你的代碼塊結束的時候停止計時器。
這是一個使用上述代碼片段的例子:
我經常將這些計時器的輸出記錄到文件中,這樣就可以觀察我的程序的性能如何隨着時間進化。
使用分析器逐行統計時間和執行頻率
Robert Kern有一個稱作line_profiler的不錯的項目,我經常使用它查看我的腳步中每行代碼多快多頻繁的被執行。
想要使用它,你需要通過pip安裝該python包:
一旦安裝完成,你將會使用一個稱做“line_profiler”的新模組和一個“kernprof.py”可執行腳本。
想要使用該工具,首先修改你的源代碼,在想要測量的函數上裝飾@profile裝飾器。不要擔心,你不需要導入任何模組。kernprof.py腳本將會在執行的時候將它自動地注入到你的腳步的運行時。
primes.py
一旦你已經設置好了@profile裝飾器,使用kernprof.py執行你的腳步。
-l選項通知kernprof注入@profile裝飾器到你的腳步的內建函數,-v選項通知kernprof在腳本執行完畢的時候顯示計時信息。上述腳本的輸出看起來像這樣:
尋找具有高Hits值或高Time值的行。這些就是可以通過優化帶來最大改善的地方。
程序使用了多少內存?
現在我們對計時有了較好的理解,那麼讓我們繼續弄清楚程序使用了多少內存。我們很幸運,Fabian Pedregosa模仿Robert Kern的line_profiler實現了一個不錯的內存分析器。
首先使用pip安裝:
(這裡建議安裝psutil包,因為它可以大大改善memory_profiler的性能)。
就像line_profiler,memory_profiler也需要在感興趣的函數上面裝飾@profile裝飾器:
想要觀察你的函數使用了多少內存,像下面這樣執行:
一旦程序退出,你將會看到看起來像這樣的輸出:
line_profiler和memory_profiler的IPython快捷方式
memory_profiler和line_profiler有一個鮮為人知的小竅門,兩者都有在IPython中的快捷命令。你需要做的就是在IPython會話中輸入以下內容:
在這樣做的時候你需要訪問魔法命令%lprun和%mprun,它們的行為類似於他們的命令行形式。主要區別是你不需要使用@profiledecorator來修飾你要分析的函數。只需要在IPython會話中像先前一樣直接運行分析:
這樣可以節省你很多時間和精力,因為你的源代碼不需要為使用這些分析命令而進行修改。
內存泄漏在哪裡?
cPython解釋器使用引用計數做為記錄內存使用的主要方法。這意味着每個對象包含一個計數器,當某處對該對象的引用被存儲時計數器增加,當引用被刪除時計數器遞減。當計數器到達零時,cPython解釋器就知道該對象不再被使用,所以刪除對象,釋放佔用的內存。
如果程序中不再被使用的對象的引用一直被佔有,那麼就經常發生內存泄漏。
查找這種“內存泄漏”最快的方式是使用Marius Gedminas編寫的objgraph,這是一個極好的工具。該工具允許你查看內存中對象的數量,定位含有該對象的引用的所有代碼的位置。
一開始,首先安裝objgraph:
一旦你已經安裝了這個工具,在你的代碼中插入一行聲明調用調試器:
最普遍的對象是哪些?
在運行的時候,你可以通過執行下述指令查看程序中前20個最普遍的對象:
哪些對象已經被添加或刪除?
我們也可以查看兩個時間點之間那些對象已經被添加或刪除:
誰引用着泄漏的對象?
繼續,你還可以查看哪裡包含給定對象的引用。讓我們以下述簡單的程序做為一個例子:
想要看看哪裡包含變量x的引用,執行objgraph.show_backref()函數:
該命令的輸出應該是一副PNG圖像,保存在/tmp/backrefs.png,它看起來是像這樣:
在運行的時候,你可以通過執行下述指令查看程序中前20個最普遍的對象:最下面有紅字的盒子是我們感興趣的對象。我們可以看到,它被符號x引用了一次,被列表y引用了三次。如果是x引起了一個內存泄漏,我們可以使用這個方法,通過跟蹤它的所有引用,來檢查為什麼它沒有自動的被釋放。
回顧一下,objgraph 使我們可以:
顯示佔據python程序內存的頭N個對象
顯示一段時間以後哪些對象被刪除活增加了
在我們的腳本中顯示某個給定對象的所有引用
努力與精度
在本帖中,我給你顯示了怎樣用幾個工具來分析python程序的性能。通過這些工具與技術的武裝,你可以獲得所有需要的信息,來跟蹤一個python程序中大多數的內存泄漏,以及識別出其速度瓶頸。
對許多其他觀點來說,運行一次性能分析就意味着在努力目標與事實精度之間做出平衡。如果感到困惑,那麼就實現能適應你目前需求的最簡單的解決方案。
參考
stack overflow – time explained(堆棧溢出 – 時間解釋)
line_profiler(線性分析器)
memory_profiler(內存分析器)
objgraph(對象圖)
end
Python 有哪些入門學習方法和值得推薦的經典教材?
如果你有一定的計算機編程知識基礎,那麼很容易學;再如果你對編程十分感興趣,那麼很容易學的。
1,找到合適的入門書籍,大致讀一次,循環啊判斷啊,常用類啊,搞懂(太難的跳過)
2,做些簡單習題,字符串比較,讀取日期之類 Python Cookbook不錯(太難太無趣的,再次跳過,保持興趣是最重要的,不會的以後可以再學)
3,加入Python討論群,態度友好笑眯眯(很重要,這樣高手才會耐心糾正你錯誤常識)。很多小問題,糾結許久,對方一句話點播思路,真的節約你很多時間。耐心指教我的好人,超級超級多謝。
4,解決自己電腦問題。比如下載美劇,零散下載了2,4,5,8集,而美劇共12集,怎樣找出漏下的那幾集?然後問題分解,1讀取全部下載文件名,2提取集的數字,3數字排序和(1–12)對比,找出漏下的。
5,時刻記住目的,不是為了當程序員,是為了解決問題。比如,想偷懶抓網頁內容,用urllib不行,用request也不行,才發現抓取內容涉及那麼多方面(cookie,header,SSL,url,javascript等等),當然可以聽人家勸,回去好好讀書,從頭讀。 或者,不求效率,只求解決,用ie打開網頁再另存為行不行?ie已經渲染過全部結果了。 問題變成:1–打開指定的10個網頁(一行代碼就行)。更複雜的想保存呢?利用已經存在的包,比如PAM30(我的是Python3),直接打開ie,用函數outHTML另存為文本,再用搜索函數(str搜索也行,re正則也行)找到數據。簡單吧?而且代碼超級短。
6,保持興趣,用最簡單的方式解決問題,什麼底層驅動,各種交換,留給大牛去寫吧。我們利用已經有的包完成。
7,耐心讀文檔,並且練習快速讀文檔。拿到新包,找到自己所需要的函數,是需要快速讀一次的。這個不難,讀函數名,大概能猜到是幹嘛的,然後看看返回值,能判斷是不是自己需要的。
8,寫幫助文件和學習筆記,並發布共享。教別人的時候,其實你已經自己再次思考一次了。 我覺得學程序就像學英文,把高頻率的詞(循環,判斷,常用包,常用函數)搞懂,就能拼裝成自己想要的軟件。 一定要保持興趣,太複雜的跳過,就像小學數學,小學英語,都是由簡入深。 網絡很平面,無數國際大牛著作好書,關於Python,算法,電腦,網絡,或者程序員思路,或者商業思維(浪潮之巔是本好書)等等,還有國際名校的網絡公開課(中英文字幕翻譯完畢,觀看不是難事),講計算機,網絡,安全,或者安卓系統,什麼都有,只要能持續保持興趣,一點點學習下去,不是難事。 所有天才程序員,都曾是兒童,回到兒童思維來理解和學習。覺得什麼有趣,先學,不懂的,先放着,遇到問題再來學,效果更好。 唯一建議是,不要太貪心,耐心學好一門優雅的語言,再學其它。雖然Javascript做特效很炫,或提某問題時,有大牛建議,用Ruby來寫更好之類,不要改方向。就像老笑話:“要學習遞歸,必須首先理解遞歸。”然後死循環一直下去。堅持學好一門語言,再研究其他。 即使一門語言,跟網絡,數據庫等等相關的部分,若都能學好,再學其他語言,是很快的事情。 另外就是,用學英文的耐心來學計算機,英文遇到不懂的詞,抄下,查詢。 python里,看到Http,查查定義,看到outHtml,查查定義,跟初學英語時候一樣,不要直接猜意思,因為精確描述性定義,跟含糊自然語有區別的。而新人瞎猜,很容易錯誤理解,wiki,google很有用。
對於python初學者來說,能找到一個好老師學習格外重要,這能決定你是不是可以做出好的項目,在python開發的路上越走越輕鬆,如果現在的你缺乏學習經驗,找不到老師指導你學習,可以加企 鵝扣-Q前面112再加上中間的983以及最後四位數4903,連在一起就可以了。
如果說彙編是第一代編程語言,那麼C和C++是第二代編程語言,C#和Java等等是第三代編程語言,Python和其他類似的腳本語言就是第四代編程語言(除彙編外這些語言都是C語系下的編程語言,可以進行類比),從C++開始是個分水嶺,它是通過面向對象和對底層技術的封裝,使編程向高級編程過度,到Python已經是很簡歷通俗了,至少是跟之前比,所以如果說python不易學,那其他語言怎麼辦呢,幾乎每本python的教材都會先表明python是一門易學易用的語言,這也是這個語言被創造出來的宗旨之一,另外Google的程序猿很喜歡用Python編寫各類工具,因為它的語言簡歷,編碼效率高,讓用慣了其他語言的人,樂意去用這門新的語言,也說明它的易學性。
另外從廣義講,Python不僅是一門編程語言,還是一個編程的平台,在這個平台下,有着安裝各種擴展、框架的工具pip,有着打包工具setuptools等等等等,這些工具已經很成熟,而且易於上手,另外Python有很多很好的編程工具(集成開發環境)可以用,如PyCharm等,這也使的新人很容易上手,不像其他不成熟的編程語言工具貧乏,編寫和運行程序如連電路板一般。
強力推薦!非常全的Python學習資料
一、Python基礎教程
《圖靈程序設計叢書:Python基礎教程(第2版 修訂版)》包括Python程序設計的方方面面,首先從Python的安裝開始,隨後介紹了Python的基礎知識和基本概念,包括列表、元組、字符串、字典以及各種語句。然後循序漸進地介紹了一些相對高級的主題,包括抽象、異常、魔法方法、屬性、迭代器。此後探討了如何將Python與數據庫、網絡、C語言等工具結合使用,從而發揮出Python的強大功能,同時介紹了Python程序測試、打包、發布等知識。結尾,作者結合前面講述的內容,按照實際項目開發的步驟向讀者介紹了幾個具有實際意義的Python項目的開發過程。
二、Python編程:從入門到實踐
本書是一本針對所有層次的Python讀者而作的Python入門書。全書分兩部分:首部分介紹用Python 編程所必須了解的基本概念,包括matplotlib、NumPy和Pygal等強大的Python庫和工具介紹,以及列表、字典、if語句、類、文件與異常、代碼測試等內容;第二部分將理論付諸實踐,講解如何開發三個項目,包括簡單的Python 2D遊戲開發,如何利用數據生成交互式的信息圖,以及創建和定製簡單的Web應用,並幫讀者解決常見編程問題和困惑。
三、利用Python進行數據分析
《利用Python進行數據分析》講的是利用Python進行數據控制、處理、整理、分析等方面的具體細節和基本要點。同時,它也是利用Python進行科學計算的實用指南(專門針對數據密集型應用).《利用Python進行數據分析》重點介紹了用於高效解決各種數據分析問題的Python語言和庫。《利用Python進行數據分析》沒有闡述如何利用Python實現具體的分析方法。
四、Python核心編程
《Python核心編程(第3版)》是經典暢銷圖書《Python核心編程(第二版)》的全新升級版本,總共分為3部分。第1部分為講解了Python的一些通用應用,包括正則表達式、網絡編程、Internet客戶端編程、多線程編程、GUI編程、數據庫編程、Microsoft Office編程、擴展Python等內容。第2部分講解了與Web開發相關的主題,包括Web客戶端和服務器、CGI和WSGI相關的Web編程、Django Web框架、雲計算、高級Web服務。第3部分則為一個補充/實驗章節,包括文本處理以及一些其他內容。
《Python核心編程(第3版)》適合具有一定經驗的Python開發人員閱讀。
五、Python數據分析與挖掘實戰
本書共15章,分兩個部分:基礎篇、實戰篇。基礎篇介紹了數據挖掘的基本原理,實戰篇介紹了一個個真實案例,通過對案例深入淺出的剖析,使讀者在不知不覺中通過案例實踐獲得數據挖掘項目經驗,同時快速領悟看似難懂的數據挖掘理論。讀者在閱讀過程中,應充分利用隨書配套的案例建模數據,藉助相關的數據挖掘建模工具,通過上機實驗,以快速理解相關知識與理論。
以上就是關於Python學習資料的相關分享,希望對大家有所幫助,想要了解更多相關內容,歡迎及時關注本平台!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/184996.html