pythoning ——1、基础篇

1、python之禅

原文:http://blog.csdn.net/gzlaiyonghao/article/details/2151918

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

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.

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.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

翻译和解释

Python之禅 by Tim Peters

优美胜于丑陋(Python 以编写优美的代码为目标)

明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)

简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)

复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)

扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)

间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)

可读性很重要(优美的代码是可读的)

即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)

不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)

当存在多种可能,不要尝试去猜测

而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)

虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )

做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)

如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)

命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

2、python特点

原文:http://www.python.org/

1、面向对象
从根本上讲,Python 是一种面向对象的语言。它的类模块支持多态、操作符重载和多重继承等高级概念,并且以Python 特有的简洁的语法和类型,OOP 十分易于使用。事实上,即使你不懂这些术语,仍会发现学习Python 比学习其他OOP 语言要容易得多。
除了作为一种强大的代码构建和重用手段以外,Python 的OOP 特性使它成为面向对象系统语言如C++ 和Java 的理想脚本工具。例如,通过适当的粘接代码,Python 程序可以对C++ 、Java 和C# 的类进行子类的定制。
OOP 是Python 的一个选择而已,这一点非常重要。不必强迫自己立马成为一个面向对象高手,你同样可以继续深入学习。就像C++ 一样,Python 既支持面向对象编程也支持面向过程编程的模式。如果条件允许的话,其面向对象的工具即刻生效。这对处于预先设计阶段的策略开发模式十分有用。
2、免费
Python 的使用和分发是完全免费的。就像其他的开源软件一样,例如,Tcl 、Perl 、Linux 和Apache 。你可以从Internet 上免费获得Python 系统的源代码。复制Python ,将其嵌入你的系统或者随产品一起发布都没有任何限制。实际上,如果你愿意的话,甚至可以销售它的源代码。
但请别误会:"免费"并不代表" 无支持"。恰恰相反,Python 的在线社区对用户需求的响应和商业软件一样快。而且,由于Python 完全开放源代码,提高了开发者的实力,并产生了一个很大的专家团队。尽管学习研究或改变一个程序语言的实现并不是对每一个人来说都那么有趣,但是当你知道还有源代码作为最终的帮助和无尽的文档资源是多么的令人欣慰。你不需要去依赖商业厂商。
Python 的开发是由社区驱动的,是Internet 大范围的协同合作努力的结果。这个团体包括Python 的创始者Guido van Rossum:Python 社区内公认的"终身的慈善独裁者"[Benevolent Dictator for Life (BDFL) ] 。Python 语言的改变必须遵循一套规范的有约束力的程序(称作PEP 流程),并需要经过规范的测试系统和BDFL 进行彻底检查。值得庆幸的是,正是这样使得Python 相对于其他语言可以保守地持续改进。
3、可移植
Python 的标准实现是由可移植的ANSI C 编写的,可以在目前所有的主流平台上编译和运行。例如,如今从PDA 到超级计算机,到处可以见到Python 在运行。Python 可以在下列平台上运行(这里只是部分列表):
Linux 和UNIX 系统。
微软Windows 和DOS (所有版本)。
Mac OS (包括OS X 和Classic )。
BeOS 、OS/2 、VMS 和QNX 。
实时操作系统,例如,VxWorks 。
Cray 超级计算机和IBM 大型机。
运行Palm OS 、PocketPC 和Linux 的PDA 。
运行Windows Mobile 和Symbian OS 的移动电话。
游戏终端和iPod 。
还有更多。
除了语言解释器本身以外,Python 发行时自带的标准库和模块在实现上也都尽可能地考虑到了跨平台的移植性。此外,Python 程序自动编译成可移植的字节码,这些字节码在已安装兼容版本Python 的平台上运行的结果都是相同的。
这些意味着Python 程序的核心语言和标准库可以在Linux 、Windows 和其他带有Python 解释器的平台无差别的运行。大多数Python 外围接口都有平台相关的扩展(例如,COM 支持Windows ),但是核心语言和库在任何平台都一样。就像之前我们提到的那样,Python 还包含了一个叫做Tkinter 的Tk GUI 工具包,它可以使Python 程序实现功能完整的无需做任何修改即可在所有主流GUI 平台运行的用户图形界面。
4、功能强大
从特性的观点来看,Python 是一个混合体。它丰富的工具集使它介于传统的脚本语言(例如,Tcl 、Scheme 和Perl )和系统语言(例如,C、C++ 和Java) 之间。Python 提供了所有脚本语言的简单和易用性,并且具有在编译语言中才能找到的高级软件工程工具。不像其他脚本语言,这种结合使Python 在长期大型的开发项目中十分有用。下面是一些Python 工具箱中的工具简介。
动态类型Python 在运行过程中随时跟踪对象的种类,不需要代码中关于复杂的类型和大小的声明。事实上,你将在第6章中看到,Python 中没有类型或变量声明这回事。因为Python 代码不是约束数据的类型,它往往自动地应用了一种广义上的对象。
自动内存管理Python 自动进行对象分配,当对象不再使用时将自动撤销对象("垃圾回收"),当需要时自动扩展或收缩。Python 能够代替你进行底层的内存管理。
大型程序支持为了能够建立更大规模的系统,Python 包含了模块、类和异常等工具。这些工具允许你组织系统为组件,使用OOP 重用并定制代码,并以一种优雅的方式处理事件和错误。
内置对象类型Python 提供了常用的数据结构作为语言的基本组成部分。例如,列表(list )、字典(dictionary )、字符串(string )。我们将会看到,它们灵活并易于使用。例如,内置对象可以根据需求扩展或收缩,可以任意地组织复杂的信息等。
内置工具为了对以上对象类型进行处理,Python 自带了许多强大的标准操作,包括合并(concatenation )、分片(slice )、排序(sort )和映射(mapping )等。
库工具为了完成更多特定的任务,Python 预置了许多预编码的库工具,从正则表达式匹配到网络都支持。Python 的库工具在很多应用级的操作中发挥作用。
第三方工具由于 Python 是开放源代码的,它鼓励开发者提供Python 内置工具之外的预编码工具。从网络上,可以找到COM 、图像处理、CORBA ORB 、XML 、数据库等很多免费的支持工具。
除了这一系列的Python 工具外,Python 保持了相当简洁的语法和设计。综合这一切得到的就是一个具有脚本语言所有可用性的强大编程工具。
5、可混合
Python 程序可以以多种方式轻易地与其他语言编写的组件"粘接"在一起。例如,Python 的C语言API 可以帮助Python 程序灵活地调用C程序。这意味着可以根据需要给Python 程序添加功能,或者在其他环境系统中使用Python 。例如,将Python 与C或者C++ 写成的库文件混合起来,使Python 成为一个前端语言和定制工具。就像之前我们所提到过的那样,这使Python 成为一个很好的快速原型工具;首先出于开发速度的考虑,系统可以先使用Python 实现,之后转移至C,根据不同时期性能的需要逐步实现系统。
6、使用简单
运行Python 程序,只需要简单地键入Python 程序并运行就可以了。不需要其他语言(例如,C或C++ )所必须的编译和链接等中间步骤。Python 可立即执行程序,这形成了一种交互式编程体验和不同情况下快速调整的能力,往往在修改代码后能立即看到程序改变后的效果。
当然,开发周期短仅仅是Python 易用性的一方面的体现。Python 提供了简洁的语法和强大的内置工具。实际上,Python 曾有种说法叫做"可执行的伪代码"。由于它减少了其他工具常见的复杂性,当实现相同的功能时,用Python 程序比采用C、C++ 和Java 编写的程序更为简单、小巧,也更灵活。
7、Python 是工程,不是艺术
当Python 于20 世纪90 年代初期出现在软件舞台上时,曾经引发其拥护者和另一个受欢迎脚本语言Perl 的拥护者之间的冲突,但现今已成为经典的争论。我们认为今天这种争论令人厌倦,也没有根据,开发人员都很聪明,可以找到他们自己的结论。然而,这是我在培训课程上时常被问到的问题之一,所以在此对这个话题说几句话,似乎是合适的。
故事是这样的:你可以用Python 做到一切用Perl 能做到的事,但是,做好之后,还可以阅读自己的程序代码。就是因为这样,两者的领域大部分重叠,但是,Python 更专注于产生可读性的代码。就大多数人而言,Python 强化了可读性,转换为了代码可重用性和可维护性,使得Python 更适合用于不是写一次就丢掉的程序。Perl 程序代码很容易写,但是很难读。由于多数软件在最初的创建后都有较长的生命周期,所以很多人认为Python 是一种更有效的工具。
这个故事反应出两个语言的设计者的背景,并体现出了人们选择使用Python 的一些主要原因。Python 的创立者所受的是数学家的训练,因此,他创造出来的语言具有高度的统一性,其语法和工具集都相当一致。再者,就像数学一样,其设计也具有正交性(orthogonal ),也就是这门语言大多数组成部分都遵循一小组核心概念。例如,一旦掌握Python 的多态,剩下的就只是细节而已。
与之相对比,Perl 语言的创立者是语言学家,而其设计反应了这种传统。Perl 中,相同任务有很多方式可以完成,并且语言材料的交互对背景环境敏感,有时还有相当微妙的方式,就像自然语言那样。就像著名的Perl 所说的格言:"完成的方法不止一种。"有了这种设计,Perl 语言及其用户社群在编写代码时,就一直在鼓励表达式的自由化。一个人的Perl 代码可能和另一个人的完全不同。事实上,编写独特、充满技巧性的代码,常常是Perl 用户之间的骄傲来源。
但是,任何做过任何实质性的代码维护工作的人,应该都可以证实,表达式自由度是很棒的艺术,但是,对工程来说就令人厌恶了。在工程世界中,我们需要最小化功能集和可预测性。在工程世界中,表达式自由度会造成维护的噩梦。不止一位Perl 用户向我们透漏过,太过于自由的结果通常就是程序很容易重头写起,但修改起来就不是那么容易了。
考虑一下:当人们在作画或雕塑时,他们是为自己做,为了纯粹美学考虑。其他人日后去修改图画或雕像的可能性很低。这是艺术和工程之间关键的差异。当人们在编写软件时,他们不是为自己写。事实上,他们甚至不是专门为计算机写的。而实际上,优秀的程序员知道,代码是为下一个会阅读它而进行维护或重用的人写的。如果那个人无法理解代码,在现实的开发场景中,就毫无用处了。
这就是很多人认为Python 最有别于Perl 这类描述语言的地方。因为Python 的语法模型几乎会强迫用户编写可读的代码,所以Python 程序会引导他们往完整的软件开发循环流程前进。此外,因为Python 强调了诸如有限互动、统一性、规则性以及一致性这些概念,因此,会更进一步促进代码在首次编写后能够长期使用。
长期以来,Python 本身专注于代码质量,提高了程序员的生产力,以及程序员的满意度。Python 程序员也变得富有创意,以后就知道,语言本身的确对某些任务提供了多种解决办法。不过,本质上,Python 鼓励优秀的工程的方式,是其他脚本语言通常所不具备的。
至少,这是许多采用Python 的人之间所具有的共识。当然,你应该要自行判断这类说法,也就是通过了解Python 提供了什么给你。为了帮助你们入门,让我们进行下一章的学习吧。
8、简单易学
这一部分引出了本书的重点:相对于其他编程语言,Python 语言的核心是惊人的简单易学。实际上,你可以在几天内(如果你是有经验的程序员,或许只需要几个小时)写出不错的Python 代码。这对于那些想学习语言可以在工作中应用的专业人员来说是一个好消息,同样对于那些使用Python 进行定制或控制系统的终端用户来说也是一个好消息。如今,许多系统依赖于终端用户可以很快地学会Python 以便定制其代码的外围工具,从而提供较少的支持甚至不提供支持。尽管Python 还是有很多高级编程工具,但不论对初学者还是行家高手来说,Python 的核心语言仍是相当简单的。
名字来源于 Monty Python
Python 名字的来源这不算是一项技术,但是,这似乎是令人很惊讶、保护得很好的秘密,而我们希望把它全盘托出。尽管Python 世界中都是蟒蛇的图标,但事实是,Python 创立者Guido van Rossum 是以BBC 喜剧Monty Python's Flying Circus 来命名的。他是Monty Python 的大影迷,而很多软件开发人员也是(事实上,这两个领域似乎有种对称)。
这给 Python 代码的例子加入一种幽默的特质。比如,一般来说,传统常规的变量名为"foo "和"bar ",在Python 的世界中变成了"spam "和"eggs "。而有时出现的"Brian "、"ni "、"shrubbery "等也是这样来的。这种方式甚至很大程度上影响了Python 社区:Python 会议上的演讲往往叫做"The Spanish Inquisition "。
当然,如果你熟悉这个幽默剧的话,所有这些你都会觉得很有趣,否则就没那么有意思了。你没有必要为了理解引自 Monty Python (也许本书中你就会找到)的例子而刻意去熟悉这一串剧情,但是至少你现在应该知道它们的来源。 

