寫在前面:
「吾嘗終日而思矣,不如須臾之所學也;吾嘗跂而望矣,不如登高之博見也。登高而招,臂非加長也,而見者遠;順風而呼,聲非加疾也,而聞者彰。假輿馬者,非利足也,而致千里;假舟楫者,非能水也,而絕江河。君子生非異也,善假於物也。」
十幾年的默默學習,而今但願更可能是對本身知識的一個總結反思積累,可以探討進步更是夢寐以求。雖然如今coding能力有限,但所幸站在巨人肩膀上,可總有一天,我也能成爲巨人。
一篇簡單python入門學習開始,做爲本身千里之行第一步,sf.gg平臺的第一次嘗試。python
python中的列表能夠實現對各類數據的組織:movies=['The Holy Grail','The life of brain','The meaning of life',2017,['dog','cat','duck']]
包括數字,字符串和列表,但數字和字符的組合只能包含在字符串之中。
列表中數據項的調用:print(movies[1])
顯示"The life of brain"
下面列出一些關於list類列表的BIF:len(movies)
輸出列表中的數據項個數。movies.append('')
在列表末尾添加單個數據項。movies.extend(['',''])
在列表末尾增長一個數據項集合。movies.pop(n)
在指定位置刪除並返回這個數據項,注意這裏是有返回項的。movies.remove('')
移除某一個特定數據項。insert('')
在特定位置增長一個數據項。isinstance(name,list)
檢查某個標識符(name)是否屬於某種類型(例如list)。list()
產生一個空列表的工廠函數。range()
根據須要生成一個範圍的數字,經常使用於循環次數int()
將一個字符串或一個數字轉換爲整數app
----本身入門必定是從點到面的,所以這裏並非很全面的總結,但願之後更加完善。函數
迭代語句::學習
for each_file in movies: print(each_file)
其中 each_file 是咱們本身爲列表中的數據項定義的名字。url
count = 0 while count < len(movies): print(movies[1]) count = count + 1
這裏建議只要是能用for語句儘可能用for語句。spa
判斷語句:code
if isinstance(each_item,list): print(each_item) else: print('none')
這裏與c語言並沒有明顯區別,多重判斷加入elif。blog
def print_lol(the_list): xxxx xxxxx
自定義函數還有較多注意地方,在後續內容中有所說起。圖片
在查閱大量資料發佈和上傳pypi還有不少附屬文件須要編寫和上傳以確保模塊可以正常發佈和更新。這裏只寫了文中提到的可以保證發佈和上傳的最必要的幾個步驟,將來可能會專門寫一篇關於發佈詳細文章。ip
1.爲模塊傳建一個與模塊文件(.py)相同名字的文件夾(例如:cat),並把文件放進去。
2.建立setup.py文件
from distutils.core import setup setup( name = 'cat', version = '1.0.0', py_modules = ['cat'], author = 'davystokess', author_email = 'xxxxx', url = 'http://www.xxxx.com', description = 'A simple example' )
setup文件是爲你的模塊作出說明
3.發佈 在此文件夾空白處 shift+右鍵 打開命令窗口輸入:
4.安裝到本地文件:
5.嘗試導入並使用模塊:
import cat cat.print_lol(xxx)
其中cat.print_lol涉及命名空間,若是使用
from cat import print_lol print_lol(xx)
則print_lol能夠直接使用。
書中的方法在我使用的3.6.2版本已經沒法使用(僅限本人)。這裏使用官方推薦方式:
py -m pip install twine # 安裝twine,必須有py -m 前綴不然沒法使用,具體啥意思我也不知道(待改) py -m twine upload dist/* #利用twine上傳
小體會:
(不保證徹底正確)
def print_lol(the_list,level=0)
end=' '
做爲print函數參數能夠關閉默認的自動換行文件的打開:data = open(sketch.text,'wb')
sketch.text是某一個文件,方式有'r''rb''w''wb''w+''a'分別表明讀,二進制讀,寫二進制寫,讀和寫,追加寫入。注意data並非一個列表,w會清空現有文件再寫入,沒有文件則會建立一個文件。
顯示python當前工做文件夾,更改工做文件夾:
import os os.getcwd() os chdir(F:\code\python)
xxx.split(','n)
將xxx(一個數據項,或者一個列表等)中的數據依據','分爲一個個數據項,n爲分隔的個數,n=1則意味着在第一個,處將數據分爲兩半;不設置則有x個,分爲x+1項的列表xxx.readline()
讀取xxx一個數據行(待改)xxx.find('n')
尋找xxx數據中是否存在n 是返回參數:個數如10;否返回參數-1xxx.seek()
用來是文件恢復到初始位置not
將所得結果取反 xxx.close()
將文件關閉
舉例:
man=[] other=[] try: data=open('sketch.txt') for each_line in data: try: (role,line_spoken)=each_line.split(':',1) line_spoken= line_spoken.strip if role=='Man': man.append(line_spoken) elif role=='Other Man': other.append(line_spoken) except ValueError: pass data.close() except IOError: print('The data file is missing!') try: man_file=open('man_data.txt','w') other_file=open('other_data.txt','w') print(man,file=man_file) print(other,file=other_file) except IOError as err: print('File error:'+str(err)) #經過這種方式能夠將問題反饋給咱們,用來分析錯誤類型 finally: man_file.close() other_file.close()
try語句用來執行正常模塊處理功能,except語句用來處理可能出現的錯誤:例如找不到指定文件或者數據類型不對等等;finally語句用來處理必定要執行語句。
print('',file = file_name)
將數據寫入文件
try: with open('man_data.txt','w') as man_file: #注意形式 print_lol(man,fh=man_file) with open('other_data.txt','w') as other_file: print_lol(other,fh=other_file) except IOError as err: print('File error:'+str(err))
使用with open() as xxx:語句能夠妥善文件的開關
import pickle try: with open('man_data.txt','wb') as man_file,open('other_data.txt','wb') as other_file: #注意建立儲存的文件是xxxx.pickle或xxx.txt格式均可以 pickle.dump(man,man_file) pickle.dump(other,other_file) except IOError as err: print('file error:'+str(err)) except pickle.PickleError as perr: print('Pickleing error:'+ste(perr)) new_man=[] with open('man_data.txt','rb') as man_file: new_man=pickle.load(man_file) print_lol(new_man)
呵呵 使用pickle.dump(數據,文件名)能夠將數據壓縮保存;使用pickle.load(數據名)能夠將數據提取出來。注意寫,讀打開方式是wb和rb 。
def get_coach_data(filename): with open(filename) as f: data=f.readline() return(data.strip().split(',')) #方法串鏈 從左往右讀 特色以點爲分隔,()中無包含關係
對於第五章的數據(只有計時數據)進行處理 打開-讀取(變爲列表但只有一項?)-去空格-以','爲分隔變爲多個數據項的列表返回。
def sanitize(time_string): if '-' in time_string: splitter='-' elif ':' in time_string: splitter=':' else: return(time_string) (mins,secs)= time_string.split(splitter) return(mins+'.'+secs)
自定義sanitize函數用於將數據中的'-'':'都變爲'.'。
print(sorted(set([sanitize(t) for t in james]))[0:3])
包含函數串鏈,特色是()中包含函數。一種寫代碼的方式:列表推導 自行體會。但其中的set()函數是將數據(不管是導入的仍是列表數據)轉換爲一個集合,這樣就能夠去除數據中的重複項。
當數據發生改變(增長或者減小類型)時,使用 字典 使用字典會很是方便:
def get_coach_data(filename): with open(filename) as f: data=f.readline().strip().split(',') data1={} data1['name']=data.pop(0) data1['DOB'] =data.pop(0) data1['Times']=str(sorted(set([sanitize(t) for t in data]))[0:3]) return(data1) sarah = get_coach_data('sarah2.txt') print(sarah['name']+"'s fastest time are:"+sarah['Times']) # 對字典的調用例如sarah['name'],方式簡單實用。
這裏面get_coach_data()函數建立並處理數據追中返回一個字典,對字典的調用。
但將數據與代碼打包在一塊兒是更好的,函數與數據關聯纔有意義,所以引入類的使用:
class Athlete: def __init__(self,a_name,a_dob=None,a_times= [ ]): # __init__這裏必定要注意 兩個短橫線 self.name =a_name self.dob = a_dob self.times=a_times def top3(self): return(sorted(set([sanitize(t) for t in self.times]))[0:3]) def add_time(self,time_value): self.times.append(time_value) def add_times(self,list_of_times): self.times.extend(list_of_times)
這裏涉及了‘定製類’的建立例子,注意其中的賦值與擴展方法。
def sanitize(time_string): if '-' in time_string: splitter='-' elif ':' in time_string: splitter=':' else: return(time_string) (mins,secs)= time_string.split(splitter) return(mins+'.'+secs) #此處是重點 注意觀察必定製類的不一樣 class Athletelist(list): # 注意()中的是你將派生的類的類型 def __init__(self,a_name,a_dob=None,a_times= []): list.__init__([]) self.name =a_name self.dob = a_dob self.extend(a_times) def top3(self): return(sorted(set([sanitize(t) for t in self]))[0:3]) def get_coach_data(filename): with open(filename) as f: data = f.readline().strip().split(',') return(Athletelist(data.pop(0),data.pop(0),data)) #注意觀察類的調用方式 sarah = get_coach_data('sarah2.txt') print(sarah.name+"'s fastest time are:"+str(sarah.top3())) vera= Athletelist('vera vi') vera.extend(['1.31','1-21','2:22']) print(vera.top3())
這裏涉及了子類的建立方法,不只包含編寫的功能,還包含list自己的功能。
小結:小小入門。