初识Python
2013-02-01 16:13 chenkai 阅读(3960) 评论(0) 编辑 收藏 举报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#采用字符|| 和&& 方式.我一直认为明确具有语义的语言要比冷冰冰的字符要更有意义.主要是因为好读切字义简单容易理解.