Python入门
By nincompoop
官方介绍:Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。
创造者:Guido van Rossum(吉多·范罗苏姆【荷兰】)
它的特色:简单、易学、免费、开源、高层语言、可移植性、解释性、面向对象、可扩展性、可嵌入性、丰富的库。
官网:http://python.org/
Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。
版本:3.x与2.x (Python 3.0于2008年12月3日发布,此版不完全兼容之前的Python源代码。不过,很多新特性后来也被移植到旧的Python 2.6/2.7版本。)
Hello World 程序
下面是一个在标准输设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
- 适用于Python 3.0以上版本以及Python 2.6、Python 2.7
- 适用于Python 2.6以下版本以及Python 2.6、Python 2.7
print("Hello, world!")
print "Hello, world!"
将这行程序码保存为myhello.py。然后在Linux终端机下输入python myhello.py
,或者在Windows命令编辑字符下输入myhello.py
运行。Python也可以单步直译运行。运行Python解释器进入交互式命令行的环境,你可以在提示符号>>>旁输入print(“Hello, world!”),按Enter键输出结果:
- 适用于Python 3.0以上版本以及Python 2.6、Python 2.7
- 适用于Python 2.6以下版本以及Python 2.6、Python 2.7
>>> print("Hello, world!")
Hello, world!
>>> print "Hello, world!"
Hello, world!
注意,低于3.0版本的Python,”Hello, world!”周围不需要括号。Python 3.x与Python 2.x的print语法是不一样的。
Python语法
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。
缩进(告别{}!)
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。例如if
语句:
根据PEP的规定,必须使用4个空格来表示每级缩进。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。
语句和控制流
if
语句,当条件成立时运行语句块。经常与else
, elif
(相当于else if
) 配合使用。
for
语句,遍列列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
while
语句,当条件为真时,循环运行语句块。
try
语句。与except
,finally
配合使用处理在程序运行中出现的异常情况。
class
语句。用于定义类型。
def
语句。用于定义函数和类型的方法。
pass
语句。表示此行为空,不运行任何操作。
assert
语句。用于程序调适阶段时测试运行条件是否满足。
with
语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。
yield
语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。
raise
语句。制造一个错误。
import
语句。导入一个模块或包。
from import
语句。从包导入模块或从模块导入某个对象。
import as
语句。将导入的对象赋值给一个变量。
in
语句。判断一个对象是否在一个字符串/列表/元组里。
表达式
Python的表达式写法与C/C++类似。只是在某些写法有所差别。
- 主要的算术运算符与C/C++类似。
+, -, *, /, //, **, ~, %
分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。>>, <<
表示右移和左移。&, |, ^
表示二进制的AND, OR, XOR
运算。>, <, ==, !=, <=, >=
用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>
必须应用于整数。
- Python使用
and
, or
, not
表示逻辑运算。
is, is not
用于比较两个变量是否是同一个对象。in, not in
用于判断一个对象是否属于另外一个对象。
- Python支持“列表推导式”(list comprehension),比如计算0-9的平方和:
- Python使用lambda表示匿名函数。匿名函数体只能是表达式。比如:
- Python使用y if cond else x表示条件表达式。意思是当cond为真时,表达式的值为y,否则表达式的值为x。相当于C++和Java里的cond?y:x。
- Python区分列表(list)和元组(tuple)两种类型。list的写法是[1,2,3],而tuple的写法是(1,2,3)。可以改变list中的元素,而不能改变tuple。在某些情况下,tuple的括号可以省略。tuple对于赋值语句有特殊的处理。因此,可以同时赋值给多个变量,比如:
- Python使用‘(单引号)和“(双引号)来表示字符串。与Perl、Unix Shell语言或者Ruby、Groovy等语言不一样,两种符号作用相同。一般地,如果字符串中出现了双引号,就使用单引号来表示字符串;反之则使用双引号。如果都没有出现,就依个人喜好选择。出现在字符串中的(反斜杠)被解释为特殊字符,比如n表示换行符。表达式前加r指示Python不解释字符串中出现的。这种写法通常用于编写正则表达式或者Windows文件路径。
- Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的类型有str, bytes, list, tuple等。它的语法是…[left:right]或者…[left:right:stride]。假定nums变量的值是[1, 3, 5, 7, 8, 13, 20],那么下面几个语句为真:
- nums[2:5] == [5, 7, 8] 从下标为2的元素切割到下标为5的元素,但不包含下标为5的元素。
- nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最后一个元素。
- nums[:-3] == [1, 3, 5, 7] 从最开始的元素一直切割到倒数第3个元素。
- nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回所有元素。改变新的列表不会影响到nums。
- nums[1:5:2] == [3, 7] 从下标为1的元素切割到下标为5的元素但不包含下标为5的元素,且步长为2
函数
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()
打印出函数的使用帮助。比如:
对象的方法
对象的方法是指绑定到对象的函数。调用对象方法的语法是instance.method(arguments)
。它等价于调用Class.method(instance, arguments)
。当定义对象方法时,必须显式地定义第一个参数,一般该参数名都使用self
,用于访问对象的内部数据。这里的self
相当于C++, Java里面的this
变量,但是我们还可以使用任何其它合法的参数名,比如this
和 mine
等,self
与C++,Java里面的this
不完全一样,它可以被看作是一个习惯性的用法,我们传入任何其它的合法名称都行,比如:
Python认识一些以“__”开始并以“__”结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。
类型
Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。
与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可,比如,对于前面定义的Fish
类型,使用Fish()
。类型本身也是特殊类型type
的对象(type
类型本身也是type
对象),这种特殊的设计允许对类型进行反射编程。
Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减少代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
类型
|
描述
|
例子
|
str
|
一个由字符组成的不可更改的有串行。在Python 3.x里,字符串由Unicode字符组成。 |
'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines""" |
bytes |
一个由字节组成的不可更改的有串行。 |
b'Some ASCII'
b"Some ASCII" |
list |
可以包含多种类型的可改变的有串行 |
[4.0, 'string', True] |
tuple |
可以包含多种类型的不可改变的有串行 |
(4.0, 'string', True) |
set ,frozenset |
与数学中集合的概念类似。无序的、每个元素唯一。 |
{4.0, 'string', True}
frozenset([4.0, 'string', True]) |
dict |
一个可改变的由键值对组成的无串行。 |
{'key1': 1.0, 3: False} |
int |
精度不限的整数 |
42 |
float |
浮点数。精度与系统相关。 |
3.1415927 |
complex |
复数 |
3+2.7j |
bool |
逻辑值。只有两个值:真、假 |
True
False |
除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。
开发环境
适用于Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他选择。其中有些软件设计有语法着色、语法检查、运行调试、自动补全、智能感知等便利功能。由于Python的跨平台出身,这些软件往往也具备各种操作系统的版本或一定的移植性。
而很多并非集成开发环境软件的文本编辑器,也对Python有不同程度的支持,并且加上专门为Python设计的编辑器插件也会有很高的可用性。
专门为Python设计的IDE软件:
- Eric:基于PyQt的自由软件,功能强大。支持自动补全、智能感知、自动语法检查、工程管理、svn/cvs集成、自动单元测试等功能。调试功能与Visual Studio和Eclipse类似。目前同时有两个版本。Eric4支持Python2.x,Eric5支持Python3.x。使用前需要先安装相应的PyQt版本。
- IDLE:Python“标准”IDE。一般随Python而安装,支持较少的编辑功能。调试功能也比较弱。
- Komodo和Komodo Edit:后者是前者的免费精简版。也可以用于PHP,Ruby,Javascript,Perl,Web和云开发。
- PyCharm:由JetBrains打造,该公司的Java IDE软件IntelliJ拥有海量的用户;PyCharm具备一般IDE的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等,同时另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,更酷的是,PyCharm支持IronPython。PyCharm是商业软件,目前已经到2.5版本。
- PythonWin:包含在pywin32内的编辑器,仅适用于Windows。
- SPE(Stani’s Python Editor):功能较多的免费软件,依赖wxPython。
- Ulipad:功能较全的免费软件,依赖wxPython。
- WingIDE:可能是功能最全的IDE,但不是免费软件。
- PyScripter:功能较全的开源IDE,使用Delphi开发。
通用IDE / 文本编辑器:
官网(英文):http://www.djangoproject.com/
自学材料(中文):http://djangobook.py3k.cn/2.0/
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。
Django 可以运行在启用了 mod python 的 Apache 2 上,或是任何WSGI兼容的Web服务器。 Django也有启动FastCGI服务的能力,因此能够应用于任何支持FastCGI的机器上。
下列数据库引擎被Django官方支持:
Microsoft SQL Server 的适配器正在开发中,处于试验阶段。(注:SQL Server的支持在1.0版本中已经被完全去除)
Django1.0已经可以利用Jython运行在任何J2EE服务器。