Python又來已久.但一直沒有細致梳理過.本篇算是在體驗Coding Python過程中做的一些零散的筆記.主要使用過程一些發現和感受.隨時更新. 在參考文檔寫了一個簡單While循環控制Console輸出.
1: #my first python application console something
2: principal=1000 #inital amount
3: rate=0.05 #interest rate
4: numyears=5 #number of years
5: year=1
6:
7: while year<numyears:
8: principal=principal*(1+rate)
9: print(year,principal)
10: year+=1
代碼很簡單.第一感覺Python代碼可讀性很強.就像閱讀一段句子一般. 但是Python在代碼處理方式上有很多細節.可能從代碼排版形式並沒有不同.但是如果不細究是看不到Python這樣設計的初衷.俗話說醉翁之意不在酒.
首先Python中每個執行語句都是自然換行的方式結束的.相對於C#和Java 標准的分號是存在明顯的區別的.
1: int principal=1000;
2: Doule rate=0.05;
如果說在一行編寫多條執行語句.Python其實也考慮到這點需求.這時語句之間必須使用分號進行分隔即可.就像聲明還可以采用這種方式寫在一行:
1: first_name="chen"; last_name="kai"; my_name=first_name+last_name;
2: print(my_name)
但Python對這種寫在一行的代碼格式並不提倡.官方文檔中提到這樣的寫法最好用於測試調試語句.因為這樣可以很方便在調試只刪一行就刪除全部的調試語句.While語句循環控制中.首先判斷條件表達式是否為真.如果為真則繼續執行冒號后面的語句.其實冒號后面的全部的縮近語句塊為循環體.
相對於C#和Java采用大括號的方式來標識語法快邏輯的完整邊界.而Python采用縮進塊的方式來表示程序邏輯.在冒號后三條語句循環體. Python並未指定縮進的空白[空格或制表符]. 但是在語法唯一的要求是同一層次的語句必須有相同的縮進空白. 類似 現在修改一下循環中縮進空白如下:
1: #my first python application console something
2: principal=1000 #inital amount
3: rate=0.05 #interest rate
4: numyears=5 #number of years
5: year=1
6:
7: while year<numyears:
8: principal=principal*(1+rate)
9: print(year,principal)
10: year+=1
當你F5調試.會發現Console輸出如下:
調試出錯.提示UnExpected Indent. 很明顯Python編譯器認為這種寫法是一種語法錯誤.編譯就不會通過.
其實Python的作者Guido van Rossum是故意設計一種限制性很強的語法.這樣做雖然會導致有經驗開發者剛開始使用不習慣.但它也把其他編程語言不好編程習慣拒之門外.保證使用Python過程是足夠Clean.類似如上Python語法縮進規則.則在語法層次已經做了明確的規范.
另外可以看到Python語法塊邊界定義很奇特. 完全是由每行的首字符在這一行的位置來決定.相對C#和Java.是用一對花括號{}來明確的定出模塊的邊界的,與字符的位置毫無關系.曾經這種做法在業界引起過一定爭議.因為自從C這類的語言誕生后,語言的語法含義與字符的排列方式分離開來,曾經被認為是一種程序語言的進步。不過不可否認的是,Pythone這種語法規則強制開發人員縮進(包括if,for和函數定義等所有需要使用模塊的地方),Python程序自身確實變得更加清晰和美觀.
通過這一段代碼應該能夠明顯感受相對於C# Java Perl語言Python可讀性很強.其實要明白為何Python 為何這樣做?主要歸結於Python語言設計哲學:
Python的設計哲學是“優雅”、“明確”、“簡單”。因此Perl語言中“總是有多種方法來做同一件事”的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是“用一種方法,最好是只有一種方法來做一件事”。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由於這種設計觀念的差異,Python源代碼通常被認為比Perl具備更好的可讀性
在這種設計哲學指導下.你會發現對於同一需求.用Python編寫后代碼基本不存在歧義.因為本身做法就是很明確的.這對於跨平台移植來說無疑來說是一個很大的優點.代碼可以高度復用.
條件語句If用法如下:
1: #condition if
2: first_num=120;
3: second_num=100;
4: if first_num<second_num:
5: print("first < second")
6: else:
7: print("first >= second")
如上是我按照C#判斷語句習慣寫的.編譯可以通過.可以發現IF-Else采用縮進方式來明確代碼塊邊界.Else在官方文檔在某些情況下可以省略的。寫法如下:
1: if first_num<second_num: print("first < second")
2: else: print("first >= second")
當if-Else只有一個語句.可以再語法上不適用縮進方式.這種寫法編譯會通過.但是Python並不推薦.除掉縮進也就在某種程度上破壞了代碼的可讀性.在判斷可以添加判斷條件:
1: if first_num>third_num and second_num<fourth_num:
2: pass
3: if not (first_num>third_num or third_num>second_num):
4: print("right way")
在判斷語句Python設計可以通過Or and或Not關鍵字來建立條件表達式. 而不是類似C#采用字符|| 和&& 方式.我一直認為明確具有語義的語言要比冷冰冰的字符要更有意義.主要是因為好讀切字義簡單容易理解.