目录
Python(计算机编程语言)
Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990 年代初设计,作为一门叫做ABC语音的替代品。
1. Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。 3. 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 3.Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。 4.Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。
基本语法
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。例如if语句:python3
age = int(input("请输入你的年龄: "))
if age < 18:
print("不能去网吧。")
print("不过能买电脑。")
print("这句话在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++类似。+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取余。
Python使用and, or, not表示逻辑运算。
is, is not用于比较两个变量是否是同一个对象。in, not in用于判断一个对象是否属于另外一个对象。
Python支持“列表推导式”(list comprehension),比如计算0-9的平方和:
>>> sum(x * x for x in range(10))
285
Python使用lambda表示匿名函数。匿名函数体只能是表达式。比如:
>>> add=lambda x, y : x + y
>>> add(3,2)
5
函数
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出函数的使用帮助。比如:
>>> def randint(a, b):
... "Return random integer in range [a, b], including both end points."...
>>> help(randint)
Help on function randint in module __main__:
randint(a, b)
Return random integer inrange[a, b], including both end points.
对象的方法
对象的方法是指绑定到对象的函数。调用对象方法的语法是instance.method(arguments)。它等价于调用Class.method(instance, arguments)。当定义对象方法时,必须显式地定义第一个参数,一般该参数名都使用self,用于访问对象的内部数据。这里的self相当于C++, Java里面的this变量,但是我们还可以使用任何其它合法的参数名,比如this 和 mine 等,self与C++,Java里面的this不完全一样,它可以被看作是一个习惯性的用法,我们传入任何其它的合法名称都行,比如:
class Fish:
def eat(self,food):
if food is not None:
self.hungry=False
class User:
def __init__(myself,name):
myself.name=name
#构造Fish的实例:
f=Fish()
#以下两种调用形式是等价的:
Fish.eat(f,"earthworm")
f.eat("earthworm")
u=User('username')
print(u.name)
Python认识一些以“__”开始并以“__”结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。
类型
Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。
与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可,比如,对于前面定义的Fish类型,使用Fish()。类型本身也是特殊类型type的对象(type类型本身也是type对象),这种特殊的设计允许对类型进行反射编程。
Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减少代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
类型 | 描述 | 例子 | 备注 |
---|---|---|---|
str(string/字符串) | 一个由字符组成的不可更改的有序串行。 | 'Wikipedia' "Wikipedia" """Spanning multiple lines""" | 在Python 3.x里,字符串由Unicode字符组成 |
bytes(字节) | 一个由字节组成的不可更改的有序串行。 | b'Some ASCII' b"Some ASCII" | 在Python 2.x里,bytes为str的一种 |
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 | 无 |
builtin_function_or_method | 自带的函数,不可更改也不可增加 | input | 无 |
type(类型) | 显示某个值的类型,用type(x)获得 | type(1) -> type(‘1’) -> | 无 |
range | 按顺序排列的数 | range(10) ......list(range(10))->[0,1,2,3,4,5,6,7,8,9] range(1,10) ......list(range(1,10))->[1,2,3,4,5,6,7,8,9] range(1,10,2) ......list(range(1,10,2))->[1,3,5,7,9] | 在Python 2.x中,range为builtin_function_or_method,获得的数为list |
除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。