Python這種腳本語言福哥已經給大家介紹過了,現在童鞋們應該已經會安裝python的開發環境了,接下來我們需要針對python語言進行一個系統的學習。
首先學習一門程式語言最先要學習的是語言的語法,學習程式語言的語法包括常量與變量、輸入與輸出、條件語句(if)、循環語句(for,while)、交換語句(switch,case)、函數(function)、對象(class),這個和之前福哥帶著童鞋們接觸c/c++、java、php三種主流程式語言的基本語法的順序是一樣的。不過學習過c/c++、java、php語言的老鳥會有一種感覺,就是python的語法真BT啊~~
V1.5版本增加了如下內容的教程:
函數參數默認值的使用
對象類型屬性和數組類型屬性的坑
拋出異常語句的技巧
一行一個命令,不需要以「;」結尾
邏輯語句使用4個空格縮進,使用邏輯語句的時候,例如:if、for、try等等,需要將子邏輯代碼每一行都使用4個空格縮進一下
行注釋使用「#」,如果要為代碼寫注釋信息,需要使用「#」符號
塊注釋是不支持的,python並不支持其他語言都支持的「/* ... */」塊注釋語法
python屬於弱類型的語言,所以python的變量是沒有類型的
whoAmI = "同福"howOldAmI = 353.2 類型轉換雖然python是弱類型,但是字符串和數字也是要區別對待的(這一點php就做的比較徹底,各種類型的變量可以隨便混用)
strInt = "35"realInt = int(strInt)
realInt = 35strInt = str(realInt)3.3 null在python裡是沒有null的,取而代之是None,當函數處理異常時候一般情況下得到的都是None。判斷None需要使用is關鍵字而不是「==」運算符
4. 輸入與輸出4.1 輸入python2輸入不能使用input()了,需要引入sys軟體包,使用sys.stdin對象
import sys
print ("你叫什麼?")yourName = sys.stdin.readline().strip()print ("你多大了?")howOldAreYou = sys.stdin.readline().strip()
print ("你是" + yourName + ",你今年" + howOldAreYou + "歲")4.2 輸出python輸出語句使用 print 命令
whoAmI = "同福"howOldAmI = 35
print ("我叫" + whoAmI + ",我今年" + str(howOldAmI) + "歲")5. 條件語句(if)
python的條件語句還是使用if,這時候就需要「縮進」了
python的else if換成了elif,這個和linux下的shell語言是一樣的
whoAmI = "同福"howOldAmI = 35if whoAmI is not None and whoAmI != "": print whoAmIif howOldAmI is not None and howOldAmI == 35: print howOldAmI if howOldAmI == 12: print "好年輕啊!"elif howOldAmI == 25: print "好帥啊!"else: print "你到底多大啊?"6. 循環語句(for,while)6.1 按次循環python的按次循環很奇怪,需要通過range實現
howOldAmI = 0for i in range(0, 35): howOldAmI = howOldAmI + 1print howOldAmI6.2 條件循環python的條件循環基本和其他語言相似
howOldAmI = 0i = 0while i < 35: howOldAmI = howOldAmI + 1 i = i + 1print howOldAmI7. 交換語句(switch,case)python沒有switch語法,只能使用if、elif、else實現了
8. 函數(function)函數定義使用def關鍵字
8.1 無返回值無返回值的函數定義
def showInfo(): print "同福" print 35
showInfo()8.2 有返回值有返回值的函數定義,返回值使用return關鍵字返回出來
def getName(): return "同福"
def getAge():
return 35;
print ("我叫" + getName() + ",我今年" + str(getAge()) + "歲")8.3 有參數有參數的函數定義
def showInfo(name, age): print ("我叫" + name + ",我今年" + str(age) + "歲")
showInfo("同福", 35)8.4 有默認值參數函數參數可以指定默認值,有默認值的參數在調用的時候可以不傳值進來
def showInfo(name, age=35): print ("我叫" + name + ",我今年" + str(age) + "歲")
showInfo("同福")需要注意的是,如果一個參數設置了默認值,其後面的參數也都必須設置默認值,否則會報錯
def showInfo(name, age=35, city): print ("我叫" + name + ",我今年" + str(age) + "歲,我住在" + city)
showInfo("同福", "北京")8.5 參數定向傳值Python有個很NB的設計,如果函數有多個參數設置了默認值,可以通過指定設置了默認值的參數的名稱來直接對其傳值,即使它前面還有其他設置了默認值的參數
def showInfo(name, age=35, city="未知"): print ("我叫" + name + ",我今年" + str(age) + "歲,我住在" + city)
showInfo("同福", city="北京")9. 對象(class)python的對象定義語法逆天了簡直
9.1 基本語法咱們看一個例子先
class fuge: name = "同福" age = 35
def setName(self, name): self.name = name def setAge(self, age): self.age = age def showInfo(self, num): print ("[" + str(num) + "] 我叫" + self.name + ",我今年" + str(self.age) + "歲") def callShowInfo(self): self.showInfo(6)
myFuge = fuge()myFuge2 = fuge();myFuge.showInfo(1)myFuge2.setName("福哥")myFuge2.setAge(36)myFuge.showInfo(2)myFuge2.showInfo(3)myFuge.callShowInfo()
大家可以和福哥一塊兒看看python的對象編程有多麼另類
對象聲明使用class(這還是比較正規的)
屬性聲明沒有修飾符(這也還能接受)
方法聲明使用def(把它想成function就好)
每個方法必須有參數,且第一個參數為指向對象自身的指針(我去這是什麼鬼!?)
方法內調用屬性使用對象指針(這個...好吧,真能糊弄啊~)
方法內調用其他方法使用對象指針,且不能傳遞對象指針參數(福哥已經無語了!!)
9.2 對象屬性和數組屬性的坑python的對象屬性真的是坑你沒商量,請看下面的例子和輸出結果
class webDev: languages={}
def add(self, language): self.languages[language] = language
def dump(self, num): print ("[" + str(num) + "]") for d in self.languages: print ("[" + d +"] " + self.languages[d])
web1 = webDev()web1.add("PHP")
web2 = webDev()web2.add("Java")
web1.dump(1)web2.dump(2)
我勒個去,兩個對象實例的languages屬性串了,這是什麼鬼啊???
如果對象屬性是對象類型或者數組類型,那麼這個屬性相對於每一個實例都是共享的
這實在是太變態了,希望官方把它當作bug處理一下吧~~
下面福哥給出一個變通的辦法,可以避免這種bug的出現。
如果我們要使用對象類型的屬性或者數組類型的屬性,可以在構造器裡面進行初始化
class webDev: languages={} def __init__(self): self.languages={}
def add(self, language): self.languages[language] = language
def dump(self, num): print ("[" + str(num) + "]") for d in self.languages: print ("[" + d +"] " + self.languages[d])
web1 = webDev()web1.add("PHP")
web2 = webDev()web2.add("Java")
web1.dump(1)web2.dump(2)10. 捕獲異常語句(try)
很多時候我們所期望的情況和實際的情況是有差距的,這個時候會出現意想不到的情況,這種情況我們稱之為異常情況(exception),一般情況下,遇到這種情況程序會終止執行,這不是我們所希望的
為了解決這個問題,我們可以使用try語句去嘗試執行我們的程序代碼,如果出現了異常我們可以主動設計程序的處理方案,避免程序終止執行
try: print (fuge + ",是你嗎?")except Exception as e: print efinally: print "哦,我知道了"解釋一下
try:這部分代碼是主邏輯,python會嘗試運行這段代碼
except:如果主邏輯執行出現異常情況會將異常信息捕獲起來放入變量e,並執行用戶的處理方案
finally(可選):無論主邏輯執行是否出現異常情況,這段代碼都會被執行,這段是可選的
11. 拋出異常語句(raise)一些情況下,我們的程序無法繼續處理,這時候就需要告知上一層的程序代碼程序運行遇到了問題。這種情況下,我們可以使用raise語句主動拋出一個異常狀態出來,交給上一層的程序代碼去處理
上一層程序代碼也就是調用當前函數的程序代碼,它接收到我們拋出來的異常可以通過try進行捕獲,也可以不管這個異常,那麼python解析器就會把這個異常顯示給執行腳本的人看了
def showInfo(name, age): if age == 0:
raise Exception("沒有人的歲數是 0 歲好嗎?") print ("我叫" + name + ",我今年" + str(age) + "歲")
showInfo("同福", 0)12. 引用自定義包
我們編程python程序時候,在將公共處理封裝到函數裡面或者對象裡面,這樣業務邏輯代碼會看起來非常清爽。如果一些函數或者對象是屬於公共的,多處都需要使用這些函數或者對象,那麼應該怎麼辦呢?
我們可以將一些函數或者對象放到一個py文件裡,在需要調用這些函數或者對象的py文件裡面引用它們
12.1 同級目錄如果引入的自定義(package)的py文件和調用(main)的py文件在同一級目錄下,可以直接引入這個自定義(package)的py文件
12.1.1 結構package.py
12.1.2 main.py12.2 不同級目錄
main.py如果引入的自定義(package)的py文件在調用(main)的py文件不在同一級目錄下,需要在自定義(package)的py文件所在目錄建立空文件__init__.py文件
12.2.1 結構lib/__init__.py
12.2.2 main.py
lib/package.py
main.pyfrom lib.package import *13. 總結python的語法很奇怪,與常規的程式語言的語法格式區別很大,但是就沒有學會編程的人首次接觸python的時候,他們的反饋是:感覺很容易理解。不得不說,這一點真的是始料不及的,這個python語言的語法確實值得我們這些古董級的程式設計師反思一下。
福哥嘗試著用最容易理解的方式給童鞋們講解各種程式語言的語法和開發技巧,希望童鞋們可以認真學習。如果遇到了問題,可以將真實的感受反饋給福哥,福哥會想辦法以更加好理解的方式講解給大家~~
Python函數參數默認值的使用
選擇一個開源協議來保護自己的程序代碼
免費看文章,自己學技術
每一篇文章都是福哥一個字一個字地敲出來的,都是福哥原創的。
每一篇文章都是經過了福哥的反覆驗證的,都是可以正常使用的。