摘要:本文的分享主要圍繞以下幾個方面能做什么常見應用場景介紹如何學習語法基礎實戰面向對象編程實戰練熟基礎小游戲項目的實現與實戰一能做什么一種編程語言往往可以應用于多方面,有些方面比較常用,有些方面極為常用。比如表示是一個空列表。
摘要:Python語言的教程雖然隨處可見,但是忙于日常業務/學習的你或許:一直想要“找個時間學一點”,但是又不知道該從何下手?本文將從Python能做什么,如何學習Python以及Python的基礎知識為你的Python之路點上一盞明燈。
本文內容根據演講視頻以及PPT整理而成。
本文的分享主要圍繞以下幾個方面:
Python能做什么?(常見應用場景介紹)
如何學習Python?
Python語法基礎實戰
Python面向對象編程實戰
練熟基礎:2048小游戲項目的實現與實戰
一、Python能做什么?一種編程語言往往可以應用于多方面,有些方面比較常用,有些方面極為常用。上圖中標紅的部分是Python極為常用的領域。首先,利用Python可以進行簡單腳本編程,比如使用Python編寫2048小游戲或12306的自動搶票軟件。其次,可以使用Python進行系統編程,開發系統應用。第三點,Python一個較為常用的功能就是開發網絡爬蟲。網絡爬蟲的用途是進行數據采集,也就是將互聯網中的數據采集過來。網絡爬蟲的難點其實并不在于爬蟲本身,由于網站方為了避免被爬取回采取各種各樣的反爬蟲措施,而如果想要繼續從網站爬取數據就需要解決這些反爬蟲措施,所以網絡爬蟲的難點在于反爬的攻克和處理。第四點,Python極常用于WEB開發,可以借助Python開發WEB站點,比如個人博客、在線教育網站以及論壇等。第五點,在運維方面,Python可以用于自動化運維,可以通過寫Python腳本實現對于服務器集群進行自動化管理。第六點,Python可以用于網絡編程,比如Socket編程等。第七點,Python極常用的一個方向就是數據挖掘、機器學習等大數據與人工智能領域方向的程序開發,比如在人工智能領域,使用Python就可以很容易地實現算法模型,并且借助Python可以很容易地處理相應的數據。
作為系列文章的首篇,本文將為大家分享Python的基礎知識。而學習Python基礎的第一步就是認識Python可以干什么,通過上面的內容,大家可以了解到Python語言可以做很多事情,或者可以說Python基本上是一門全能的語言。Python在各個領域都很優秀,而最重要的一點就是Python比較易學。綜上所述,Python是一門非常棒的語言。
二、如何學習Python?首先與大家分享一些方法論,究竟應該如何學習Python?其實學習任何一門知識,方法都是類似的,有些同學習慣直接看書或看視頻,這些方法都不錯,但是在學習的過程中需要掌握一些技巧,這樣學習起來會事半功倍。
成體系地學,不搞“題海戰術”
首先,要學就要成體系地學,不搞“題海戰術”。遇到新知識就去查,然后就知道了,反復這樣就是所謂的“題海戰術”,這樣做的好處就是用到了就會去尋找,但是缺點就是腦海里面的知識體系會非常亂,而且越學越亂,因為太多東西在腦海中不成體系地堆積導致非常難以利用,所以需要成體系地學習。所謂成體系地學習,就比如在學習基礎時可以先掌握數據類型、控制結構、函數以及模塊等,將這些知識形成體系。構建知識體系就像寫書一樣,在寫書的過程中不可能想到哪里就寫到哪里,而應該有一個大致的框架。成體系地學習的好處就是無論怎樣學習都不會亂。而且最開始的體系不一定是非常完備的,比如在剛開始學習編程語言的時候可能并不知道迭代器和生成器,但這并不會影響知識體系的建立,而在后續學到迭代器和生成器的時候,再將這一部分的知識加入到知識體系中就可以了。但是這樣的前提就是在腦海中一定要有一個非常清晰的體系結構,學到的新知識都可以歸入到體系中,如果遇到了知識體系中沒有的內容就可以對應地進行補充,這樣就形成了非常清晰的體系結構,這樣的學習方法收益會比較大。
不僅要“摹”,還要“臨”
其次,不僅要“摹”,還要“臨”?!芭R摹”是練習書法的手段,所謂“臨”就是看著字帖中的字,憑著印象在紙上書寫并且盡量復現字帖中的字;所謂“摹”就是在字帖上面蒙上一層薄白紙,然后在上面跟著字帖直接描。在“臨”與“摹”中,顯然后者更為簡單。其實,學習任何一門知識都一樣,不僅要“摹”,還要“臨”。在學習Python等編程語言時,一些同學可能學習時看看視頻就過去了,這樣顯然是不可取的,好一點的同學會在看過視頻之后,跟著視頻把代碼敲一遍,但是這樣只是進行了“摹”,應該在此基礎之上加上“臨”的步驟,也就是關上視頻、合上書本之后,憑借記憶對代碼進行復現,去想自己的代碼需要實現哪些功能,這樣才能將知識真正地吸收。這樣練習久了之后就會發現自己的能力提升得非??臁?/p>
通所有不如精一物,精一物方可通所有
第三個學習方法就是通所有不如精一物,精一物方可通所有。大家在學習的時候可能會遇到很多的框架,但是其實并不需要掌握所有的框架,比如對于爬蟲而言,既可以學習Scrapy,也可以學習urllib,還可以學習其他的框架。其實并不用掌握所有的框架,學習時可以深入地掌握其中一兩個框架,之后就會發現所有的框架都是萬變不離其宗的。精通一兩個框架之后,其他的框架也會很容易掌握。學習編程語言也是一樣的,當你精通了PHP或者Java,Python也能很快學會,但是如果同時學習Java、Python和PHP,最終可能導致每一門語言都不精通。其實學習過程的曲線在剛開始的基礎階段上升會非常慢,但是只要上手之后,進度就會非常快,所以大家在學習基礎的時候一定不要著急。
走心學,忌浮躁
第四個學習方法就是走心學,忌浮躁。學習的時候一定要投入心思,不要著急,盡量地將知識掌握和精通。更加具體的學習方法,大家可以關注云棲社區上的這個聚能聊:https://yq.aliyun.com/roundta...。
三、Python語法基礎實戰在Python語法的基礎實戰這部分將與大家分享數據類型、控制結構、函數與模塊、文件操作與數據庫操作以及異常處理等內容。
Python基礎知識入門
在Python中輸出直接使用print()函數,如果在Python文件中重復四次print("Hello Python"),那么輸出時就是四次“Hello Python”。如果想讓某一行代碼不起作用,可以使用注釋。在Python中有兩種比較常見的注釋方案,第一種是單行注釋,在行首加“#”,這樣就會注釋掉這一行代碼;第二種是多行注釋,多行注釋一般使用“"""”或“"""”(三引號)實現,直接將需要注釋的代碼段的首部和尾部加上三個引號即可。
數據類型
在學習任何一門編程語言時,都需要了解這門編程語言有哪些數據類型。在Python中,常見的數據類型有數、字符串、列表、元祖、集合以及字典等。
數:就是數學上的數字,比如“a=7”就是將數字7賦值給a,這里的等號是賦值的意思。想要查看對應的數據是什么類型可以使用type()函數查看,比如7就是int整形,7.0就是float浮點型。
字符串:一系列字符所組成的序列叫做字符串。字符串一般使用引號將其引起來,這里使用單引號和雙引號均可。比如:
</>復制代碼
a1="abc"
a2="abc"
a3="""ab
c"""
上述代碼所表達的內容是相同的,區別在于使用單引號和雙引號所引起來的內容不能直接換行,而使用三引號就可以。
列表:存儲多個元素的容器,列表中的元素可以被重新賦值,也就是說列表中的元素是可以變化的。建立列表可以通過“[]”實現,在其中可以放置數據。比如:a=[]表示a是一個空列表。再比如a=[a1,a3],列表中每個元素之間使用逗號隔開,a這個列表中包含了a1和a3兩個元素。取其中的元素可以通過下標實現,比如a[1]就可以取出a1的值。而列表中的元素可以被重新定義,比如使用a[1]="hello" 就可以對原本a[1]的位置進行賦值,這就說明了列表中的元素是可以變化的。
元組:存儲多個元素的容器,但是元組中的元素不可以被重新賦值。比如c=(7,"cd",9),c存儲了一組數據,如果想要對c中任意位置賦值成為其他的數據,都是不可以的,因為元組內的數據是不能被更改的。所以,元組一般在對數據安全要求較高時使用,這也是元組與列表的區別。
字典:字典相當于關聯數組,所謂關聯數組就是里面需要存儲一對信息的數組。列表和元組存儲的元素都是一個,而字典存儲的元素都是一對信息如d={"name":"weiwei","sex":"boy","job":"teacher"}這樣的{鍵:值, 鍵:值, ...}。在取值的時候直接使用字典名["對應鍵名"]即可,比如對于上訴d這個字典,使用d["name"]就可以取到"weiwei"這個值。
集合:集合也是用于存儲一組數據的,只不過集合的特性是不允許出現重復的元素,這一點大家早在高中就已經學習了。所以,集合的一個非常簡單的應用就是去重,之所以說這個方法簡單,是因為去重還有很多的實現方法,比如布隆過濾器等都是非常好的去重方式。在Python中直接通過set就可以直接建立集合,比如e=set("abcdefgabc"),而集合是通過“{}”存儲的,只不過大括號里面直接存儲元素。而當輸出e時就會發現,原本重復的內容就只保留一個。此外,集合還可以用于差集的運算,比如e=set("abcgjkhsgkjha"),f=set("jikhsdghsdueigdsfzau")直接使用g=e-f就可以獲得e與f的差集。
運算符
以上的這些數據類型歸根結底都是數據。數據是靜態的,而通過運算符進行運算就可以讓這些數據動起來。Python里面的運算符有哪些呢?首先就是大家非常熟悉的“+-/%”,這些運算都滿足數學規律。除了“+-/%”之外,還有字符串連接符“+”,如果想要將兩個字符串連接起來只需要用“+”即可。
縮進問題
可能某些同學對于Python的縮進比較反感,會覺得縮進很麻煩并且非常容易出錯。但是實際上,縮進很美,當打開Python項目時就會發現層次感很強,會感受到代碼的美感,哪些代碼屬于同一層級是一目了然的。縮進所需要掌握的規律就是最開始的代碼頂格,第二點就是同一層級的代碼在同一個縮進幅度上,下一個層級的代碼在下一個縮進幅度上。當掌握了縮進規律之后,再去寫Python代碼就會很容易了。
控制結構
所謂控制結構就是程序的執行結構,程序可以像流水賬一樣順序執行下去,也可以跳躍、循環以及分支執行,這些多種的執行方式叫做控制結構。實際上,Python中最常用的控制結構只有三種就是:順序結構、選擇結構和循環結構,當然還有一些不常用的控制結構比如中斷結構等。
順序結構不必多講,就是按照順序寫,程序也就按照順序執行。在Python中,分支結構通常使用if語句實現,如果if的條件為真,則執行下面對應的代碼,否則繼續向下看是否有分支結構,如果有則繼續執行,否則就執行這一部分內容;如果if的條件為假,就不執行下面對應的代碼。如下示例代碼:
</>復制代碼
a=1000
b=1
if(a>19 and a<30):
print(a)
if(b<9):
print(b)
elif(a>9 and a<=19):
print("a>9 and a<=19")
elif(a<9):
print("a<9")
else:
print("gsdajk")
上述代碼中第3行的if條件判定結果為真,程序會執行第4行至第6行代碼。如果第3行的if判定為假,則繼續向下面找尋分支。第7行和第9行都存在elif,其意思就是在不滿足if的情況下如果滿足elif的條件,就執行elif下面的代碼,如果上述兩行的elif條件都不滿足,在第11行還有一個else,其意思就是在上述條件都不滿足的情況下,執行else下面的代碼。上述代碼最終將會輸出“gsdajk”。這里值得說明的一點就是如果實際情況不需要,可以沒有elif以及else等語句,也就是可以多帶帶使用if語句。
循環結構也是一個極為重要的結構。在Python中,循環結構有相應的方法去實現,常用的有兩種:while和for語句。while語句的格式如下所示:
</>復制代碼
a=0
while(a<10):
print("hello")
a+=1
首先寫while的條件,所謂的條件就是while括號中的表達式。如果條件為真就意味著滿足了while的條件,這樣就會執行while下面的代碼段,而在執行時不是僅執行一次就結束,而是只要while循環的條件一直滿足,這段代碼就會一直執行。上述代碼中,a的初始值為0,循環結構中將會打印“hello”并使得a自增1,當a<10時循環結構就會一直執行,所以將會輸出10次“hello”。當到執行到第10次之后,a就不滿足小于10的條件了,于是就會跳出循環。
除了while循環之外,還有for循環。for循環的寫法稍有不同,常用的格式是for i in x,x一般而言是一組數據。for循環遍歷列表示例如下,該程序將會循環輸出列表中的各個元素。
</>復制代碼
a=["aa","b","c","d"]
for i in a:
print(i)
for進行常規循環的寫法是for i in range(),也就是從X到Y的意思。比如for i in range(2,5)就是遍歷2、3、4,這里值得注意的就是遍歷不到最后的元素,在該例子中遍歷不到5。如下列代碼將會輸出10次“hello”。
</>復制代碼
for i in range(0,10):
print("hello")
中斷結構是一種特殊的控制結構,就是在程序執行過程中進行中斷,一般而言都是在循環過程中進行中斷。通常,中斷結構有兩種寫法:break與continue。break的含義是直接退出循環,整個循環都會中斷。continue指的是中斷單次循環,會繼續下一次循環。
</>復制代碼
a=["aa","b","c","d"]
for i in a:
if(i=="c"):
break
print(i)
上述代碼使用break中斷循環,使用i循環遍歷a列表,如果i=="c"則中斷循環,直接break。上述代碼的結果就是輸出aa與b,但是不會輸出c之后的元素,因為當循環遍歷到c時就會break,然后終止整個循環。
</>復制代碼
a=["aa","b","c","d"]
for i in a:
if(i=="c"):
continue
print(i)
而當將break替換為continue后,運行該段代碼的輸出結果除了aa、b之外,還會輸出d,這是因為continue僅中斷單詞循環,不會影響下一次循環。上述代碼在遍歷到數組中元素c時,會中斷所以不輸出c,然后循環還會繼續。
使用Python輸出乘法口訣表
</>復制代碼
for i in range(1,10):
for j in range(1,i+1):
print(str(i)+"*"+str(j)+"="+str(i*j),end=" ")
print()
如上述代碼所示,乘法口訣表分為行和列的控制,最外層循環控制行數,所以外層循環是for i in range(1,10),就是從1一直遍歷到10。而對于列的控制就需要內層循環,顯然就是在i層下面再進行一層循環,如上述代碼中的for j in range(1,i+1),因為當遍歷到1的時候,結果是11,不需要繼續寫12,所以這里只需要遍歷到i+1即可。具體的輸出只需要進行簡單的數學運算和字符串拼接即可,在print輸出之后如果不通過end控制是會默認更換一行的,這樣輸出的結果不夠美觀,上述代碼的寫法可以使得同一行print輸出的結果之間隔一個空格。而在完成了j的遍歷之后需要另起一行,所以需要print()。運行結果如下圖所示:
在理解了乘法口訣表的實現之后,大家應該思考如何將乘法口訣表逆序輸出,形成倒三角形式。顯然,只需要對代碼做如下修改即可:
</>復制代碼
for i in range(9,0,-1):
for j in range(i,0,-1):
print(str(i)+"*"+str(j)+"="+str(i*j),end=" ")
print()
對于控制結構而言,大家需要重點掌握循環和分支。
函數與模塊
函數相當于功能的封裝。舉例而言,某個程序段可能會被經常調用,如果不進行功能封裝,那么每次調用這個功能時就需要重新實現一遍該段程序,這就會帶來很多麻煩。而現在可以將這個經常被調用的程序段封裝成一個函數,如果需要實現這個功能就可以直接調用這個封裝好的函數。接下來就與大家分享與函數相關的內容。
作用域:作用域一般而言指的是變量的作用范圍。
</>復制代碼
i=10
def func():
print(i)
func()
如上述代碼,將10賦值給i之后,i的作用范圍就是后面的全部代碼,一直到程序結束為止,那么這些被覆蓋到的范圍就是變量i的作用域。而在下面的代碼中,當i在函數里面被定義,并且沒有用global關鍵字聲明,正常情況下其作用范圍僅限于該函數。
</>復制代碼
def func():
i=10
print(i)
func()
上述代碼中,i的作用范圍僅限于func()函數中。而如果變量在函數外部定義,那么在函數內部可以使用該變量,但是卻無法直接修改該變量的值。如果對其進行修改就會造成命名空間沖突,出現錯誤。解決上述問題的答案其實很簡單,就是將變量用global關鍵字聲明為全局變量即可。
</>復制代碼
i=10
def func():
global i
print(i)
func()
上述代碼中的i就是全局變量,當將變量聲明為全局變量之后就不會受局部變量的影響了。
函數定義的格式:函數定義的格式就是如何將一串代碼封裝為成函數的方式。函數是通過def關鍵字定義的,函數定義格式如下:
</>復制代碼
def 函數名(參數):
函數體
下面的代碼建立了函數abc(),函數的參數可以沒有,但需要注意即使沒有參數也需要加括號。示例代碼中相當于將兩個print語句進行了封裝。如果想要將上述兩個print語句統一進行一次執行時只需要調用abc()函數即可。在調用函數時只需要使用“函數名(參數)”。
</>復制代碼
def abc():
print("abcde")
print("456")
abc()
函數參數:如果函數沒有參數,那么這個函數就是固定的,因為該函數內部的代碼是固定的,所以無論怎樣執行都是同樣的結果。而如何使得函數能夠實現具體問題具體分析呢?此時可以為其傳入相應的參數,這樣函數就可以根據所傳入的參數進行相應的數據處理。參數就相當于函數與外界溝通的接口。參數分為形參和實參,一般而言在函數定義的時候使用參數就是形參,所謂形參就是“形式上的參數”;在函數調用的時候使用的就是實參,而所謂的實參就是“實際的參數”。如下的代碼段中實現了兩個數據比較大小的功能:
</>復制代碼
def func2(a,b):
if(a>b):
print(str(a)+"比"+str(b)+"大")
else:
print(str(b)+"比"+str(a)+"大或者"+str(b)+"與"+str(a)+"相等")
上述代碼中封裝了一個名為func2的函數,里面傳遞兩個參數,參數的名字可以自行定義,函數里面則可以根據具體的形參進行判斷。上述代碼中如果a>b,輸出“a比b大”,否則就輸出“b比a大或者b與a相等”。對于上述函數,每次調用時可以傳遞不同的參數進去,進而根據具體情況具體分析,并得到相應的結果。綜上所述,函數就是將一串代碼進行封裝,即函數一般用于功能的封裝。
模塊:模塊就相當于函數的再次封裝。Python中有一些常用的模塊,這些常用的模塊存在于Python的安裝目錄之下,其中有一個名為“lib”的目錄,該目錄一般就用于放置模塊,而且大家也可以自己寫模塊,這樣的模塊就叫做自定義模塊。
在Python中想要使用模塊需要掌握兩個知識點:導入和使用。一般而言有幾種方法導入模塊,第一種方法就是使用import語句直接導入某個模塊,第二種方法就是從某個模塊中僅導入某個方法。如下代碼所示,可以從time模塊中導入sleep方法,也可以使用from time import *將time模塊的所有方法都導入進來。
</>復制代碼
import random
from time import sleep
from time import *
a=["中獎","不中獎","不中獎"]
print(random.choice(a))
random模塊主要用于隨機數的處理。上述代碼使用random實現了一個抽獎功能,首先導入了random,然后建立一個列表,里面有“中獎”和“不中獎”選項,random.choice(a)將會隨機在列表a中選擇一個選項并輸出對應的結果。time模塊也有一些比較常用的功能,比如time.sleep(),其實現了延時功能。如果想要修改模塊的源代碼,只需要在lib目錄下找到相應的模塊進行修改即可。
此外,第三方的模塊一般放置在lib目錄下的site-packages中。
三、文件操作與數據庫操作文件操作
文件的打開:使用Python打開文件方法的格式就是open(文件地址,操作形式),open函數的參數中的操作形式有:w(寫入)、r(讀取)、b(二進制)、a(追加),其中的a表示可以實現追加寫入,這樣就不會丟失原來的內容,如果使用w就是全新寫入,將會覆蓋原本的內容。
</>復制代碼
fh=open("D:/我的教學/Python/20180120內訓/第1天代碼/文本1.txt","r",encoding="utf-8")
#
文件讀取
data=fh.read()
line=fh.readline()
上述代碼中的操作形式是“r”,也就是讀取文檔,并且可以通過encoding設置編碼格式,比如utf-8或者gbk等,這樣就可以打開文件。之后就可以通過read()或者readline()等方法進行讀取。read()指的是將文件中的內容全部讀取出來,readline()則是一行行地讀取。
</>復制代碼
x=0
fh=open("D:/我的教學/Python/20180120內訓/第1天代碼/文本1.txt","r",encoding="gbk")
while True:
line2=fh.readline()
if(len(line2)==0):
break
print(line2)
x+=1
fh.close()
上述代碼中使用readline()一行行地讀取文件,這里通過設置while循環來讀取文件全部內容,如果某一行的長度為0則說明文件已經讀完,此時就可以break,而如果不為0則說明還有內容,就可以繼續讀取下一行。上述代碼中還通過變量x統計共讀取了多少次,在文件讀取完后通過fh.close()關閉文件。結果輸出后還可以通過x獲取讀取的總行數。
文件的寫入(w/a+):在進行文件寫入時,在open函數中的操作形式的參數應該為“w”或者“a”,參數中的文件地址則是輸出地址。如下代碼段所示:
-
</>復制代碼
data="一起學Python!"
fh2=open("D:/我的教學/Python/20180120內訓/第1天代碼/文本3.txt","w")
fh2.write(data)
fh2.close()
在文件地址中,不能夠使用“”,而應該使用“”或者“/”。在打開文件之后使用write方法將數據寫入之后,將文件關閉即可。如果操作形式為“w”,將會把原本的文件內容替換掉,也就是全新寫入的意思,而如果使用“a+”就是在原本內容的基礎上進行追加。
數據庫操作
Python除了用于操作文件之外,還常用于操作數據庫,本文以操作MySQL數據庫為例講解。在使用Python操作數據庫之前需要先安裝pymysql模塊,在cmd命令行中輸入“pip install pymysql”即可完成該模塊的安裝。
在安裝完pymysql之后,還需要將其中的源代碼進行一定的修改,因為使用其默認編碼會出現錯誤。在site-packages下面找到pymysql,并找到connections.py文件,搜索“charset=”關鍵詞就可以定位到需要進行修改的地方。
在connections.py中的charset=部分原本是沒有編碼的,現在加上編碼這樣就不會出錯了,這里的編碼一般建議使用“utf8”。需要注意的是寫入“utf8”而非“utf-8”,通過這樣的設置基本上就可以解決亂碼的問題。
使用Python進行數據庫的操作的前提是需要一個MySQL數據庫,至于MySQL數據庫的安裝和配置不是本文所關心的對象,大家可以自行學習。在擁有了MySQL數據庫之后首先應該進行數據庫的連接。
</>復制代碼
import pymysql
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="mypydb")
#執行sql語句-無返回
conn.query("INSERT INTO mytb(title,keywd) VALUES("new title","23456")")
conn.commit()
#執行SQL語句-有返回
cs=conn.cursor()
cs.execute("select * from mytb")
for i in cs:
print("當前是第"+str(cs.rownumber)+"行")
print("標題是:"+i[0])
print("關鍵詞是:"+i[1])
conn.close()
如上述代碼所示,使用pymysql下面的connect方法就可以進行連接。connect方法中的參數的含義:host代表主機IP地址,user代表用戶名,passwd代表密碼,db代表所選擇的數據庫。在Python中操作數據庫也是使用SQL語句,而這里的SQL語句可以分為兩種,一種無返回結果,一種有返回結果。比如插入數據等操作無返回結果,查詢則屬于有返回結果的,而這兩種語句的使用方法是不同的。對于無返回結果的SQL語句,在使用時只需要使用query方法就可以執行。上述代碼中指的是插入一條數據,插入完成之后使用commit方法就可以完成提交;對于有返回結果的SQL語句,首先需要通過conn的cursor方法建立游標,之后使用execute方法執行SQL語句,這樣就可以遍歷游標,查詢結果存儲在cs中,使用for i in cs就可逐個將查詢結果取出來。
異常處理
在Python中經常會出現這樣或那樣的錯誤,有些錯誤是不可避免的,甚至是未知的。對于未知的錯誤,當Python執行時遇到后就會自動終結。而如果希望在遇到錯誤之后程序能夠繼續運行則需要使用異常處理。異常處理的格式如下:
</>復制代碼
try:
程序
except Exception as 異常名稱:
異常處理部分
try后面的代碼段就是嘗試著去執行這段程序,如果出現異常則會觸發except從句。except后面是對應的Exception類型,這里有一種的“必殺技”,就是直接使用Exception——通用異常,只要發生異常,Exception都會將其捕獲到。as表示對于異常起一個別名,而接下來就是對應的異常處理的代碼。
</>復制代碼
try:
for i in range(0,10):
</>復制代碼
> print(i)
> if(i==4):
> print(jkj)
> print("hello") except Exception as err:
> print(err)
如上述代碼段,當i循環到4的時候將會出現異常,因為jkj沒有在程序中定義。如果沒有異常處理,程序將會直接終結,而使用了異常處理之后,當發生異常也不會直接標紅,而是將異常輸出。
異常處理的目的是讓程序在出現異常的情況下繼續執行下去,所以需要將異常盡量細化,使異常處理與所需要監控的代碼更加緊密。對于上述代碼進行異常處理細化之后如下:
</>復制代碼
for i in range(0,10):
try:
print(i)
if(i==4):
print(jkj)
except Exception as err:
print(err)
print("hello")
這樣即使出現了異常,也可以繼續下一次循環。所以需要注意,異常處理需要盡量細化,盡量放于代碼里層,放于外層可能無法實現完美的異常處理。
四、Python中面向對象編程實戰上述內容幫助大家了解了Python在語法層面的基礎知識,接下來為大家分享Python中面向對象編程實戰。面向對象編程一般區別于面向過程,其更適合于中大型的項目的開發。
認識類和對象
面向對象編程主要是通過“類”和“對象”實現的。舉例而言,具體的某個人就是“對象”,小明是一個對象,小張也是一個對象,而將“對象”共有的特點抽象出來就能夠形成“類”,比如小張和小明都是“人”,那么“人”就是一個“類”,所以“類”就是類型的意思。只不過面向對象的類是自定義的?!邦悺笔浅橄蟪鰜淼?,“對象”則是具體的。
如果想要建立一個類則可以使用class字段進行聲明:
</>復制代碼
class 類名:
類里面的內容
如下示例代碼,建立了一個名為cl1的類,類中的內容是“pass”,就是一個占位符,不會起到任何作用,但如果沒有pass則會出現縮進錯誤。
</>復制代碼
class cl1:
pass
而將類實例化成為對象可以使用類名后面加括號并直接賦值給一個對象,如a=cl1(),那么a就是cl1這個類的一個對象。
構造函數
構造函數也叫作構造方法。所謂構造方法就是專門用于初始化的方法。這里還需要介紹self,一般在類中的方法必須加上self參數,其代表類本身。在Python中__init__(self,參數)就是構造方法,構造方法的名字是固定的,在括號里面加上self以及對應的參數即可。構造函數的實際意義就是初始化。
class cl2:
</>復制代碼
def __init__(self):
print("I am cl2 self!")
如上述代碼所示,cl2類有一個構造方法,構造方法中會輸出“I am cl2 self!”,這就意味著該類只要創建對象就會首先執行這一串代碼。如果想要給構造方法加上參數,在self后面加上參數即可,參數與參數之間通過逗號隔開。
class cl3:
</>復制代碼
def __init__(self,name,job):
print("My name is "+name+" My job is "+job)
這樣就相當于給類加上了參數,因為在實例化該類時會需要傳遞相應的參數。這里需要注意的是為類加上參數,并不是在類定義中的括號中加參數,在類定義中的括號是用于繼承的,而不是用于加參數的,這里的加參數指的是在實例化時加上參數。
屬性和方法
屬性就相當于是類中的變量,方法就相當于類中的函數,屬性是靜態的,方法是動態的。舉例而言,對于“人”這個類,手、頭這些都屬于屬性,而人會說話、寫字這些都是方法。在Python里面,屬性的使用方式一般是self.屬性即可。
class cl4:
</>復制代碼
def __init__(self,name,job):
self.myname=name
self.myjob=job
在上述代碼的cl4這個類的構造方法中,可以看到傳遞了兩個參數,之后就在構造函數中變成了類的屬性。接下來在使用到時候直接調用self.屬性即可。
class cl5:
</>復制代碼
def myfunc1(self,name):
print("hello "+name)
class cl6:
</>復制代碼
def __init__(self,name):
self.myname=name
def myfunc1(self):
print("hello "+self.myname)
如上述代碼所示,方法就是類里面的函數,包括__init__()也都是方法。上述的cl6就能為大家解釋self為什么能夠存在,cl6中的__init__()和myfuncl()是兩個函數,按照道理而言,myname在不同的函數中都屬于局部變量,是不能通用的,那么如果想讓局部變量在多個函數之間傳遞,那么一種方法就是將變量存儲到類里面,也就是創建self字段,將變量存到類里面,而self就提供了一個區域用于存儲變量,這就是self存在的必要性。
繼承
簡單而言,繼承就是將某個類中所有的屬性和方法都拿過來直接使用,舉例而言:某一個家庭有父親、母親、兒子和女兒,父親可以說話,母親可以寫字,大兒子繼承了父親,女兒同時繼承了父母,并且有新能力聽東西,小兒子繼承了父親,但是優化(或減弱)了父親的說話能力,這樣的模型應該如何建立呢?被繼承的這個類被稱為基類或者父類,繼承的類叫做子類。所以模型中的服務都是基類,兒子和女兒都是子類。
首先創建父親類,他的功能是可以說話:
class father():
</>復制代碼
def speak(self):
print("I can speak!")
接下來建立大兒子這個子類:
</>復制代碼
class son(father):
pass
該類繼承了父親類,所以在son類定義的時候括號里寫上了father。雖然son類中沒有寫任何方法,但是其仍然擁有speak方法,這是因為其集成了father類的所有方法。
母親類具備寫的能力:
</>復制代碼
class mother():
def write(self):
print("I can write")
女兒類同時繼承了父親和母親,這就屬于多繼承了。多繼承只需要在類定義時加多個參數即可。除了繼承了兩個基類之外,她還有新的聽的能力,這樣只需要在該類中寫一個新的方法即可。
class daughter(father,mother):
</>復制代碼
def listen(self):
print("I can listen!")
而小兒子發生了變異,這里的變異指的是重載或者重寫。小兒子繼承了父親類,但是優化了說的能力,所以需要實現一個同名方法,而在實際使用的時候也會調用自己所重載的speak方法。
</>復制代碼
class son2(father):
def speak(self):
print("I can speak 2!")
五、練熟基礎:2048小游戲項目的實現與實戰
上面為大家介紹的Python知識非常零散,但是也非常重要,既然想要掌握Python,就需要使用實際項目進行鞏固和提升,當將項目實現之后,對應的能力也就自然掌握了。
本文由云棲志愿小組賈子甲整理,編輯百見,原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17693.html
摘要:語料庫是由文本構成的數據集通過提供現成的文本數據來輔助文本處理。那么可以用來做什么呢我自己是一名從事是不錯的入門選項。大數據和人工智能是機器學習和的主要開發語言。 Python培訓有哪些內容?很多零基礎學員不知道Python軟件是干什么用的?Python軟件是Python工程師編寫代碼時所需...
閱讀 2428·2023-04-26 00:46
閱讀 586·2023-04-25 21:36
閱讀 733·2021-11-24 10:19
閱讀 2277·2021-11-23 09:51
閱讀 1023·2021-10-21 09:39
閱讀 835·2021-09-22 10:02
閱讀 1673·2021-09-03 10:29
閱讀 2696·2019-08-30 15:53