|
一、Python哲学
Beautiful is better than ugly.
美优于丑。
Explicit is better than implicit.
直白优于隐晦。
Simple is better than complex[1].
简单优于复杂。
Complex is better than complicated[2].
复杂优于纠结。
Flat is better than nested.
扁平优于嵌套。
Sparse is better than dense[3].
稀疏优于稠密。
Readability counts.
可读性有重要意义的。
Special cases aren't special enough to break the rules.
特例可以,但不能特例到打破规则。
- Although practicality beats purity.
尽管我们在纯粹性和实用性之间是倾向实用性的。
Errors should never pass silently.
出错决不允许静静地Pass。
- Unless explicitly silenced.
除非明确的说明了是静静地Pass。
In the face of ambiguity, refuse the temptation to guess. 面对二义性情况时,要拒绝任何猜的诱惑。
There should be one-- and preferably only one --obvious way to do it.
显而易见的做法应该是一个,并且宁愿只有一个。
- Although that way may not be obvious at first unless you're Dutch[4].
尽管这个做法可能刚开始的时候不是那么显而易见的,毕竟你不是荷兰人Python之父。
Now is better than never.
“现在” 优于 “决不”。
- Although never is often better than right now.
尽管 “决不” 常常优于 “马上”。
If the implementation is hard to explain, it's a bad idea. 如果一个实现很难解释清楚,说明实现的idea有问题。
If the implementation is easy to explain, it may be a good idea.
如果一个实现很容易解释清楚,那可能是个好的实现idea。
NameSpaces are one honking great idea -- let's do more of those!
Namespace真真儿是个好想法 — 放手多多使用吧!
译注
[1] [2] 单词complex的意思是 复杂,而complicated 是 结构复杂。
在计算机中,单个模块复杂理解为complex,而多个模块互相关联的复杂理解为complicated。用计算机的术语,complicated是模块之间“耦合”很多,说明理解不深,设计不好。
软件的核心复杂度不可避免,但要这些集中一起,给使用一个干净高级的接口,也就是说:如果complex(核心复杂度)不可避免可以接受,但complicated一定要想办法去除,随着系统深入理解,模块职责的划分会更简明干净。
PS: 核心复杂度的说明讨论可以参见《代码大全》一书。
翻译上,complex翻成 复杂,complicated翻成 纠结。
[3] 稀疏、稠密指的是代码行中操作的疏密。C的Geek,喜欢写稠密的代码,比如使用++,--运算符来压缩代码行。在Python看来,这个做法不可取,即会让代码更可能出错(如自增操作的负作用),也降低了代码的可读性。
[4] 这里的荷兰人指Python 之父Guido,参见说明:http://qianjigui.javaeye.com/blog/266365
原文来自:http://oldratlee.com/147/tech/python/python-philosophy.html
二、关于Python
Python是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。
Python又是一门强类型语言,即一种强制类型定义的语言。如果有一个整数,不明确的进行转换就不能当成一个字符串等随意使用。
而Javascript是一门弱类型语言,它们对比如下:
//Js演示
var s1='12';
var s2=3
document.write(s1+s2) //输出123
//Python演示
str1='12'
s = 3
print str1+s #TypeError: cannot concatenate 'str' and 'int' objects
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序.
翻译的方式有两种:一个是编译,一个是解释。
编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,以后要运行的话就不用重复翻译了,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。 解释型语言在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨平台性好,如Basic。 脚本语言介于HTML和C,C++,Java,C#等编程语言之间。
HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。 脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.
脚本与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。 注:脚本语言一般都有相应的脚本引擎来解释执行。他们一般需要解释器才能运行。JAVASCRIPT、ASP、PHP、PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
脚本语言是一种解释性的语言,例如vbscript、javascript、installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在。 脚本语言不需要编译,可以直接用,由解释器来负责解释。 脚本语言一般都是以文本形式存在,类似于一种命令。
举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件。你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言。
|
|
|