python扔在一邊很久了,最近剛好有幾天閑,買了本《Head First Python》復習一下。
跟python結緣是因為教C語言的王青老師推薦我們邊學C邊學python,記得說是C結合腳本語言會發揮出比較大的威力,還推薦了一門Coursera上的公開課,名字好像叫how to program,當時只是聽說,因為當時各種狀態,并沒有學。
后來用一個暑假學《learn python the hard way》,沒有紙質的書,很多東西雖然知道,學的并不踏實,之后又看《python源碼剖析》,可能是C基礎不夠好原因,看到一半就放棄了,以后有機會還會再看。
再后來用python做《人工智能》的作業,寫起來非常爽,可是寫得一團糟,都只是能跑的級別而已,有時需要跑幾個小時才能出結果,然后import一下sklearn的庫,想著怎么也得跑個幾分鐘吧,結果人家10s就出結果了OTZ。雖然可以profile一下,或者用pypy再跑一下,可終歸治標不治本。
再后來也就是寫Dr.Kang的作業“把Simulink和Stateflow模型轉化到uppaal里面后做model checking”的時候,因為當時是要把Simulink里面的map table轉化到uppaal里面,可是uppaal這個奇葩軟件卻各種反人類,雖然基本語法是C,卻連二維數組都不支持,所以先把map table導出到html里面,然后用python解析html,把數據搞出來再生成C的一維數組,最后利用行和列的index算出結果的index,相當于模擬一個查找的過程,oral presentation的時候老師好像還比較滿意這個做法。
對了,這期間斷斷續續搞個人主頁,用的是web.py這個簡單的框架,寫出這個框架的天才、reddit的創始人、rss的發明者、年僅二十多歲,抱歉那個人的名字想不起來了,后來自殺了,緬懷一下這位我實在想不起名字的互聯網之子,他的三個東西都真的改變了世界,至少稍微改變了一下我的世界。還在廖雪峰老師的主頁學了一點高階函數、修飾器、lamda,那個教程最后是要自己寫出一個web框架,然后用那個框架搭個博客,要是現在斷網寫我肯定寫不出來,還有實訓搞避障小車的時候在樹莓派里用了一下,不過最后要拍個視頻檢驗成果,我們的車還是用手機ssh到pi上面遙控的,哈哈哈哈。
會寫一個系列,可能有兩到四部分,看了一下這本書前三章主要是些簡單的基礎、四到七章主要是web開發、八九十主要是用戶python做移動開發,最后一章是python做數據處理,第一部分和數據處理這一章都比較簡單而且其實一直在用的都是這方面的東西都比較熟悉,第二部分會重點看一下,移動開發看情況,因為一般都是用原生開發,跨平臺也就是那么幾種方案,python做移動開發實在太非主流了,最后可能會有個總結,也可能沒有。
這是第一部分和數據處理。
內置函數及數據結構和自帶的庫
BIF是Built-in Function的縮寫。比如dir()、isinstance(name, type)。
其他比較常用而且重要的有:
help
如果對函數的參數和返回值不太確定的話可以用help來查,相當于python的自帶文檔。
這個是最基本的打印函數,在沒有debugger的時候debug可以用到。
help(print)
竟然會出現SyntaxError,對print用help的時候要加上引號。因為信息很長,所以不截圖了。python的print函數其實是非常復雜的,以后有機會專門研究一下。
open
locals
返回當前作用域下的本地變量。
exit
object
這個很好玩兒。
class
這個更好玩兒,__builtin__模塊里面包含了BIF、異常和一些其他的對象。
字符串(STRING)
find
在字符串里查找,如果沒有的話返回-1,如果有的話返回首次出現的位置。
split
split接收兩個參數,第二個參數maxsplit有默認值為-1,如果調用的時候不給這個參數,默認是把整個字符串用第一個參數指定的splitter分割開,如果給定了,那么最后分割的數就是maxsplit+1。第一個參數的默認值是None,如果不給定,splitter就是空格。
列表(LIST)
操作
以上是從help(lsit)里面截出來的。還有很多,限于篇幅所以沒有截出來。
這些函數都是list類的成員函數,在《Python源碼剖析》里面應該有更詳細的解釋和實現。之后看的時候應該注意。
字典(DICT)
跟列表都是內置的數據結構。
操作
集合(SET)
操作
OS庫
import os
os.getcwd()
os.chdir()
python: SyntaxError: EOL while scanning string literal ->stackoverflow
出現這個SyntaxError的原因在于反斜杠和后引號被當作是轉義字符導致整個字符串沒有了end,EOL應該是end of line的意思。
os.environ['OS']
OS庫中environ變量是一個保存環境變量的字典,可以通過訪問字典值得方式獲得一些環境變量的值。
Windows下通過系統屬性看到的是這樣的:
通過Python得到的是這樣的:
Exception
def get_coach_data(filename):
try:
with open(filename) as f:
data = f.readline()
templ = data.strip().split(',')
return(AthleteList(templ.pop(0), templ.pop(0), templ))
except IOError as ioerr:
print('File error (get_coach_data): ' + str(ioerr))
return(None)
其他函數
seek
seek() function? ->stackoverflow
參考資料:
《Head First Python(中文版)》