本文提供了Ptthon语法指南,仅供参考。(参考菜鸟教程Python3)
Python
数据类型
Python3 的六个标准数据类型:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
python的变量可以直接赋值:
1
2
3
4
5
6
7
|
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "runoob" # 字符串
print (counter)
print (miles)
print (name)
|
执行以上程序会输出如下结果:
Number(数字)
Python3 支持 int、float、bool、complex(复数)
type() 函数可以用来查询变量所指的对象类型
1
2
3
|
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
|
String(字符串)
字符串用单引号 ’ 或双引号 " 括起来,同时使用反斜杠转义特殊字符。
索引值以 0 为开始值,-1 为从末尾的开始位置。

bool(布尔类型)
即 True 或 False。
List(列表)
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
列表截取的语法格式如下:
索引值以 0 为开始值,-1 为从末尾的开始位置。

Python 列表截取可以接收第三个参数,参数作用是截取的步长:
1
2
3
4
5
|
变量[头下标:尾下标:步长]
letters = ['a','e','i','o','u']
letters[1:4:2]
-------------------------------
['e', 'o']
|
Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
元组中的元素类型也可以不相同:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 )
tinytuple = (123, 'runoob')
print (tuple) # 输出完整元组
print (tuple[0]) # 输出元组的第一个元素
print (tuple[1:3]) # 输出从第二个元素开始到第三个元素
print (tuple[2:]) # 输出从第三个元素开始的所有元素
print (tinytuple * 2) # 输出两次元组
print (tuple + tinytuple) # 连接元组
---------------------------------------------------------
('abcd', 786, 2.23, 'runoob', 70.2)
abcd
(786, 2.23)
(2.23, 'runoob', 70.2)
(123, 'runoob', 123, 'runoob')
('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')
|
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组较特殊,有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号,只有一个元素的元组需要在元素后面添加一个逗号,以区分它是一个元组而不是一个普通的值,在没有逗号的情况下,Python会将括号解释为数学运算中的括号。
Set(集合)
Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。
集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。
另外,也可以使用 set() 函数创建集合。
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
parame = {value01,value02,…}或者set(value)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}
print(sites) # 输出集合,重复的元素被自动去掉
成员测试
if 'Runoob' in sites :
print('Runoob 在集合中')
else :
print('Runoob 不在集合中')
set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
|
Dictionary(字典)
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型。
在同一个字典中,键(key)必须是唯一的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
dict = {}
dict['one'] = "1"
dict[2] = "two"
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
-------------------------------------------------
1
two
{'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['runoob', 1, 'www.runoob.com'])
|
bytes 类型
在 Python3 中,bytes 类型表示的是不可变的二进制序列(byte sequence)。
与字符串类型不同的是,bytes 类型中的元素是整数值(0 到 255 之间的整数),而不是 Unicode 字符。
bytes 类型通常用于处理二进制数据,比如图像文件、音频文件、视频文件等等。在网络编程中,也经常使用 bytes 类型来传输二进制数据。
创建 bytes 对象的方式有多种,最常见的方式是使用 b 前缀:
此外,也可以使用 bytes() 函数将其他类型的对象转换为 bytes 类型。bytes() 函数的第一个参数是要转换的对象,第二个参数是编码方式,如果省略第二个参数,则默认使用 UTF-8 编码:
x = bytes(“hello”, encoding=“utf-8”)
与字符串类型类似,bytes 类型也支持许多操作和方法,如切片、拼接、查找、替换等等。同时,由于 bytes 类型是不可变的,因此在进行修改操作时需要创建一个新的 bytes 对象。例如:
1
2
3
4
5
6
7
8
|
x = b"hello"
y = x[1:3] # 切片操作,得到 b"el"
z = x + b"world" # 拼接操作,得到 b"helloworld"
x = b"hello"
if x[0] == ord("h"):
print("The first element is 'h'")
#其中 ord() 函数用于将字符转换为相应的整数值。
|
条件控制
条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
if 语句
1
2
3
4
5
6
|
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
|
循环语句
while 循环
while 语句的一般形式:
1
2
|
while 判断条件(condition):
执行语句(statements)……
|
while 循环使用 else 语句
如果 while 后面的条件语句为 false 时,则执行 else 的语句块。
语法格式如下:
1
2
3
4
|
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
|
for 语句
for循环的一般格式如下:
1
2
3
4
|
for <variable> in <sequence>:
<statements>
else:
<statements>
|
当循环执行完毕(即遍历完 iterable 中的所有元素)后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句。
range() 函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
如果你需要遍历数字序列,可以使用内置 range() 函数。它会生成数列,例如:
>>>for i in range(5):
... print(i)
...
0
1
2
3
4
使用 range() 指定区间的值:
>>>for i in range(5,9) :
print(i)
5
6
7
8
>>>
也可以使 range() 以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长'):
>>>for i in range(0, 10, 3) :
print(i)
0
3
6
9
>>>
负数:
>>>for i in range(-10, -100, -30) :
print(i)
-10
-40
-70
>>>
结合 range() 和 len() 函数以遍历一个序列的索引,如下所示:
>>>a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ
>>>
还可以使用 range() 函数来创建一个列表:
>>>list(range(5))
[0, 1, 2, 3, 4]
>>>
|
break 和 continue 语句及循环中的 else 子句
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
pass 语句
pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句
Python 推导式
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
列表推导式
列表推导式格式为:
1
2
3
4
5
6
7
|
[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]
或者
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
|
字典推导式
字典推导基本格式:
1
2
3
4
5
|
{ key_expr: value_expr for value in collection }
或
{ key_expr: value_expr for value in collection if condition }
|
集合推导式
集合推导式基本格式:
1
2
3
|
{ expression for item in Sequence }
或
{ expression for item in Sequence if conditional }
|
元组推导式
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。
元组推导式基本格式:
1
2
3
|
(expression for item in Sequence )
或
(expression for item in Sequence if conditional )
|
迭代器与生成器
迭代器
迭代是是访问集合元素的一种方式,可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
1
2
3
4
5
6
7
|
>>> list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>
|
迭代器对象可以使用常规for语句进行遍历:
1
2
3
4
|
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
|
next() 函数:
1
2
3
4
5
6
7
8
9
10
|
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
|
生成器
yield 的函数被称为生成器(generator)。
yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果。
生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
下面是一个简单的示例,展示了生成器函数的使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def countdown(n):
while n > 0:
yield n
n -= 1
创建生成器对象
generator = countdown(5)
通过迭代生成器获取值
print(next(generator)) # 输出: 5
print(next(generator)) # 输出: 4
print(next(generator)) # 输出: 3
使用 for 循环迭代生成器
for value in generator:
print(value) # 输出: 2 1
|
StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
在 20 次迭代后停止执行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
|
函数
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

面向对象
简介:
- 类(Class): 描述具有相同的属性和方法的对象的集合。
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的,定义在类中且在函数体之外。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
类
类定义:
1
2
3
4
5
6
|
class ClassName:
<statement-1>
.
.
.
<statement-N>
|
类对象
类对象支持两种操作:属性引用和实例化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
实例化类
x = MyClass()
访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
------------------------------------------
MyClass 类的属性 i 为: 12345
MyClass 类的方法 f 输出为: hello world
|
构造方法
类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
1
2
|
def __init__(self):
self.data = []
|