一、Python基础语法
1、注释
1 | # 单行注释 |
2、标识符
①第一个字符必须是有英文字母或者是下划线”_”。
②表示符的其他部分是由字母、数字和下滑线组成。
③标识符对大小写敏感。
3、Python关键字(保留字)
Python的标准库为我们提供了一个keyword模块,可以输出当前版本的所有关键字。
1 | import keyword |
关键字 | 描述 |
---|---|
False | 布尔值,比较运算的结果。 |
None | 表示什么也没有。 |
True | 布尔值,比较运算的结果。 |
and | 逻辑运算符。 |
as | 创建别名。 |
assert | 用于调试。 |
async | |
await | |
break | 跳出循环。 |
class | 定义类。 |
continue | 继续循环的下一个迭代。 |
def | 定义函数。 |
del | 删除对象。 |
elif | 在条件语句中使用,等同于 else if。 |
else | 用于条件语句。 |
except | 处理异常,发生异常时如何执行。 |
finally | 处理异常,无论是否存在异常,都将执行一段代码。 |
for | 创建 for 循环。 |
from | 导入模块的特定部分。 |
global | 声明全局变量。 |
if | 写一个条件语句。 |
import | 导入模块。 |
in | 检查列表、元组等集合中是否存在某个值。 |
is | 测试两个变量是否相等。 |
lambda | 创建匿名函数。 |
nonlocal | 声明非局部变量。 |
not | 逻辑运算符。 |
or | 逻辑运算符。 |
pass | null 语句,一条什么都不做的语句。 |
raise | 产生异常。 |
return | 退出函数并返回值。 |
try | 编写 try…except 语句。 |
while | 创建 while 循环。 |
with | 用于简化异常处理。 |
yield | 结束函数,返回生成器。 |
4、行与缩进
Python最具特色的便是使用缩进来表示代码块,不需要使用大括号”{}“
缩进与空格是可变的,但是同一个代码块必须拥有相同的缩进空格数
1 | if True: |
如果缩进不一致的话是不算在一个代码块中的,比如:
1 | ##输入 |
5、多行语句
Python通常是一行写完一条语句,但是如果语句过长,可以使用反斜杠”\“实现多行语句,如:
1 | mun = a + b + \ |
但是如果是在”[]“,”{}“,”()“中的多行语句则不用使用反斜杠,如:
1 | class_list = ('小明','小米','小王', |
二、基本数据类型
1、python变量赋值规则
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:
1 | #!/usr/bin/python3 |
运行结果
1 | 100 |
2、多个变量赋值
Python允许多个变量同时赋值,如
1 | a = b = c = 1 |
创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。
也可以为多个对象指定多个变量,如
1 | a, b, c = 1, 2, "runoob" |
两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 “runoob” 分配给变量 c。
3、标准数据类型
六个标准数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)。
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
4、Number(数字)
Python3 支持 int、float、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
像大多数语言一样,数值类型的赋值和计算都是很直观的。
内置的 type() 函数可以用来查询变量所指的对象类型。
1 | 20, 5.5, True, 4+3j a, b, c, d = |
此外还可以用 isinstance 来判断:
1 | 111 a = |
5、数值运算
1 | 5 + 4 # 加法 |
6、String(字符串)
Python中的字符串用单引号 ‘ 或双引号 “ 括起来,同时使用反斜杠 ** 转义特殊字符。
字符串的截取的语法格式如下:
1 | 变量[头下标:尾下标] |
索引值以 0 为开始值,-1 为从末尾的开始位置。
![索引](https://yuntuku-1312821087.cos.ap-nanjing.myqcloud.com/img/python1.png)
加号 + 是字符串的连接符, 星号 ***** 表示复制当前字符串,与之结合的数字为复制的次数。实例如下:
1 | str = 'Runoob' |
输出:
1 | Runoob |
Python 使用反斜杠”\“ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个’’ r”,表示原始字符串:
1 | print('Ru\noob') |
Python 没有单独的字符类型,一个字符就是长度为1的字符串。
1 | 'Python' word = |
与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = ‘m’会导致错误。
7、List(列表)
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
列表截取的语法格式如下:
1 | 变量[头下标:尾下标] |
索引值以 0 为开始值,**-1** 为从末尾的开始位置。
![列表](https://yuntuku-1312821087.cos.ap-nanjing.myqcloud.com/img/python2.png)
加号 + 是列表连接运算符,星号 ***** 是重复操作。如下实例:
1 | list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ] |
输出:
1 | ['abcd', 786, 2.23, 'runoob', 70.2] |
与Python字符串不一样的是,列表中的元素是可以改变的:
1 | 1, 2, 3, 4, 5, 6] a = [ |
Python 列表截取可以接收第三个参数,参数作用是截取的步长,以下实例在索引 1 到索引 4 的位置并设置为步长为 2(间隔一个位置)来截取字符串:
![截取](https://yuntuku-1312821087.cos.ap-nanjing.myqcloud.com/img/列表.png)
8、Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
元组中的元素类型也可以不相同:
1 | tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 ) |
输出:
1 | ('abcd', 786, 2.23, 'runoob', 70.2) |
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
1 | tup1 = () # 空元组 |
string、list 和 tuple 都属于 sequence(序列)。
9、Set(集合)
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 **{ }**,因为 { } 是用来创建一个空字典。
创建格式:
1 | parame = {value01,value02,...} |
1 | sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'} |
以上实例输出结果:
1 | {'Zhihu', 'Baidu', 'Taobao', 'Runoob', 'Google', 'Facebook'} |
10、Dictionary(字典)
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型。
在同一个字典中,键(key)必须是唯一的。
1 | dict = {} |
输出:
1 | 1 - 菜鸟教程 |
构造函数 dict() 可以直接从键值对序列中构建字典如下:
1 | dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)]) |
**{x: x*2 for x in (2, 4, 6)}* 该代码使用的是字典推导式,更多推导式内容可以参考:Python 推导式。
另外,字典类型也有一些内置的函数,例如 clear()、keys()、values() 等。
三、数据类型转换
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。
Python 数据类型转换可以分为两种:
- 隐式类型转换 - 自动完成
- 显式类型转换 - 需要使用类型函数来转换
1、隐式类型转换
在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。
以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。
1 | num_int = 123 |
输出:
1 | num_int 数据类型为: <class 'int'> |
代码解析:
- 实例中我们对两个不同数据类型的变量
num_int
和num_flo
进行相加运算,并存储在变量num_new
中。 - 然后查看三个变量的数据类型。
- 在输出结果中,我们看到
num_int
是整型(integer)
,num_flo
是浮点型(float)
。 - 同样,新的变量
num_new
是浮点型(float)
,这是因为 Python 会将较小的数据类型转换为较大的数据类型,以避免数据丢失。
我们再看一个实例,整型数据与字符串类型的数据进行相加:
1 | num_int = 123 |
输出:
1 | num_int 数据类型为: <class 'int'> |
从输出中可以看出,整型和字符串类型运算结果会报错,输出 TypeError。 Python 在这种情况下无法使用隐式转换。
但是,Python 为这些类型的情况提供了一种解决方案,称为显式转换。
2、显式类型转换
在显式类型转换中,用户将对象的数据类型转换为所需的数据类型。 我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。
int() 强制转换为整型:
1 | x = int(1) # x 输出结果为 1 |
float() 强制转换为浮点型:
1 | x = float(1) # x 输出结果为 1.0 |
str() 强制转换为字符串类型:
1 | x = str("s1") # x 输出结果为 's1' |
整型和字符串类型进行运算,就可以用强制类型转换来完成:
1 | num_int = 123 |
输出:
1 | num_int 数据类型为: <class 'int'> |
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
---|---|
[int(x ,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
[complex(real ,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
四、推导式
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
Python 支持各种数据结构的推导式:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
- 元组(tuple)推导式
1、列表推导式
列表推导式格式为:
1 | [表达式 for 变量 in 列表] |
- out_exp_res:列表生成元素表达式,可以是有返回值的函数。
- for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
- if condition:条件语句,可以过滤列表中不符合条件的值。
过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母:
1 | 'Bob','Tom','alice','Jerry','Wendy','Smith'] names = [ |
计算 30 以内可以被 3 整除的整数:
1 | for i in range(30) if i % 3 == 0] multiples = [i |
2、字典推导式
字典推导基本格式:
1 | { key_expr: value_expr for value in collection } |
使用字符串及其长度创建字典:
1 | listdemo = ['Google','Runoob', 'Taobao'] |
提供三个数字,以三个数字为键,三个数字的平方为值来创建字典:
1 | 2 for x in (2, 4, 6)} dic = {x: x** |
3、集合推导式
集合推导式基本格式:
1 | { expression for item in Sequence } |
计算数字 1,2,3 的平方数:
1 | 2 for i in (1,2,3)} setnew = {i** |
判断不是 abc 的字母并输出:
1 | for x in 'abracadabra' if x not in 'abc'} a = {x |
4、元组推导式
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。
元组推导式基本格式:
1 | (expression for item in Sequence ) |
元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 **[]**,另外元组推导式返回的结果是一个生成器对象。
例如,我们可以使用下面的代码生成一个包含数字 1~9 的元组:
1 | for x in range(1,10)) a = (x |