Python (英国发音:/paθn/ 美国发音:/paθɑn/), 是一种面向对象的解释型计算机程序设计语言, 由荷兰人 Guido van Rossum 于 1989 年发明, 第一个公开发行版发行于 1991 年.
Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL(GNU General Public License)协议 .
Python 语法简洁清晰, 特色之一是强制用空白符 (white space) 作为语句缩进.
Python 具有丰富和强大的库. 它常被昵称为胶水语言, 能够把用其他语言制作的各种模块 (尤其是 C/C++) 很轻松地联结在一起. 常见的一种应用情形是, 使用 Python 快速生成程序的原型(有时甚至是程序的最终界面), 然后对其中 有特别要求的部分, 用更合适的语言改写, 比如 3D 游戏中的图形渲染模块, 性能要求特别高, 就可以用 C/C++ 重写, 而后封装为 Python 可以调用的扩展类库. 需要注意的是在您使用扩展类库时可能需要考虑平台问题, 某些可能不提供跨平台的实现.
风格
Python 在设计上坚持了清晰划一的风格, 这使得 Python 成为一门易读, 易维护, 并且被大量用户所欢迎的, 用途广泛的语言.
设计者开发时总的指导思想是, 对于一个特定的问题, 只要有一种最好的方法来解决就好了. 这在由 Tim Peters 写的 Python 格言 (称为 The Zen of Python) 里面表述为: There should be one-- and preferably only one --obvious way to do it. 这正好和 Perl 语言 (另一种功能类似的高级动态语言) 的中心思想 TMTOWTDI(There's More Than One Way To Do It)完全相反.
Python 的作者有意的设计限制性很强的语法, 使得不好的编程习惯 (例如 if 语句的下一行不向右缩进) 都不能通过编译. 其中很重要的一项就是 Python 的缩进规则.
一个和其他大多数语言 (如 C) 的区别就是, 一个模块的界限, 完全是由每行的首字符在这一行的位置来决定的 (而 C 语言是用一对花括号{} 来明确的定出模块的边界的, 与字符的位置毫无关系). 这一点曾经引起过争议. 因为自从 C 这类的语言诞生后, 语言的语法含义与字符的排列方式分离开来, 曾经被认为是一种程序语言的进步. 不过不可否认的是, 通过强制程序员们缩进(包括 if,for 和函数定义等所有需要使用模块的地方),Python 确实使得程序更加清晰和美观.
设计定位
Python 的设计哲学是 "优雅","明确","简单". 因此, Perl 语言中 "总是有多种方法来做同一件事" 的理念在 Python 开发者中通常是难以忍受的. Python 开发者的哲学是 "用一种方法, 最好是只有一种方法来做一件事". 在设计 Python 语言时, 如果面临多种选择, Python 开发者一般会拒绝花俏的语法, 而选择明确的没有或者很少有歧义的语法. 由于这种设计观念的差异, Python 源代码通常被认为比 Perl 具备更好的可读性, 并且能够支撑大规模的软件开发. 这些准则被称为 Python 格言. 在 Python 解释器内运行 import this 可以获得完整的列表.
Python 开发人员尽量避开不成熟或者不重要的优化. 一些针对非重要部位的加快运行速度的补丁通常不会被合并到 Python 内. 所以很多人认为 Python 很慢. 不过, 根据二八定律, 大多数程序对速度要求不高. 在某些对运行速度要求很高的情况, Python 设计师倾向于使用 JIT 技术, 或者用使用 C/C++ 语言改写这部分程序. 可用的 JIT 技术是 PyPy.
Python 是完全面向对象的语言. 函数, 模块, 数字, 字符串都是对象. 并且完全支持继承, 重载, 派生, 多继承, 有益于增强源代码的复用性. Python 支持重载运算符和动态类型. 相对于 Lisp 这种传统的函数式编程语言, Python 对函数式设计只提供了有限的支持. 有两个标准库 (functools, itertools) 提供了 Haskell 和 Standard ML 中久经考验的函数式程序设计工具.
虽然 Python 可能被粗略地分类为 "脚本语言"(script language), 但实际上一些大规模软件开发计划例如 Zope,Mnet 及 BitTorrent,Google 也广泛地使用它. Python 的支持者较喜欢称它为一种高级动态编程语言, 原因是 "脚本语言" 泛指仅作简单程序设计任务的语言, 如 shellscript,VBScript 等只能处理简单任务的编程语言, 并不能与 Python 相提并论.
Python 本身被设计为可扩充的. 并非所有的特性和功能都集成到语言核心. Python 提供了丰富的 API 和工具, 以便程序员能够轻松地使用 C 语言, C++,Cython 来编写扩充模块. Python 编译器本身也可以被集成到其它需要脚本语言的程序内. 因此, 很多人还把 Python 作为一种 "胶水语言"(glue language)使用. 使用 Python 将其他语言编写的程序进行集成和封装. 在 Google 内部的很多项目, 例如 Google Engine 使用 C++ 编写性能要求极高的部分, 然后用 Python 或 Java/Go 调用相应的模块.Python 技术手册的作者马特利 (Alex Martelli) 说:"这很难讲, 不过, 2004 年, Python 已在 Google 内部使用, Google 召募许多 Python 高手, 但在这之前就已决定使用 Python, 他们的目的是 Python where we can, C++ where we must, 在操控硬件的场合使用 C++, 在快速开发时候使用 Python."
基本语法
Python 的设计目标之一是让代码具备高度的可阅读性. 它设计时尽量使用其它语言经常使用的标点符号和英文单字, 让代码看起来整洁美观. 它不像其他的静态语言如 C,Pascal 那样需要重复书写声明语句, 也不像它们的语法那样经常有特殊情况和意外.
缩进
Python 开发者有意让违反了缩进规则的程序不能通过编译, 以此来强制程序员养成良好的编程习惯. 并且 Python 语言利用缩进表示语句块的开始和退出(Off-side 规则), 而非使用花括号或者某种关键字. 增加缩进表示语句块的开始, 而减少缩进则表示语句块的退出. 缩进成为了语法的一部分
根据 PEP 的规定, 必须使用 4 个空格来表示每级缩进(不清楚 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 的平方和:
sum(x * x for x in range(10))
Python 使用 lambda 表示匿名函数. 匿名函数体只能是表达式. 比如:
- add=lambda x, y : x + y
- add(3,2)
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 对于赋值语句有特殊的处理. 因此, 可以同时赋值给多个变量, 比如:
x, y=1,2# 同时给 x,y 赋值, 最终结果: x=1, y=2
特别地, 可以使用以下这种形式来交换两个变量的值:
x, y=y, x #最终结果: y=1, x=2
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.
来源: http://www.bubuko.com/infodetail-2720287.html