3、变量与赋值

1、变量命名规范:

python可以用大小写字母、数字和_来命名变量,但首字母不能是数字,不能用python关键字来命名(如下)。python命名应尽量清晰明了的表达变量本身用来做什么的,可以使用单词首字母大小写及单词和下划线结合来命名。

False      class      finally    is         return
None       continue   for        lambda     try
True       def        from       nonlocal   while
and        del        global     not        with
as         elif       if         or         yield
assert     else       import     pass
break      except     in         raise
2、赋值
python赋值时会确定变量的类型,
>>> a = 1
>>> type(a)
<type 'int'>
>>> a = True
>>> type(a)
<type 'bool'>

python赋值可以通过如下几种赋值方式赋值:

>>> a,b,c = 1,2,3
>>> print a
1
>>> print b
2

>>> a
(1, 2, 3)

 

4、输入与输出

1、输入

python2.*版本输入通过函数raw_input()来键入内容,该函数返回结果为输入内容,python3.*以后则使用input()函数。以python3.5为例:

>>> a
(1, 2, 3)

2、输出

python使用print()函数将变量输出到控制台:

>>> print ("test")
test

5、控制语句

1、if...elif...else

if 后面接判断语句,如果为真则执行if中的代码块。

elif 如果if不成立,则判断elif后面的语句是否为真,如果为真则执行elif后面的代码块。

else 如果上面的条件都不成立,则执行else代码块。

>>> if 1==2:
...     print('1==2')
... elif 1>2:
...     print('1>2')
... else:
...     print('1<2')
...
1<2

2、while

while 后面接条件语句,如果成立,则执行其中的代码,执行完毕后重新判断该条件是否依旧成立,成立则继续执行,直至条件不成立。

>>> a = 0
>>> while a<3:
...     a = a+1
...     print('****')
...
****
****
****

3、for

for 后面定义一个元素,使其作为一个动态变量,列表、集合、字典或者元组中的所有元素,执行其下的代码。

>>> for i in range(1,5):
...     print('i值为:',i)
...
i值为: 1
i值为: 2
i值为: 3
i值为: 4

posted @ 2016-05-13 21:47  fukuda  阅读(241)  评论(0编辑  收藏  举报