Python基础
Python基础
你别睡这么晚什么是 Python?
Python 是一门流行的编程语言。它由 Guido van Rossum 创建,于 1991 年发布。
它用于:
- Web 开发(服务器端)
- 软件开发
- 数学
- 系统脚本
Python 可以做什么?
- 可以在服务器上使用 Python 来创建 Web 应用程序。
- Python 可以与软件一起使用来创建工作流。
- Python 可以连接到数据库系统。它还可以读取和修改文件。
- Python 可用于处理大数据并执行复杂的数学运算。
- Python 可用于快速原型设计,也可用于生产就绪的软件开发。
为何选择 Python?
- Python 适用于不同的平台(Windows、Mac、Linux、Raspberry Pi 等)。
- Python 有一种类似于英语的简单语法。
- Python 的语法允许开发人员用比其他编程语言更少的代码行编写程序。
- Python 在解释器系统上运行,这意味着代码可以在编写后立即执行。这也意味着原型设计可以非常快。
- Python 可以以程序方式、面向对象的方式或功能方式来处理。
请您知晓
Python 的最新主要版本是 Python 3,我们将在本教程中使用它。但是,Python 2 虽然没有更新安全更新以外的任何东西,但仍然非常受欢迎。
在本教程中,我们将在在文本编辑器中编写 Python。您也可以在集成开发环境中编写 Python,例如 Thonny、Pycharm、Netbeans 或 Eclipse,这一点当您在管理大量 Python 文件时特别有用。
Python 语法与其他编程语言比较
- Python 是为可读性设计的,与英语有一些相似之处,并受到数学的影响。
- Python 使用新行来完成命令,而不像通常使用分号或括号的其他编程语言。
- Python 依赖缩进,使用空格来定义范围;例如循环、函数和类的范围。其他编程语言通常使用花括号来实现此目的。
Python 快速入门
Python 是一门解释型编程语言,这意味着作为开发人员,您可以在文本编辑器中编写 Python(.py)文件,然后将这些文件放入 python 解释器中执行。
在命令行上运行 python 文件的方式如下:
1 | C:\Users\Your Name>python helloworld.py |
其中 “helloworld.py” 是 python 的文件名。
让我们编写第一个 Python 文件,名为 helloworld.py,它可以在任何文本编辑器中完成。
helloworld.py
1 | print("Hello, World!") |
执行 Python 语法
正如我们在上一节中学习到的,可以直接在命令行中编写执行 Python 的语法:
1 | >>> print("Hello, World!") |
或者通过在服务器上创建 python 文件,使用 .py 文件扩展名,并在命令行中运行它:
1 | C:\Users\Your Name>python myfile.py |
Python 缩进
缩进指的是代码行开头的空格。
在其他编程语言中,代码缩进仅出于可读性的考虑,而 Python 中的缩进非常重要。
Python 使用缩进来指示代码块。
实例
1 | if 5 > 2: |
如果省略缩进,Python 会出错:
实例
语法错误:
1 | if 5 > 2: |
空格数取决于程序员,但至少需要一个。
实例
1 | if 5 > 2: |
您必须在同一代码块中使用相同数量的空格,否则 Python 会出错:
实例
语法错误:
1 | if 5 > 2: |
Python 变量
在 Python 中,变量是在为其赋值时创建的:
实例
Python 中的变量:
1 | x = 5 |
Python 没有声明变量的命令。
您将在 Python 变量 章节中学习有关变量的更多知识。
注释
Python 拥有对文档内代码进行注释的功能。
注释以 # 开头,Python 将其余部分作为注释呈现:
实例
Python 中的注释:
1 | #This is a comment. |
Python 注释
注释可用于解释 Python 代码。
注释可用于提高代码的可读性。
在测试代码时,可以使用注释来阻止执行。
创建注释
注释以 #
开头,Python 将忽略它们:
实例
1 | #This is a comment |
注释可以放在一行的末尾,Python 将忽略该行的其余部分:
实例
1 | print("Hello, World!") #This is a comment |
注释不必是解释代码的文本,它也可以用来阻止 Python 执行代码:
实例
1 | #print("Hello, World!") |
多行注释
Python 实际上没有多行注释的语法。
要添加多行注释,您可以为每行插入一个 #
:
实例
1 | #This is a comment |
或者,以不完全符合预期的方式,您可以使用多行字符串。
由于 Python 将忽略未分配给变量的字符串文字,因此您可以在代码中添加多行字符串(三引号),并在其中添加注释:
实例
1 | """ |
只要字符串未分配给变量,Python 就会读取代码,然后忽略它,这样您就已经完成了多行注释。
Python 变量
创建变量
变量是存放数据值的容器。
与其他编程语言不同,Python 没有声明变量的命令。
首次为其赋值时,才会创建变量。
实例
1 | x = 10 |
变量不需要使用任何特定类型声明,甚至可以在设置后更改其类型。
实例
1 | x = 5 # x is of type int |
字符串变量可以使用单引号或双引号进行声明:
实例
1 | x = "Bill" |
变量名称
变量可以使用短名称(如 x 和 y)或更具描述性的名称(age、carname、total_volume)。
Python 变量命名规则:
- 变量名必须以字母或下划线字符开头
- 变量名称不能以数字开头
- 变量名只能包含字母数字字符和下划线(A-z、0-9 和 _)
- 变量名称区分大小写(age、Age 和 AGE 是三个不同的变量)
请记住,变量名称区分大小写
向多个变量赋值
Python 允许您在一行中为多个变量赋值:
实例
1 | x, y, z = "Orange", "Banana", "Cherry" |
您可以在一行中为多个变量分配相同的值:
实例
1 | x = y = z = "Orange" |
输出变量
Python 的 print
语句通常用于输出变量。
如需结合文本和变量,Python 使用 +
字符:
实例
1 | x = "awesome" |
您还可以使用 + 字符将变量与另一个变量相加:
实例
1 | x = "Python is " |
对于数字,+
字符用作数学运算符:
实例
1 | x = 5 |
如果您尝试组合字符串和数字,Python 会给出错误:
实例
1 | x = 10 |
全局变量
在函数外部创建的变量(如上述所有实例所示)称为全局变量。
全局变量可以被函数内部和外部的每个人使用。
实例
在函数外部创建变量,并在函数内部使用它:
1 | x = "awesome" |
如果在函数内部创建具有相同名称的变量,则该变量将是局部变量,并且只能在函数内部使用。具有相同名称的全局变量将保留原样,并拥有原始值。
实例
在函数内部创建一个与全局变量同名的变量:
1 | x = "awesome" |
global 关键字
通常,在函数内部创建变量时,该变量是局部变量,只能在该函数内部使用。
要在函数内部创建全局变量,您可以使用 global 关键字。
实例
如果您用了 global 关键字,则该变量属于全局范围:
1 | def myfunc(): |
另外,如果要在函数内部更改全局变量,请使用 global 关键字。
实例
要在函数内部更改全局变量的值,请使用 global 关键字引用该变量:
1 | x = "awesome" |
Python 数据类型
内置数据类型
在编程中,数据类型是一个重要的概念。
变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。
在这些类别中,Python 默认拥有以下内置数据类型:
文本类型: | str |
---|---|
数值类型: | int , float , complex |
序列类型: | list , tuple , range |
映射类型: | dict |
集合类型: | set , frozenset |
布尔类型: | bool |
二进制类型: | bytes , bytearray , memoryview |
获取数据类型
您可以使用 type() 函数获取任何对象的数据类型:
实例
打印变量 x 的数据类型:
1 | x = 10 |
设置数据类型
在 Python 中,当您为变量赋值时,会设置数据类型:
示例 | 数据类型 | 试一试 |
---|---|---|
x = “Hello World” | str | 试一试 |
x = 29 | int | 试一试 |
x = 29.5 | float | 试一试 |
x = 1j | complex | 试一试 |
x = [“apple”, “banana”, “cherry”] | list | 试一试 |
x = (“apple”, “banana”, “cherry”) | tuple | 试一试 |
x = range(6) | range | 试一试 |
x = {“name” : “Bill”, “age” : 63} | dict | 试一试 |
x = {“apple”, “banana”, “cherry”} | set | 试一试 |
x = frozenset({“apple”, “banana”, “cherry”}) | frozenset | 试一试 |
x = True | bool | 试一试 |
x = b”Hello” | bytes | 试一试 |
x = bytearray(5) | bytearray | 试一试 |
x = memoryview(bytes(5)) | memoryview | 试一试 |
设定特定的数据类型
如果希望指定数据类型,则您可以使用以下构造函数:
示例 | 数据类型 | 试一试 |
---|---|---|
x = str(“Hello World”) | str | 试一试 |
x = int(29) | int | 试一试 |
x = float(29.5) | float | 试一试 |
x = complex(1j) | complex | 试一试 |
x = list((“apple”, “banana”, “cherry”)) | list | 试一试 |
x = tuple((“apple”, “banana”, “cherry”)) | tuple | 试一试 |
x = range(6) | range | 试一试 |
x = dict(name=”Bill”, age=36) | dict | 试一试 |
x = set((“apple”, “banana”, “cherry”)) | set | 试一试 |
x = frozenset((“apple”, “banana”, “cherry”)) | frozenset | 试一试 |
x = bool(5) | bool | 试一试 |
x = bytes(5) | bytes | 试一试 |
x = bytearray(5) | bytearray | 试一试 |
x = memoryview(bytes(5)) | memoryview | 试一试 |
Python 参考手册
Python 实例
Python 测验
Python 数字
Python 数字
Python 中有三种数字类型:
- int
- float
- complex
为变量赋值时,将创建数值类型的变量:
实例
1 | x = 10 # int |
如需验证 Python 中任何对象的类型,请使用 type()
函数:
实例
1 | print(type(x)) |
Int
Int 或整数是完整的数字,正数或负数,没有小数,长度不限。
实例
整数:
1 | x = 10 |
Float
浮动或“浮点数”是包含小数的正数或负数。
实例
浮点:
1 | x = 3.50 |
浮点数也可以是带有“e”的科学数字,表示 10 的幂。
实例
浮点:
1 | x = 27e4 |
复数
复数用 “j” 作为虚部编写:
实例
复数:
1 | x = 2+3j |
类型转换
您可以使用 int()
、float()
和 complex()
方法从一种类型转换为另一种类型:
实例
从一种类型转换为另一种类型:
1 | x = 10 # int |
注释:您无法将复数转换为其他数字类型。
随机数
Python 没有 random()
函数来创建随机数,但 Python 有一个名为 random
的内置模块,可用于生成随机数:
实例
导入 random 模块,并显示 1 到 9 之间的随机数:
1 | import random |
在 Random 模块参考手册 中,您将了解有关 Random 模块的更多信息。
Python Casting
指定变量类型
有时您可能需要为变量指定类型。这可以通过 casting 来完成。 Python 是一门面向对象的语言,因此它使用类来定义数据类型,包括其原始类型。
因此,使用构造函数完成在 python 中的转换:
int()
- 用整数字面量、浮点字面量构造整数(通过对数进行下舍入),或者用表示完整数字的字符串字面量float()
- 用整数字面量、浮点字面量,或字符串字面量构造浮点数(提供表示浮点数或整数的字符串)str()
- 用各种数据类型构造字符串,包括字符串,整数字面量和浮点字面量
实例
整数:
1 | x = int(1) # x 将是 1 |
实例
浮点数:
1 | x = float(1) # x 将是 1.0 |
实例
字符串:
1 | x = str("S2") # x 将是 'S2' |
Python 字符串
字符串字面量
python 中的字符串字面量由单引号或双引号括起。
'hello'
等同于 "hello"
。
您可以使用 print()
函数显示字符串字面量:
实例
1 | print("Hello") |
用字符串向变量赋值
通过使用变量名称后跟等号和字符串,可以把字符串赋值给变量:
实例
1 | a = "Hello" |
多行字符串
您可以使用三个引号将多行字符串赋值给变量:
实例
您可以使用三个双引号:
1 | a = """Python is a widely used general-purpose, high level programming language. |
或三个单引号:
实例
1 | a = '''Python is a widely used general-purpose, high level programming language. |
注释:在结果中,换行符插入与代码中相同的位置。
字符串是数组
像许多其他流行的编程语言一样,Python 中的字符串是表示 unicode 字符的字节数组。
但是,Python 没有字符数据类型,单个字符就是长度为 1 的字符串。
方括号可用于访问字符串的元素。
实例
获取位置 1 处的字符(请记住第一个字符的位置为 0):
1 | a = "Hello, World!" |
裁切
您可以使用裁切语法返回一定范围的字符。
指定开始索引和结束索引,以冒号分隔,以返回字符串的一部分。
实例
获取从位置 2 到位置 5(不包括)的字符:
1 | b = "Hello, World!" |
负的索引
使用负索引从字符串末尾开始切片:
实例
获取从位置 5 到位置 1 的字符,从字符串末尾开始计数:
1 | b = "Hello, World!" |
字符串长度
如需获取字符串的长度,请使用 len() 函数。
实例
len() 函数返回字符串的长度:
1 | a = "Hello, World!" |
字符串方法
Python 有一组可用于字符串的内置方法。
实例
strip() 方法删除开头和结尾的空白字符:
1 | a = " Hello, World! " |
实例
lower() 返回小写的字符串:
1 | a = "Hello, World!" |
实例
upper() 方法返回大写的字符串:
1 | a = "Hello, World!" |
实例
replace() 用另一段字符串来替换字符串:
1 | a = "Hello, World!" |
实例
split() 方法在找到分隔符的实例时将字符串拆分为子字符串:
1 | a = "Hello, World!" |
请使用我们的字符串方法参考手册,学习更多的字符串方法。
检查字符串
如需检查字符串中是否存在特定短语或字符,我们可以使用 in 或 not in 关键字。
实例
检查以下文本中是否存在短语 “ina”:
1 | txt = "China is a great country" |
实例
检查以下文本中是否没有短语 “ina”:
1 | txt = "China is a great country" |
字符串级联(串联)
如需串联或组合两个字符串,您可以使用 + 运算符。
实例
将变量 a 与变量 b 合并到变量 c 中:
1 | a = "Hello" |
实例
在它们之间添加一个空格:
1 | a = "Hello" |
字符串格式
正如在 Python 变量一章中所学到的,我们不能像这样组合字符串和数字:
实例
1 | age = 63 |
但是我们可以使用 format()
方法组合字符串和数字!
format()
方法接受传递的参数,格式化它们,并将它们放在占位符 {}
所在的字符串中:
实例
使用 format()
方法将数字插入字符串:
1 | age = 63 |
format()
方法接受不限数量的参数,并放在各自的占位符中:
实例
1 | quantity = 3 |
您可以使用索引号 {0}
来确保参数被放在正确的占位符中:
实例
1 | quantity = 3 |
字符串方法
Python 有一组可以在字符串上使用的内建方法。
注释:所有字符串方法都返回新值。它们不会更改原始字符串。
方法 | 描述 |
---|---|
capitalize() | 把首字符转换为大写。 |
casefold() | 把字符串转换为小写。 |
center() | 返回居中的字符串。 |
count() | 返回指定值在字符串中出现的次数。 |
encode() | 返回字符串的编码版本。 |
endswith() | 如果字符串以指定值结尾,则返回 true。 |
expandtabs() | 设置字符串的 tab 尺寸。 |
find() | 在字符串中搜索指定的值并返回它被找到的位置。 |
format() | 格式化字符串中的指定值。 |
format_map() | 格式化字符串中的指定值。 |
index() | 在字符串中搜索指定的值并返回它被找到的位置。 |
isalnum() | 如果字符串中的所有字符都是字母数字,则返回 True。 |
isalpha() | 如果字符串中的所有字符都在字母表中,则返回 True。 |
isdecimal() | 如果字符串中的所有字符都是小数,则返回 True。 |
isdigit() | 如果字符串中的所有字符都是数字,则返回 True。 |
isidentifier() | 如果字符串是标识符,则返回 True。 |
islower() | 如果字符串中的所有字符都是小写,则返回 True。 |
isnumeric() | 如果字符串中的所有字符都是数,则返回 True。 |
isprintable() | 如果字符串中的所有字符都是可打印的,则返回 True。 |
isspace() | 如果字符串中的所有字符都是空白字符,则返回 True。 |
istitle() | 如果字符串遵循标题规则,则返回 True。 |
isupper() | 如果字符串中的所有字符都是大写,则返回 True。 |
join() | 把可迭代对象的元素连接到字符串的末尾。 |
ljust() | 返回字符串的左对齐版本。 |
lower() | 把字符串转换为小写。 |
lstrip() | 返回字符串的左修剪版本。 |
maketrans() | 返回在转换中使用的转换表。 |
partition() | 返回元组,其中的字符串被分为三部分。 |
replace() | 返回字符串,其中指定的值被替换为指定的值。 |
rfind() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rindex() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rjust() | 返回字符串的右对齐版本。 |
rpartition() | 返回元组,其中字符串分为三部分。 |
rsplit() | 在指定的分隔符处拆分字符串,并返回列表。 |
rstrip() | 返回字符串的右边修剪版本。 |
split() | 在指定的分隔符处拆分字符串,并返回列表。 |
splitlines() | 在换行符处拆分字符串并返回列表。 |
startswith() | 如果以指定值开头的字符串,则返回 true。 |
strip() | 返回字符串的剪裁版本。 |
swapcase() | 切换大小写,小写成为大写,反之亦然。 |
title() | 把每个单词的首字符转换为大写。 |
translate() | 返回被转换的字符串。 |
upper() | 把字符串转换为大写。 |
zfill() | 在字符串的开头填充指定数量的 0 值。 |
注释:所有字符串方法都返回新值。它们不会更改原始字符串。
Python 布尔
布尔表示两值之一:True 或 False。
布尔值
在编程中,您通常需要知道表达式是 True 还是 False。
您可以计算 Python 中的任何表达式,并获得两个答案之一,即 True 或 False。
比较两个值时,将对表达式求值,Python 返回布尔值答案:
实例
1 | print(8 > 7) |
当在 if 语句中运行条件时,Python 返回 True 或 False:
实例
根据条件是对还是错,打印一条消息:
1 | a = 200 |
评估值和变量
bool() 函数可让您评估任何值,并为您返回 True 或 False。
实例
评估字符串和数字:
1 | print(bool("Hello")) |
实例
评估两个变量:
1 | x = "Hello" |
大多数值都为 True
如果有某种内容,则几乎所有值都将评估为 True。
除空字符串外,任何字符串均为 True。
除 0 外,任何数字均为 True。
除空列表外,任何列表、元组、集合和字典均为 True。
实例
下例将返回 True:
1 | bool("abc") |
某些值为 False
实际上,除空值(例如 ()、[]、{}、””、数字 0 和值 None)外,没有多少值会被评估为 False。当然,值 False 的计算结果为 False。
实例
下例会返回 False:
1 | bool(False) |
在这种情况下,一个值或对象的计算结果为 False,即如果对象由带有 len 函数的类生成的,且该函数返回 0 或 False:
实例
1 | class myclass(): |
函数可返回布尔
Python 还有很多返回布尔值的内置函数,例如 isinstance() 函数,该函数可用于确定对象是否具有某种数据类型:
实例
检查对象是否是整数:
1 | x = 200 |
Python 运算符
Python 运算符
运算符用于对变量和值执行操作。
Python 在以下组中划分运算符:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 身份运算符
- 成员运算符
- 位运算符
Python 算术运算符
算术运算符与数值一起使用来执行常见的数学运算:
运算符 | 名称 | 实例 | 试一试 |
---|---|---|---|
+ | 加 | x + y | 试一试 |
- | 减 | x - y | 试一试 |
* | 乘 | x * y | 试一试 |
/ | 除 | x / y | 试一试 |
% | 取模 | x % y | 试一试 |
** | 幂 | x ** y | 试一试 |
// | 地板除(取整除) | x // y | 试一试 |
Python 赋值运算符
赋值运算符用于为变量赋值:
运算符 | 实例 | 等同于 | 试一试 |
---|---|---|---|
= | x = 5 | x = 5 | 试一试 |
+= | x += 3 | x = x + 3 | 试一试 |
-= | x -= 3 | x = x - 3 | 试一试 |
*= | x *= 3 | x = x * 3 | 试一试 |
/= | x /= 3 | x = x / 3 | 试一试 |
%= | x %= 3 | x = x % 3 | 试一试 |
//= | x //= 3 | x = x // 3 | 试一试 |
**= | x **= 3 | x = x ** 3 | 试一试 |
&= | x &= 3 | x = x & 3 | 试一试 |
|= | x |= 3 | x = x | 3 | 试一试 |
^= | x ^= 3 | x = x ^ 3 | 试一试 |
>>= | x >>= 3 | x = x >> 3 | 试一试 |
<<= | x <<= 3 | x = x << 3 | 试一试 |
Python 比较运算符
比较运算符用于比较两个值:
运算符 | 名称 | 实例 | 试一试 |
---|---|---|---|
== | 等于 | x == y | 试一试 |
!= | 不等于 | x != y | 试一试 |
> | 大于 | x > y | 试一试 |
< | 小于 | x < y | 试一试 |
>= | 大于或等于 | x >= y | 试一试 |
<= | 小于或等于 | x <= y | 试一试 |
Python 逻辑运算符
逻辑运算符用于组合条件语句:
运算符 | 描述 | 实例 | 试一试 |
---|---|---|---|
and | 如果两个语句都为真,则返回 True。 | x > 3 and x < 10 | 试一试 |
or | 如果其中一个语句为真,则返回 True。 | x > 3 or x < 4 | 试一试 |
not | 反转结果,如果结果为 true,则返回 False | not(x > 3 and x < 10) | 试一试 |
Python 身份运算符
身份运算符用于比较对象,不是比较它们是否相等,但如果它们实际上是同一个对象,则具有相同的内存位置:
运算符 | 描述 | 实例 | 试一试 |
---|---|---|---|
is | 如果两个变量是同一个对象,则返回 true。 | x is y | 试一试 |
is not | 如果两个变量不是同一个对象,则返回 true。 | x is not y | 试一试 |
Python 成员运算符
成员资格运算符用于测试序列是否在对象中出现:
运算符 | 描述 | 实例 | 试一试 |
---|---|---|---|
in | 如果对象中存在具有指定值的序列,则返回 True。 | x in y | 试一试 |
not in | 如果对象中不存在具有指定值的序列,则返回 True。 | x not in y | 试一试 |
Python 位运算符
位运算符用于比较(二进制)数字:
运算符 | 描述 | 实例 |
---|---|---|
& | AND | 如果两个位均为 1,则将每个位设为 1。 |
| | OR | 如果两位中的一位为 1,则将每个位设为 1。 |
^ | XOR | 如果两个位中只有一位为 1,则将每个位设为 1。 |
~ | NOT | 反转所有位。 |
<< | Zero fill left shift | 通过从右侧推入零来向左移动,推掉最左边的位。 |
>> | Signed right shift | 通过从左侧推入最左边的位的副本向右移动,推掉最右边的位。 |
Python 列表
Python 集合(数组)
Python 编程语言中有四种集合数据类型:
- 列表(List)是一种有序和可更改的集合。允许重复的成员。
- 元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。
- 集合(Set)是一个无序和无索引的集合。没有重复的成员。
- 词典(Dictionary)是一个无序,可变和有索引的集合。没有重复的成员。
选择集合类型时,了解该类型的属性很有用。
为特定数据集选择正确的类型可能意味着保留含义,并且可能意味着提高效率或安全性。
列表
列表是一个有序且可更改的集合。在 Python 中,列表用方括号编写。
实例
创建列表:
1 | thislist = ["apple", "banana", "cherry"] |
访问项目
您可以通过引用索引号来访问列表项:
实例
打印列表的第二项:
1 | thislist = ["apple", "banana", "cherry"] |
负的索引
负索引表示从末尾开始,-1 表示最后一个项目,-2 表示倒数第二个项目,依此类推。
实例
打印列表的最后一项:
1 | thislist = ["apple", "banana", "cherry"] |
索引范围
您可以通过指定范围的起点和终点来指定索引范围。
指定范围后,返回值将是包含指定项目的新列表。
实例
返回第三、第四、第五项:
1 | thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"] |
注释:搜索将从索引 2(包括)开始,到索引 5(不包括)结束。
请记住,第一项的索引为 0。
负索引的范围
如果要从列表末尾开始搜索,请指定负索引:
实例
此例将返回从索引 -4(包括)到索引 -1(排除)的项目:
1 | thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"] |
更改项目值
如需更改特定项目的值,请引用索引号:
实例
更改第二项:
1 | thislist = ["apple", "banana", "cherry"] |
遍历列表
您可以使用 for
循环遍历列表项:
实例
逐个打印列表中的所有项目:
1 | thislist = ["apple", "banana", "cherry"] |
您将在 Python For 循环 这一章中学习有关 for
循环的更多知识。
检查项目是否存在
如需确定列表中是否存在指定的项,请使用 in
关键字:
实例
检查列表中是否存在 “apple”:
1 | thislist = ["apple", "banana", "cherry"] |
列表长度
如需确定列表中有多少项,请使用 len()
方法:
实例
打印列表中的项目数:
1 | thislist = ["apple", "banana", "cherry"] |
添加项目
如需将项目添加到列表的末尾,请使用 append()
方法:
实例
使用 append()
方法追加项目:
1 | thislist = ["apple", "banana", "cherry"] |
要在指定的索引处添加项目,请使用 insert()
方法:
实例
插入项目作为第二个位置:
1 | thislist = ["apple", "banana", "cherry"] |
删除项目
有几种方法可以从列表中删除项目:
实例
remove()
方法删除指定的项目:
1 | thislist = ["apple", "banana", "cherry"] |
实例
pop()
方法删除指定的索引(如果未指定索引,则删除最后一项):
1 | thislist = ["apple", "banana", "cherry"] |
实例
del
关键字删除指定的索引:
1 | thislist = ["apple", "banana", "cherry"] |
实例
del
关键字也能完整地删除列表:
1 | thislist = ["apple", "banana", "cherry"] |
实例
clear()
方法清空列表:
1 | thislist = ["apple", "banana", "cherry"] |
复制列表
您只能通过键入 list2 = list1
来复制列表,因为:list2
将只是对 list1
的引用,list1
中所做的更改也将自动在 list2
中进行。
有一些方法可以进行复制,一种方法是使用内置的 List 方法 copy()
。
实例
使用 copy()
方法来复制列表:
1 | thislist = ["apple", "banana", "cherry"] |
制作副本的另一种方法是使用内建的方法 list()
。
实例
使用 list()
方法复制列表:
1 | thislist = ["apple", "banana", "cherry"] |
合并两个列表
在 Python 中,有几种方法可以连接或串联两个或多个列表。
最简单的方法之一是使用 + 运算符。
实例
合并两个列表:
1 | list1 = ["a", "b" , "c"] |
连接两个列表的另一种方法是将 list2 中的所有项一个接一个地追加到 list1 中:
实例
把 list2 追加到 list1 中:
1 | list1 = ["a", "b" , "c"] |
或者,您可以使用 extend() 方法,其目的是将一个列表中的元素添加到另一列表中:
实例
使用 extend() 方法将 list2 添加到 list1 的末尾:
1 | list1 = ["a", "b" , "c"] |
list() 构造函数
也可以使用 list()
构造函数创建一个新列表。
实例
使用 list()
构造函数创建列表:
1 | thislist = list(("apple", "banana", "cherry")) # 请注意双括号 |
列表方法
Python 有一组可以在列表上使用的内建方法。
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
Python 元组
元组(Tuple)
元组是有序且不可更改的集合。在 Python 中,元组是用圆括号编写的。
实例
创建元组:
1 | thistuple = ("apple", "banana", "cherry") |
访问元组项目
您可以通过引用方括号内的索引号来访问元组项目:
实例
打印元组中的第二个项目:
1 | thistuple = ("apple", "banana", "cherry") |
负索引
负索引表示从末尾开始,-1 表示最后一个项目,-2 表示倒数第二个项目,依此类推。
实例
打印元组的最后一个项目:
1 | thistuple = ("apple", "banana", "cherry") |
索引范围
您可以通过指定范围的起点和终点来指定索引范围。
指定范围后,返回值将是带有指定项目的新元组。
实例
返回第三、第四、第五个项目:
1 | thistuple = ("apple", "banana", "cherry", "orange", "kiwi", "melon", "mango") |
注释:搜索将从索引 2(包括)开始,到索引 5(不包括)结束。
请记住,第一项的索引为 0。
负索引范围
如果要从元组的末尾开始搜索,请指定负索引:
实例
此例将返回从索引 -4(包括)到索引 -1(排除)的项目:
1 | thistuple = ("apple", "banana", "cherry", "orange", "kiwi", "melon", "mango") |
更改元组值
创建元组后,您将无法更改其值。元组是不可变的,或者也称为恒定的。
但是有一种解决方法。您可以将元组转换为列表,更改列表,然后将列表转换回元组。
实例
把元组转换为列表即可进行更改:
1 | x = ("apple", "banana", "cherry") |
遍历元组
您可以使用 for
循环遍历元组项目。
实例
遍历项目并打印值:
1 | thistuple = ("apple", "banana", "cherry") |
您将在 Python For 循环 这一章中学习有关 for
循环的更多知识。
检查项目是否存在
要确定元组中是否存在指定的项,请使用 in
关键字:
实例
检查元组中是否存在 “apple”:
1 | thistuple = ("apple", "banana", "cherry") |
元组长度
要确定元组有多少项,请使用 len()
方法:
实例
打印元组中的项目数量:
1 | thistuple = ("apple", "banana", "cherry") |
添加项目
元组一旦创建,您就无法向其添加项目。元组是不可改变的。
实例
您无法向元组添加项目:
1 | thistuple = ("apple", "banana", "cherry") |
创建有一个项目的元组
如需创建仅包含一个项目的元组,您必须在该项目后添加一个逗号,否则 Python 无法将变量识别为元组。
实例
单项元组,别忘了逗号:
1 | thistuple = ("apple",) |
删除项目
注释:您无法删除元组中的项目。
元组是不可更改的,因此您无法从中删除项目,但您可以完全删除元组:
实例
del 关键字可以完全删除元组:
1 | thistuple = ("apple", "banana", "cherry") |
合并两个元组
如需连接两个或多个元组,您可以使用 + 运算符:
实例
合并这个元组:
1 | tuple1 = ("a", "b" , "c") |
tuple() 构造函数
也可以使用 tuple()
构造函数来创建元组。
实例
使用 tuple()
方法来创建元组:
1 | thistuple = tuple(("apple", "banana", "cherry")) # 请注意双括号 |
元组方法
Python 提供两个可以在元组上使用的内建方法。
方法 | 描述 |
---|---|
count() | 返回元组中指定值出现的次数。 |
index() | 在元组中搜索指定的值并返回它被找到的位置。 |
Python 集合
集合(Set)
集合是无序和无索引的集合。在 Python 中,集合用花括号编写。
实例
创建集合:
1 | thisset = {"apple", "banana", "cherry"} |
注释:集合是无序的,因此您无法确定项目的显示顺序。
访问项目
您无法通过引用索引来访问 set 中的项目,因为 set 是无序的,项目没有索引。
但是您可以使用 for
循环遍历 set 项目,或者使用 in
关键字查询集合中是否存在指定值。
实例
遍历集合,并打印值:
1 | thisset = {"apple", "banana", "cherry"} |
实例
检查 set 中是否存在 “banana”:
1 | thisset = {"apple", "banana", "cherry"} |
更改项目
集合一旦创建,您就无法更改项目,但是您可以添加新项目。
添加项目
要将一个项添加到集合,请使用 add()
方法。
要向集合中添加多个项目,请使用 update()
方法。
实例
使用 add()
方法向 set 添加项目:
1 | thisset = {"apple", "banana", "cherry"} |
实例
使用 update()
方法将多个项添加到集合中:
1 | thisset = {"apple", "banana", "cherry"} |
获取 Set 的长度
要确定集合中有多少项,请使用 len()
方法。
实例
获取集合中的项目数:
1 | thisset = {"apple", "banana", "cherry"} |
删除项目
要删除集合中的项目,请使用 remove()
或 discard()
方法。
实例
使用 remove()
方法来删除 “banana”:
1 | thisset = {"apple", "banana", "cherry"} |
注释:如果要删除的项目不存在,则 remove()
将引发错误。
实例
使用 discard()
方法来删除 “banana”:
1 | thisset = {"apple", "banana", "cherry"} |
注释:如果要删除的项目不存在,则 discard()
不会引发错误。
您还可以使用 pop()
方法删除项目,但此方法将删除最后一项。请记住,set 是无序的,因此您不会知道被删除的是什么项目。
pop()
方法的返回值是被删除的项目。
实例
使用 pop()
方法删除最后一项:
1 | thisset = {"apple", "banana", "cherry"} |
注释:集合是无序的,因此在使用 pop()
方法时,您不会知道删除的是哪个项目。
实例
clear()
方法清空集合:
1 | thisset = {"apple", "banana", "cherry"} |
实例
del
彻底删除集合:
1 | thisset = {"apple", "banana", "cherry"} |
合并两个集合
在 Python 中,有几种方法可以连接两个或多个集合。
您可以使用 union() 方法返回包含两个集合中所有项目的新集合,也可以使用 update() 方法将一个集合中的所有项目插入另一个集合中:
实例
union() 方法返回一个新集合,其中包含两个集合中的所有项目:
1 | set1 = {"a", "b" , "c"} |
实例
update() 方法将 set2 中的项目插入 set1 中:
1 | set1 = {"a", "b" , "c"} |
注释:union() 和 update() 都将排除任何重复项。
还有其他方法将两个集合连接起来,并且仅保留重复项,或者永远不保留重复项,请查看此页面底部的集合方法完整列表。
set() 构造函数
也可以使用 set()
构造函数来创建集合。
实例
使用 set()
构造函数来创建集合:
1 | thisset = set(("apple", "banana", "cherry")) # 请留意这个双括号 |
Set 方法
Python 拥有一套能够在集合(set)上使用的内建方法。
方法 | 描述 |
---|---|
add() | 向集合添加元素。 |
clear() | 删除集合中的所有元素。 |
copy() | 返回集合的副本。 |
difference() | 返回包含两个或更多集合之间差异的集合。 |
difference_update() | 删除此集合中也包含在另一个指定集合中的项目。 |
discard() | 删除指定项目。 |
intersection() | 返回为两个其他集合的交集的集合。 |
intersection_update() | 删除此集合中不存在于其他指定集合中的项目。 |
isdisjoint() | 返回两个集合是否有交集。 |
issubset() | 返回另一个集合是否包含此集合。 |
issuperset() | 返回此集合是否包含另一个集合。 |
pop() | 从集合中删除一个元素。 |
remove() | 删除指定元素。 |
symmetric_difference() | 返回具有两组集合的对称差集的集合。 |
symmetric_difference_update() | 插入此集合和另一个集合的对称差集。 |
union() | 返回包含集合并集的集合。 |
update() | 用此集合和其他集合的并集来更新集合。 |
Python 字典
字典(Dictionary)
字典是一个无序、可变和有索引的集合。在 Python 中,字典用花括号编写,拥有键和值。
实例
创建并打印字典:
1 | thisdict = { |
访问项目
您可以通过在方括号内引用其键名来访问字典的项目:
实例
获取 “model” 键的值:
1 | x = thisdict["model"] |
还有一个名为 get()
的方法会给你相同的结果:
实例
获取 “model” 键的值:
1 | x = thisdict.get("model") |
更改值
您可以通过引用其键名来更改特定项的值:
实例
把 “year” 改为 2019:
1 | thisdict = { |
遍历字典
您可以使用 for
循环遍历字典。
循环遍历字典时,返回值是字典的键,但也有返回值的方法。
实例
逐个打印字典中的所有键名:
1 | for x in thisdict: |
实例
逐个打印字典中的所有值:
1 | for x in thisdict: |
实例
您还可以使用 values()
函数返回字典的值:
1 | for x in thisdict.values(): |
实例
通过使用 items() 函数遍历键和值:
1 | for x, y in thisdict.items(): |
检查键是否存在
要确定字典中是否存在指定的键,请使用 in
关键字:
实例
检查字典中是否存在 “model”:
1 | thisdict = { |
字典长度
要确定字典有多少项目(键值对),请使用 len()
方法。
实例
打印字典中的项目数:
1 | print(len(thisdict)) |
添加项目
通过使用新的索引键并为其赋值,可以将项目添加到字典中:
实例
1 | thisdict = { |
删除项目
有几种方法可以从字典中删除项目:
实例
pop() 方法删除具有指定键名的项:
1 | thisdict = { |
实例
popitem()
方法删除最后插入的项目(在 3.7 之前的版本中,删除随机项目):
1 | thisdict = { |
实例
del
关键字删除具有指定键名的项目:
1 | thisdict = { |
实例
del
关键字也可以完全删除字典:
1 | thisdict = { |
实例
clear()
关键字清空字典:
1 | thisdict = { |
复制字典
您不能通过键入 dict2 = dict1
来复制字典,因为:dict2
只是对 dict1
的引用,而 dict1
中的更改也将自动在 dict2
中进行。
有一些方法可以进行复制,一种方法是使用内建的字典方法 copy()
。
实例
使用 copy()
方法来复制字典:
1 | thisdict = { |
制作副本的另一种方法是使用内建方法 dict()
。
实例
使用 dict()
方法创建字典的副本:
1 | thisdict = { |
嵌套字典
词典也可以包含许多词典,这被称为嵌套词典。
实例
创建包含三个字典的字典:
1 | myfamily = { |
或者,如果您想嵌套三个已经作为字典存在的字典:
实例
创建三个字典,然后创建一个包含其他三个字典的字典:
1 | child1 = { |
dict() 构造函数
也可以使用 dict()
构造函数创建新的字典:
实例
1 | thisdict = dict(brand="Porsche", model="911", year=1963) |
字典方法
Python 提供一组可以在字典上使用的内建方法。
方法 | 描述 |
---|---|
clear() | 删除字典中的所有元素 |
copy() | 返回字典的副本 |
fromkeys() | 返回拥有指定键和值的字典 |
get() | 返回指定键的值 |
items() | 返回包含每个键值对的元组的列表 |
keys() | 返回包含字典键的列表 |
pop() | 删除拥有指定键的元素 |
popitem() | 删除最后插入的键值对 |
setdefault() | 返回指定键的值。如果该键不存在,则插入具有指定值的键。 |
update() | 使用指定的键值对字典进行更新 |
values() | 返回字典中所有值的列表 |
Python If … Else
Python 条件和 If 语句
Python 支持来自数学的常用逻辑条件:
- 等于:
a == b
- 不等于:
a != b
- 小于:
a < b
- 小于等于:
a <= b
- 大于:
a > b
- 大于等于:
a >= b
这些条件能够以多种方式使用,最常见的是“if 语句”和循环。
if 语句使用 if
关键词来写。
实例
If 语句:
1 | a = 66 |
在这个例子中,我们使用了两个变量,a
和 b
,作为 if 语句的一部分,它们用于测试 b 是否大于 a。因为 a 是 66,而 b 是 200,我们知道 200 大于 66,所以我们将“b大于a”打印到屏幕。
缩进
Python 依赖缩进,使用空格来定义代码中的范围。其他编程语言通常使用花括号来实现此目的。
实例
没有缩进的 If 语句(会引发错误):
1 | a = 66 |
Elif
elif
关键字是 python 对“如果之前的条件不正确,那么试试这个条件”的表达方式。
实例
1 | a = 66 |
在这个例子中,a
等于 b
,所以第一个条件不成立,但 elif
条件为 true,所以我们打印屏幕“a 和 b 相等”。
Else
else 关键字捕获未被之前的条件捕获的任何内容。
实例
1 | a = 200 |
在这个例子中,a
大于 b
,所以第一个条件不成立,elif
条件也不成立,所以我们转到 else
条件并打印到屏幕“a 大于 b”。
您也可以使用没有 elif
的 else
:
实例
1 | a = 200 |
简写 If
如果只有一条语句要执行,则可以将其与 if 语句放在同一行。
实例
单行 if 语句:
1 | a = 200 |
简写 If … Else
如果只有两条语句要执行,一条用于 if,另一条用于 else,则可以将它们全部放在同一行:
实例
单行 if else 语句:
1 | a = 200 |
您还可以在同一行上使用多个 else 语句:
实例
单行 if else 语句,有三个条件:
1 | a = 200 |
And
and
关键字是一个逻辑运算符,用于组合条件语句:
实例
测试 a 是否大于 b,且 c 是否大于 a:
1 | a = 200 |
Or
or
关键字也是逻辑运算符,用于组合条件语句:
实例
测试 a 是否大于 b,或者 a 是否大于 c:
1 | a = 200 |
嵌套 If
您可以在 if 语句中包含 if 语句,这称为嵌套 if 语句。
实例
1 | x = 52 |
pass 语句
if 语句不能为空,但是如果您处于某种原因写了无内容的 if 语句,请使用 pass 语句来避免错误。
实例
1 | a = 66 |
Python While 循环
Python 循环
Python 有两个原始的循环命令:
while
循环for
循环
while 循环
如果使用 while
循环,只要条件为真,我们就可以执行一组语句。
实例
只要 i 小于 7,打印 i:
1 | i = 1 |
注释:请记得递增 i
,否则循环会永远继续。
while
循环需要准备好相关的变量。在这个实例中,我们需要定义一个索引变量 i
,我们将其设置为 1。
break 语句
如果使用 break
语句,即使 while 条件为真,我们也可以停止循环:
实例
在 i 等于 3 时退出循环:
1 | i = 1 |
continue 语句
如果使用 continue
语句,我们可以停止当前的迭代,并继续下一个:
实例
如果 i 等于 3,则继续下一个迭代:
1 | i = 0 |
else 语句
通过使用 else 语句,当条件不再成立时,我们可以运行一次代码块:
实例
条件为假时打印一条消息:
1 | i = 1 |
Python For 循环
Python For 循环
for
循环用于迭代序列(即列表,元组,字典,集合或字符串)。
这与其他编程语言中的 for
关键字不太相似,而是更像其他面向对象编程语言中的迭代器方法。
通过使用 for
循环,我们可以为列表、元组、集合中的每个项目等执行一组语句。
实例
打印 fruits 列表中的每种水果:
1 | fruits = ["apple", "banana", "cherry"] |
提示:for
循环不需要预先设置索引变量。
循环遍历字符串
甚至连字符串都是可迭代的对象,它们包含一系列的字符:
实例
循环遍历单词 “banana” 中的字母:
1 | for x in "banana": |
break 语句
通过使用 break
语句,我们可以在循环遍历所有项目之前停止循环:
实例
如果 x 是 “banana”,则退出循环:
1 | fruits = ["apple", "banana", "cherry"] |
实例
当 x 为 “banana” 时退出循环,但这次在打印之前中断:
1 | fruits = ["apple", "banana", "cherry"] |
continue 语句
通过使用 continue
语句,我们可以停止循环的当前迭代,并继续下一个:
实例
不打印香蕉:
1 | fruits = ["apple", "banana", "cherry"] |
range() 函数
如需循环一组代码指定的次数,我们可以使用 range()
函数,
range()
函数返回一个数字序列,默认情况下从 0 开始,并递增 1(默认地),并以指定的数字结束。
实例
使用 range()
函数:
1 | for x in range(10): |
注意:range(10)
不是 0 到 10 的值,而是值 0 到 9。
range()
函数默认 0 为起始值,不过可以通过添加参数来指定起始值:range(3, 10)
,这意味着值为 3 到 10(但不包括 10):
实例
使用起始参数:
1 | for x in range(3, 10): |
range()
函数默认将序列递增 1,但是可以通过添加第三个参数来指定增量值:range(2, 30, 3)
:
实例
使用 3 递增序列(默认值为 1):
1 | for x in range(3, 50, 6): |
For 循环中的 Else
for 循环中的 else
关键字指定循环结束时要执行的代码块:
实例
打印 0 到 9 的所有数字,并在循环结束时打印一条消息:
1 | for x in range(10): |
嵌套循环
嵌套循环是循环内的循环。
“外循环”每迭代一次,“内循环”将执行一次:
实例
打印每个水果的每个形容词:
1 | adj = ["red", "big", "tasty"] |
pass 语句
for 语句不能为空,但是如果您处于某种原因写了无内容的 for 语句,请使用 pass 语句来避免错误。
实例
1 | for x in [0, 1, 2]: |
Python 函数
函数是一种仅在调用时运行的代码块。
您可以将数据(称为参数)传递到函数中。
函数可以把数据作为结果返回。
创建函数
在 Python 中,使用 def
关键字定义函数:
实例
1 | def my_function(): |
调用函数
如需调用函数,请使用函数名称后跟括号:
实例
1 | def my_function(): |
参数
信息可以作为参数传递给函数。
参数在函数名后的括号内指定。您可以根据需要添加任意数量的参数,只需用逗号分隔即可。
下面的例子有一个带参数(fname)的函数。当调用此函数时,我们传递一个名字,在函数内部使用它来打印全名:
实例
1 | def my_function(fname): |
默认参数值
下面的例子展示如何使用默认参数值。
如果我们调用了不带参数的函数,则使用默认值:
实例
1 | def my_function(country = "China"): |
以 List 传参
您发送到函数的参数可以是任何数据类型(字符串、数字、列表、字典等),并且在函数内其将被视为相同数据类型。
例如,如果您将 List 作为参数发送,它到达函数时仍将是 List(列表):
实例
1 | def my_function(food): |
返回值
如需使函数返回值,请使用 return
语句:
实例
1 | def my_function(x): |
关键字参数
您还可以使用 key = value 语法发送参数。
参数的顺序无关紧要。
实例
1 | def my_function(child3, child2, child1): |
在 Python 文档中,“关键字参数”一词通常简称为 kwargs。
任意参数
如果您不知道将传递给您的函数多少个参数,请在函数定义的参数名称前添加 *。
这样,函数将接收一个参数元组,并可以相应地访问各项:
实例
如果参数数目未知,请在参数名称前添加 *:
1 | def my_function(*kids): |
pass 语句
函数定义不能为空,但是如果您出于某种原因写了无内容的函数定义,请使用 pass 语句来避免错误。
实例
1 | def myfunction: |
递归
Python 也接受函数递归,这意味着定义的函数能够调用自身。
递归是一种常见的数学和编程概念。它意味着函数调用自身。这样做的好处是可以循环访问数据以达成结果。
开发人员应该非常小心递归,因为它可以很容易地编写一个永不终止的,或者使用过量内存或处理器能力的函数。但是,在被正确编写后,递归可能是一种非常有效且数学上优雅的编程方法。
在这个例子中,tri_recursion()
是我们定义为调用自身 (“recurse”) 的函数。我们使用 k 变量作为数据,每次递归时递减(-1)。当条件不大于 0 时(比如当它为 0 时),递归结束。
对于新的开发人员来说,可能需要一些时间来搞清楚其工作原理,最好的方法是测试并修改它。
实例
递归的例子:
1 | def tri_recursion(k): |
Python Lambda
lambda 函数是一种小的匿名函数。
lambda 函数可接受任意数量的参数,但只能有一个表达式。
语法
1 | lambda arguments : expression |
执行表达式并返回结果:
实例
一个 lambda 函数,它把作为参数传入的数字加 10,然后打印结果:
1 | x = lambda a : a + 10 |
lambda 函数可接受任意数量的参数:
实例
一个 lambda 函数,它把参数 a 与参数 b 相乘并打印结果:
1 | x = lambda a, b : a * b |
实例
一个 lambda 函数,它把参数 a、b 和 c 相加并打印结果:
1 | x = lambda a, b, c : a + b + c |
为何使用 Lambda 函数?
当您把 lambda 用作另一个函数内的匿名函数时,会更好地展现 lambda 的强大能力。
假设您有一个带一个参数的函数定义,并且该参数将乘以未知数字:
1 | def myfunc(n): |
使用该函数定义来创建一个总是使所发送数字加倍的函数:
实例
1 | def myfunc(n): |
或者,使用相同的函数定义来创建一个总是使您发送的数字增加三倍的函数:
实例
1 | def myfunc(n): |
或者,在同一程序中使用相同的函数定义来生成两个函数:
实例
1 | def myfunc(n): |
如果在短时间内需要匿名函数,请使用 lambda 函数。
Python 数组
请注意,Python 没有内置对数组的支持,但可以使用 Python 列表代替。
数组
数组用于在单个变量中存储多个值:
实例
创建一个包含汽车品牌的数组:
1 | cars = ["Porsche", "Volvo", "BMW"] |
什么是数组?
数组是一种特殊变量,能够一次包含多个值。
如果您有一个项目列表(例如,汽车品牌列表),将牌子存储在单个变量中可能如下所示:
1 | car1 = "Porsche" |
但是,如果您想遍历这些品牌并找到特定的汽车品牌怎么办?如果不是 3 辆车,而是 300 辆怎么办?
解决方案是数组!
数组可以在单个名称下保存多个值,您可以通过引用索引号来访问这些值。
访问数组元素
通过索引号来引用数组元素。
实例
获取首个数组项目的值:
1 | x = cars[0] |
实例
修改首个数组项目的值:
1 | cars[0] = "Audi" |
数组长度
使用 len()
方法来返回数组的长度(数组中的元素数量)。
实例
返回 cars 数组中的元素数量:
1 | x = len(cars) |
注释:数组长度总是比最高的数组索引大一个。
循环数组元素
您可以使用 for in
循环遍历数组的所有元素。
实例
打印 cars 数组中的每个项目:
1 | for x in cars: |
添加数组元素
您可以使用 append()
方法把元素添加到数组中。
实例
向 cars 数组再添加一个元素:
1 | cars.append("Audi") |
删除数组元素
您可以使用 pop()
方法从数组中删除元素。
实例
删除 cars 数组的第二个元素:
1 | cars.pop(1) |
您也可以使用 remove()
方法从数组中删除元素。
实例
删除值为 “Volvo” 的元素:
1 | cars.remove("Volvo") |
注释:列表的 remove()
方法仅删除首次出现的指定值。
数组方法
Python 提供一组可以在列表或数组上使用的内建方法。
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
注释:Python 没有内置对数组的的支持,但可以使用 Python 列表代替。
Python 类和对象
Python 类/对象
Python 是一种面向对象的编程语言。
Python 中的几乎所有东西都是对象,拥有属性和方法。
类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。
创建类
如需创建类,请使用 class
关键字:
实例
使用名为 x 的属性,创建一个名为 MyClass 的类:
1 | class MyClass: |
创建对象
现在我们可以使用名为 myClass 的类来创建对象:
实例
创建一个名为 p1 的对象,并打印 x 的值:
1 | p1 = MyClass() |
init() 函数
上面的例子是最简单形式的类和对象,在实际应用程序中并不真正有用。
要理解类的含义,我们必须先了解内置的 __init__()
函数。
所有类都有一个名为 init() 的函数,它始终在启动类时执行。
使用 init() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:
实例
创建名为 Person 的类,使用 init() 函数为 name 和 age 赋值:
1 | class Person: |
注释:每次使用类创建新对象时,都会自动调用 init() 函数。
对象方法
对象也可以包含方法。对象中的方法是属于该对象的函数。
让我们在 Person 类中创建方法:
实例
插入一个打印问候语的函数,并在 p1 对象上执行它:
1 | class Person: |
提示:self 参数是对类的当前实例的引用,用于访问属于该类的变量。
self 参数
self
参数是对类的当前实例的引用,用于访问属于该类的变量。
它不必被命名为 self
,您可以随意调用它,但它必须是类中任意函数的首个参数:
实例
使用单词 mysillyobject 和 abc 代替 self:
1 | class Person: |
修改对象属性
您可以这样修改对象的属性:
实例
把 p1 的年龄设置为 40:
1 | p1.age = 40 |
删除对象属性
您可以使用 del
关键字删除对象的属性:
实例
删除 p1 对象的 age 属性:
1 | del p1.age |
删除对象
使用 del
关键字删除对象:
实例
删除 p1 对象:
1 | del p1 |
pass 语句
类定义不能为空,但是如果您处于某种原因写了无内容的类定义语句,请使用 pass 语句来避免错误。
实例
1 | class Person: |
Python 继承
Python 继承
继承允许我们定义继承另一个类的所有方法和属性的类。
父类是继承的类,也称为基类。
子类是从另一个类继承的类,也称为派生类。
创建父类
任何类都可以是父类,因此语法与创建任何其他类相同:
实例
创建一个名为 Person 的类,其中包含 firstname 和 lastname 属性以及 printname 方法:
1 | class Person: |
创建子类
要创建从其他类继承功能的类,请在创建子类时将父类作为参数发送:
实例
创建一个名为 Student 的类,它将从 Person 类继承属性和方法:
1 | class Student(Person): |
注释:如果您不想向该类添加任何其他属性或方法,请使用 pass
关键字。
现在,Student 类拥有与 Person 类相同的属性和方法。
实例
使用 Student 类创建一个对象,然后执行 printname 方法:
1 | x = Student("Elon", "Musk") |
添加 init() 函数
到目前为止,我们已经创建了一个子类,它继承了父类的属性和方法。
我们想要把 __init__()
函数添加到子类(而不是 pass
关键字)。
注释:每次使用类创建新对象时,都会自动调用 init() 函数。
实例
为 Student 类添加 init() 函数:
1 | class Student(Person): |
当您添加 init() 函数时,子类将不再继承父的 init() 函数。
注释:子的 init() 函数会覆盖对父的 init() 函数的继承。
如需保持父的 init() 函数的继承,请添加对父的 init() 函数的调用:
实例
1 | class Student(Person): |
现在,我们已经成功添加了 init() 函数,并保留了父类的继承,我们准备好在 init() 函数中添加功能了。
使用 super() 函数
Python 还有一个 super()
函数,它会使子类从其父继承所有方法和属性:
实例
1 | class Student(Person): |
通过使用 super()
函数,您不必使用父元素的名称,它将自动从其父元素继承方法和属性。
添加属性
实例
把名为 graduationyear
的属性添加到 Student
类:
1 | class Student(Person): |
在这例子中,2019 年应该是一个变量,并在创建 student 对象时传递到 Student 类。为此,请在 init() 函数中添加另一个参数:
实例
添加 year
参数,并在创建对象时传递正确的年份:
1 | class Student(Person): |
添加方法
实例
把名为 welcome
的方法添加到 Student 类:
1 | class Student(Person): |
提示:如果您在子类中添加一个与父类中的函数同名的方法,则将覆盖父方法的继承。
Python 迭代器
Python 迭代器
迭代器是一种对象,该对象包含值的可计数数字。
迭代器是可迭代的对象,这意味着您可以遍历所有值。
从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 __iter__()
和 __next__()
。
迭代器 VS 可迭代对象(Iterable)
列表、元组、字典和集合都是可迭代的对象。它们是可迭代的容器,您可以从中获取迭代器(Iterator)。
所有这些对象都有用于获取迭代器的 iter()
方法:
实例
从元组返回一个迭代器,并打印每个值:
1 | mytuple = ("apple", "banana", "cherry") |
甚至连字符串都是可迭代的对象,并且可以返回迭代器:
实例
字符串也是可迭代的对象,包含一系列字符:
1 | mystr = "banana" |
遍历迭代器
我们也可以使用 for 循环遍历可迭代对象:
实例
迭代元组的值:
1 | mytuple = ("apple", "banana", "cherry") |
实例
迭代字符串中的字符:
1 | mystr = "banana" |
提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next()
方法。
创建迭代器
要把对象/类创建为迭代器,必须为对象实现 __iter__()
和 __next__()
方法。
正如您在 Python 类/对象 一章中学到的,所有类都有名为 __init__()
的函数,它允许您在创建对象时进行一些初始化。
__iter__()
方法的作用相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。
__next__()
方法也允许您执行操作,并且必须返回序列中的下一个项目。
实例
创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等):
1 | class MyNumbers: |
StopIteration
如果你有足够的 next()
语句,或者在 for 循环中使用,则上面的例子将永远进行下去。
为了防止迭代永远进行,我们可以使用 StopIteration
语句。
在 __next__()
方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误:
实例
在 20 个迭代之后停止:
1 | class MyNumbers: |
Python 作用域
变量仅在创建区域内可用。这称为作用域。
局部作用域
在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。
实例
在函数内部创建的变量在该函数内部可用:
1 | def myfunc(): |
函数内部的函数
如上例中所示,变量 x 在函数外部不可用,但对于函数内部的任何函数均可用:
实例
能够从函数内的一个函数访问局部变量:
1 | def myfunc(): |
全局作用域
在 Python 代码主体中创建的变量是全局变量,属于全局作用域。
全局变量在任何范围(全局和局部)中可用。
实例
在函数外部创建的变量是全局变量,任何人都可以使用:
1 | x = 100 |
命名变量
如果在函数内部和外部操作同名变量,Python 会将它们视为两个单独的变量,一个在全局范围内可用(在函数外部),而一个在局部范围内可用(在函数内部):
实例
该函数将打印局部变量 x,然后代码还会打印全局变量 x:
1 | x = 100 |
Global 关键字
如果您需要创建一个全局变量,但被卡在本地作用域内,则可以使用 global 关键字。
global 关键字使变量成为全局变量。
实例
如果使用 global 关键字,则该变量属于全局范围:
1 | def myfunc(): |
另外,如果要在函数内部更改全局变量,也请使用 global 关键字。
实例
要在函数内部更改全局变量的值,请使用 global 关键字引用该变量:
1 | x = 100 |
Python 模块
什么是模块?
请思考与代码库类似的模块。
模块是包含一组函数的文件,希望在应用程序中引用。
创建模块
如需创建模块,只需将所需代码保存在文件扩展名为 .py
的文件中:
实例
在名为 mymodule.py
的文件中保存代码:
1 | def greeting(name): |
使用模块
现在,我们就可以用 import
语句来使用我们刚刚创建的模块:
实例
导入名为 mymodule
的模块,并调用 greeting
函数:
1 | import mymodule |
注释:如果使用模块中的函数时,请使用以下语法:
1 | module_name.function_name |
模块中的变量
模块可以包含已经描述的函数,但也可以包含各种类型的变量(数组、字典、对象等):
实例
在文件 mymodule.py
中保存代码:
1 | person1 = { |
实例
导入名为 mymodule
的模块,并访问 person1 字典:
1 | import mymodule |
为模块命名
您可以随意对模块文件命名,但是文件扩展名必须是 .py
。
重命名模块
您可以在导入模块时使用 as
关键字创建别名:
实例
为 mymodule 创建别名 mx:
1 | import mymodule as mx |
内建模块
Python 中有几个内建模块,您可以随时导入。
实例
导入并使用 platform
模块:
1 | import platform |
使用 dir() 函数
有一个内置函数可以列出模块中的所有函数名(或变量名)。dir()
函数:
实例
列出属于 platform 模块的所有已定义名称:
1 | import platform |
注释:dir() 函数可用于所有模块,也可用于您自己创建的模块。
从模块导入
您可以使用 from 关键字选择仅从模块导入部件。
实例
名为 mymodule 的模块拥有一个函数和一个字典:
1 | def greeting(name): |
实例
仅从模块导入 person1 字典:
1 | from mymodule import person1 |
提示:在使用 from 关键字导入时,请勿在引用模块中的元素时使用模块名称。示例:person1[“age”],而不是 mymodule.person1[“age”]。
Python 日期
Python 日期
Python 中的日期不是其自身的数据类型,但是我们可以导入名为 datetime
的模块,把日期视作日期对象进行处理。
实例
导入 datetime
模块并显示当前日期:
1 | import datetime |
日期输出
如果我们执行上面的代码,结果将是:
1 | 2019-08-14 12:52:55.817273 |
日期包含年、月、日、小时、分钟、秒和微秒。
datetime
模块有许多方法可以返回有关日期对象的信息。
以下是一些例子,您将在本章稍后详细学习它们:
实例
返回 weekday 的名称和年份:
1 | import datetime |
创建日期对象
如需创建日期,我们可以使用 datetime 模块的 datetime()
类(构造函数)。
datetime()
类需要三个参数来创建日期:年、月、日。
实例
创建日期对象:
1 | import datetime |
datetime()
类还接受时间和时区(小时、分钟、秒、微秒、tzone)的参数,不过它们是可选的,默认值为 0
,(时区默认为 None
)。
strftime() 方法
datetime
对象拥有把日期对象格式化为可读字符串的方法。
该方法称为 strftime()
,并使用一个 format
参数来指定返回字符串的格式:
实例
显示月份的名称:
1 | import datetime |
所有合法格式代码的参考:
指令 | 描述 | 实例 | TIY |
---|---|---|---|
%a | Weekday,短版本 | Wed | 试一试 |
%A | Weekday,完整版本 | Wednesday | 试一试 |
%w | Weekday,数字 0-6,0 为周日 | 3 | 试一试 |
%d | 日,数字 01-31 | 31 | 试一试 |
%b | 月名称,短版本 | Dec | 试一试 |
%B | 月名称,完整版本 | December | 试一试 |
%m | 月,数字01-12 | 12 | 试一试 |
%y | 年,短版本,无世纪 | 18 | 试一试 |
%Y | 年,完整版本 | 2018 | 试一试 |
%H | 小时,00-23 | 17 | 试一试 |
%I | 小时,00-12 | 05 | 试一试 |
%p | AM/PM | PM | 试一试 |
%M | 分,00-59 | 41 | 试一试 |
%S | 秒,00-59 | 08 | 试一试 |
%f | 微妙,000000-999999 | 548513 | 试一试 |
%z | UTC 偏移 | +0100 | 试一试 |
%Z | 时区 | CST | 试一试 |
%j | 天数,001-366 | 365 | 试一试 |
%U | 周数,每周的第一天是周日,00-53 | 52 | 试一试 |
%W | 周数,每周的第一天是周一,00-53 | 52 | 试一试 |
%c | 日期和时间的本地版本 | Mon Dec 31 17:41:00 2018 | 试一试 |
%x | 日期的本地版本 | 12/31/18 | 试一试 |
%X | 时间的本地版本 | 17:41:00 | 试一试 |
%% | A % character | % | 试一试 |
Python JSON
JSON 是用于存储和交换数据的语法。
JSON 是用 JavaScript 对象表示法(JavaScript object notation)编写的文本。
Python 中的 JSON
Python 有一个名为 json
的内置包,可用于处理 JSON 数据。
实例
导入 json
模块:
1 | import json |
解析 JSON - 把 JSON 转换为 Python
若有 JSON 字符串,则可以使用 json.loads()
方法对其进行解析。
结果将是 Python 字典。
实例
把 JSON 转换为 Python:
1 | import json |
把 Python 转换为 JSON
若有 Python 对象,则可以使用 json.dumps()
方法将其转换为 JSON 字符串。
实例
把 Python 转换为 JSON:
1 | import json |
您可以把以下类型的 Python 对象转换为 JSON 字符串:
- dict
- list
- tuple
- string
- int
- float
- True
- False
- None
实例
将 Python 对象转换为 JSON 字符串,并打印值:
1 | import json |
当 Python 转换为 JSON 时,Python 对象会被转换为 JSON(JavaScript)等效项:
Python | JSON |
---|---|
dict | Object |
list | Array |
tuple | Array |
str | String |
int | Number |
float | Number |
True | true |
False | false |
None | null |
实例
转换包含所有合法数据类型的 Python 对象:
1 | import json |
格式化结果
上面的实例打印一个 JSON 字符串,但它不是很容易阅读,没有缩进和换行。
json.dumps()
方法提供了令结果更易读的参数:
实例
使用 indent
参数定义缩进数:
1 | json.dumps(x, indent=4) |
您还可以定义分隔符,默认值为(”, “, “: “),这意味着使用逗号和空格分隔每个对象,使用冒号和空格将键与值分开:
实例
使用 separators
参数来更改默认分隔符:
1 | json.dumps(x, indent=4, separators=(". ", " = ")) |
对结果排序
json.dumps()
方法提供了对结果中的键进行排序的参数:
实例
使用 sort_keys
参数来指定是否应对结果进行排序:
1 | json.dumps(x, indent=4, sort_keys=True) |
Python RegEx
RegEx 或正则表达式是形成搜索模式的字符序列。
RegEx 可用于检查字符串是否包含指定的搜索模式。
RegEx 模块
Python 提供名为 re
的内置包,可用于处理正则表达式。
导入 re
模块:
1 | import re |
Python 中的 RegEx
导入 re
模块后,就可以开始使用正则表达式了:
实例
检索字符串以查看它是否以 “China” 开头并以 “country” 结尾:
1 | import re |
RegEx 函数
re
模块提供了一组函数,允许我们检索字符串以进行匹配:
函数 | 描述 |
---|---|
findall | 返回包含所有匹配项的列表 |
search | 如果字符串中的任意位置存在匹配,则返回 Match 对象 |
split | 返回在每次匹配时拆分字符串的列表 |
sub | 用字符串替换一个或多个匹配项 |
元字符
元字符是具有特殊含义的字符:
字符 | 描述 | 示例 | TIY |
---|---|---|---|
[] | 一组字符 | “[a-m]” | 试一试 |
\ | 示意特殊序列(也可用于转义特殊字符) | “\d” | 试一试 |
. | 任何字符(换行符除外) | “he..o” | 试一试 |
^ | 起始于 | “^hello” | 试一试 |
$ | 结束于 | “world$” | 试一试 |
* | 零次或多次出现 | “aix*” | 试一试 |
+ | 一次或多次出现 | “aix+” | 试一试 |
{} | 确切地指定的出现次数 | “al{2}” | 试一试 |
| | 两者任一 | “falls|stays” | 试一试 |
() | 捕获和分组 |
特殊序列
特殊序列指的是 \
后跟下表中的某个字符,拥有特殊含义:
字符 | 描述 | 示例 | TIY |
---|---|---|---|
\A | 如果指定的字符位于字符串的开头,则返回匹配项 | “\AThe” | 试一试 |
\b | 返回指定字符位于单词的开头或末尾的匹配项 | r”\bain” r”ain\b” | 试一试 试一试 |
\B | 返回指定字符存在的匹配项,但不在单词的开头(或结尾处) | r”\Bain” r”ain\B” | 试一试 试一试 |
\d | 返回字符串包含数字的匹配项(数字 0-9) | “\d” | 试一试 |
\D | 返回字符串不包含数字的匹配项 | “\D” | 试一试 |
\s | 返回字符串包含空白字符的匹配项 | “\s” | 试一试 |
\S | 返回字符串不包含空白字符的匹配项 | “\S” | 试一试 |
\w | 返回一个匹配项,其中字符串包含任何单词字符 (从 a 到 Z 的字符,从 0 到 9 的数字和下划线 _ 字符) | “\w” | 试一试 |
\W | 返回一个匹配项,其中字符串不包含任何单词字符 | “\W” | 试一试 |
\Z | 如果指定的字符位于字符串的末尾,则返回匹配项 | “Spain\Z” | 试一试 |
集合(Set)
集合(Set)是一对方括号 []
内的一组字符,具有特殊含义:
集合 | 描述 | 试一试 |
---|---|---|
[arn] | 返回一个匹配项,其中存在指定字符(a,r 或 n)之一 | 试一试 |
[a-n] | 返回字母顺序 a 和 n 之间的任意小写字符匹配项 | 试一试 |
[^arn] | 返回除 a、r 和 n 之外的任意字符的匹配项 | 试一试 |
[0123] | 返回存在任何指定数字(0、1、2 或 3)的匹配项 | 试一试 |
[0-9] | 返回 0 与 9 之间任意数字的匹配 | 试一试 |
[0-5][0-9] | 返回介于 0 到 9 之间的任何数字的匹配项 | 试一试 |
[a-zA-Z] | 返回字母顺序 a 和 z 之间的任何字符的匹配,小写或大写 | 试一试 |
[+] | 在集合中,+、*、.、|、()、$、{} 没有特殊含义,因此 [+] 表示:返回字符串中任何 + 字符的匹配项 | 试一试 |
findall() 函数
findall()
函数返回包含所有匹配项的列表。
实例
打印所有匹配的列表:
1 | import re |
这个列表以被找到的顺序包含匹配项。
如果未找到匹配项,则返回空列表:
实例
如果未找到匹配,则返回空列表:
1 | import re |
search() 函数
search()
函数搜索字符串中的匹配项,如果存在匹配则返回 Match 对象。
如果有多个匹配,则仅返回首个匹配项:
实例
在字符串中搜索第一个空白字符:
1 | import re |
如果未找到匹配,则返回值 None
:
实例
进行不返回匹配的检索:
1 | import re |
split() 函数
split()
函数返回一个列表,其中字符串在每次匹配时被拆分:
实例
在每个空白字符处进行拆分:
1 | import re |
您可以通过指定 maxsplit
参数来控制出现次数:
实例
仅在首次出现时拆分字符串:
1 | import re |
sub() 函数
sub()
函数把匹配替换为您选择的文本:
实例
用数字 9 替换每个空白字符:
1 | import re |
您可以通过指定 count
参数来控制替换次数:
实例
替换前两次出现:
1 | import re |
Match 对象
Match 对象是包含有关搜索和结果信息的对象。
注释:如果没有匹配,则返回值 None
,而不是 Match 对象。
实例
执行会返回 Match 对象的搜索:
1 | import re |
Match 对象提供了用于取回有关搜索及结果信息的属性和方法:
span()
返回的元组包含了匹配的开始和结束位置.string
返回传入函数的字符串group()
返回匹配的字符串部分
实例
打印首个匹配出现的位置(开始和结束位置)。
正则表达式查找以大写 “C” 开头的任何单词:
1 | import re |
实例
打印传入函数的字符串:
1 | import re |
实例
打印匹配的字符串部分。
正则表达式查找以大写 “C” 开头的任何单词:
1 | import re |
注释:如果没有匹配项,则返回值 None
,而不是 Match 对象。
Python PIP
什么是 PIP?
PIP 是 Python 包或模块的包管理器。
注释:如果您使用的是 Python 3.4 或更高版本,则默认情况下会包含 PIP。
什么是包(Package)?
包中包含模块所需的所有文件。
模块是您可以包含在项目中的 Python 代码库。
检查是否已安装 PIP
将命令行导航到 Python 脚本目录所在的位置,然后键入以下内容:
实例
检查 PIP 版本:
1 | C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip --version |
安装 PIP
如果尚未安装 PIP,可以从此页面下载并安装:https://pypi.org/project/pip/
下载包
下载包非常容易。
打开命令行界面并告诉 PIP 下载您需要的软件包。
将命令行导航到 Python 脚本目录的位置,然后键入以下内容:
实例
下载名为 “camelcase” 的包:
1 | C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip install camelcase |
现在,您已经下载并安装了第一个包!
使用包
安装包后,即可使用。
把 “camelcase” 包导入您的项目中。
实例
导入并使用 “camelcase”:
1 | import camelcase |
查找包
在 https://pypi.org/,您可以找到更多的包。
删除包
请使用 uninstall
命令来删除包:
实例
卸载名为 “camelcase” 的包:
1 | C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip uninstall camelcase |
PIP 包管理器会要求您确认是否需要删除 camelcase 包:
1 | Uninstalling camelcase-02.1: |
按 y
键,包就会被删除。
列出包
请使用 list
命令列出系统上安装的所有软件包:
实例
列出已安装的包:
1 | C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip list |
结果:
1 | Package Version |
Python Try Except
try
块允许您测试代码块以查找错误。
except
块允许您处理错误。
finally
块允许您执行代码,无论 try 和 except 块的结果如何。
异常处理
当我们调用 Python 并发生错误或异常时,通常会停止并生成错误消息。
可以使用 try
语句处理这些异常:
实例
try 块将生成异常,因为 x 未定义:
1 | try: |
由于 try 块引发错误,因此会执行 except 块。
如果没有 try 块,程序将崩溃并引发错误:
实例
该语句将引发错误,因为未定义 x:
1 | print(x) |
多个异常
您可以根据需要定义任意数量的 exception 块,例如,假如您要为特殊类型的错误执行特殊代码块:
实例
如果 try 块引发 NameError
,则打印一条消息,如果是其他错误则打印另一条消息:
1 | try: |
Else
如果没有引发错误,那么您可以使用 else
关键字来定义要执行的代码块:
实例
在本例中,try
块不会生成任何错误:
1 | try: |
Finally
如果指定了 finally
块,则无论 try 块是否引发错误,都会执行 finally 块。
实例
1 | try: |
这对于关闭对象并清理资源非常有用:
实例
试图打开并写入不可写的文件:
1 | try: |
程序可以继续,而且不会打开文件对象。
引发异常
作为 Python 开发者,您可以选择在条件发生时抛出异常。
如需抛出(引发)异常,请使用 raise
关键词。
实例
假如 x 小于 0,则引发异常并终止程序:
1 | x = -1 |
raise
关键字用于引发异常。
您能够定义所引发异常的类型、以及打印给用户的文本。
实例
如果 x 不是整数,则引发 TypeError:
1 | x = "hello" |
Python 命令行输入
命令行输入
Python 允许命令行输入。
这意味着我们能够要求用户输入。
Python 3.6 中的方法与 Python 2.7 略有不同。
Python 3.6 使用 input()
方法。
Python 2.7 使用 raw_input()
方法。
下面的例子会询问用户的姓名,当您输入名字时,名字将打印到屏幕上:
Python 3.6
1 | print("Enter your name:") |
Python 2.7
1 | print("Enter your name:") |
将此文件另存为 demo_string_input.py
,并通过命令行加载它:
1 | C:\Users\Your Name>python demo_string_input.py |
我们的程序会提示用户输入一个字符串:
1 | Enter your name: |
现在用户输入姓名:
1 | Bill |
然后,程序会打印一段消息:
1 | Hello, Bill |
Python 字符串格式化
为了确保字符串按预期显示,我们可以使用 format()
方法对结果进行格式化。
字符串 format()
format()
方法允许您格式化字符串的选定部分。
有时文本的一部分是你无法控制的,也许它们来自数据库或用户输入?
要控制此类值,请在文本中添加占位符(花括号 {}
),然后通过 format() 方法运行值:
实例
添加要显示价格的占位符:
1 | price = 52 |
您可以在花括号内添加参数以指定如何转换值:
实例
将价格格式化为带有两位小数的数字:
1 | txt = "The price is {:.2f} dollars" |
查看字符串 format() 参考手册中的所有格式类型。
多个值
如需使用更多值,只需向 format() 方法添加更多值:
1 | print(txt.format(price, itemno, count)) |
并添加更多占位符:
实例
1 | quantity = 3 |
索引号
您可以使用索引号(花括号 {0}
内的数字)来确保将值放在正确的占位符中:
实例
1 | quantity = 3 |
此外,如果要多次引用相同的值,请使用索引号:
实例
1 | age = 63 |
命名索引
您还可以通过在花括号 {carname}
中输入名称来使用命名索引,但是在传递参数值 txt.format(carname = “Ford”) 时,必须使用名称:
实例
1 | myorder = "I have a {carname}, it is a {model}." |
Python 文件处理
文件处理是任何 Web 应用程序的重要组成部分。
Python 有几个用于创建、读取、更新和删除文件的函数。
文件处理
在 Python 中使用文件的关键函数是 open()
函数。
open()
函数有两个参数:文件名和模式。
有四种打开文件的不同方法(模式):
"r"
- 读取 - 默认值。打开文件进行读取,如果文件不存在则报错。"a"
- 追加 - 打开供追加的文件,如果不存在则创建该文件。"w"
- 写入 - 打开文件进行写入,如果文件不存在则创建该文件。"x"
- 创建 - 创建指定的文件,如果文件存在则返回错误。
此外,您可以指定文件是应该作为二进制还是文本模式进行处理。
"t"
- 文本 - 默认值。文本模式。"b"
- 二进制 - 二进制模式(例如图像)。
语法
此外,您可以指定文件是应该作为二进制还是文本模式进行处理:
1 | f = open("demofile.txt") |
以上代码等同于:
1 | f = open("demofile.txt", "rt") |
因为 "r"
(读取)和 "t"
(文本)是默认值,所以不需要指定它们。
注释:请确保文件存在,否则您将收到错误消息。
Python 文件打开
在服务器上打开文件
假设我们有以下文件,位于与 Python 相同的文件夹中:
demofile.txt
1 | Hello! Welcome to demofile.txt |
如需打开文件,请使用内建的 open()
函数。
open()
函数返回文件对象,此对象有一个 read()
方法用于读取文件的内容:
实例
1 | f = open("demofile.txt", "r") |
只读取文件的一部分
默认情况下,read()
方法返回整个文本,但您也可以指定要返回的字符数:
实例
返回文件中的前五个字符:
1 | f = open("demofile.txt", "r") |
读行
您可以使用 readline()
方法返回一行:
实例
读取文件中的一行:
1 | f = open("demofile.txt", "r") |
通过两次调用 readline()
,您可以读取前两行:
实例
读取文件中的两行:
1 | f = open("demofile.txt", "r") |
通过循环遍历文件中的行,您可以逐行读取整个文件:
实例
逐行遍历文件:
1 | f = open("demofile.txt", "r") |
关闭文件
完成后始终关闭文件是一个好习惯。
实例
完成后关闭文件:
1 | f = open("demofile.txt", "r") |
注释:在某些情况下,由于缓冲,您应该始终关闭文件,在关闭文件之前,对文件所做的更改可能不会显示。
Python 文件写入
写入已有文件
如需写入已有的文件,必须向 open()
函数添加参数:
"a"
- 追加 - 会追加到文件的末尾"w"
- 写入 - 会覆盖任何已有的内容
实例
打开文件 “demofile2.txt” 并将内容追加到文件中:
1 | f = open("demofile2.txt", "a") |
实例
打开文件 “demofile3.txt” 并覆盖内容:
1 | f = open("demofile3.txt", "w") |
注释:“w” 方法会覆盖全部内容。
创建新文件
如需在 Python 中创建新文件,请使用 open()
方法,并使用以下参数之一:
"x"
- 创建 - 将创建一个文件,如果文件存在则返回错误"a"
- 追加 - 如果指定的文件不存在,将创建一个文件"w"
- 写入 - 如果指定的文件不存在,将创建一个文件
实例
创建名为 “myfile.txt” 的文件:
1 | f = open("myfile.txt", "x") |
结果:已创建新的空文件!
实例
如果不存在,则创建新文件:
1 | f = open("myfile.txt", "w") |
Python 删除文件
删除文件
如需删除文件,必须导入 OS 模块,并运行其 os.remove()
函数:
实例
删除文件 “demofile.txt”:
1 | import os |
检查文件是否存在
为避免出现错误,您可能需要在尝试删除文件之前检查该文件是否存在:
实例
检查文件是否存在,然后删除它:
1 | import os |
删除文件
如需删除整个文件夹,请使用 os.rmdir()
方法:
实例
删除文件夹 “myfolder”:
1 | import os |
提示:您只能删除空文件夹。
Python 内建函数
Python 有一组内建函数。
函数 | 描述 |
---|---|
abs() | 返回数的绝对值 |
all() | 如果可迭代对象中的所有项均为 true,则返回 True。 |
any() | 如果可迭代对象中的任何项为 true,则返回 True。 |
ascii() | 返回对象的可读版本。用转义字符替换 none-ascii 字符。 |
bin() | 返回数的二进制版本。 |
bool() | 返回指定对象的布尔值。 |
bytearray() | 返回字节数组。 |
bytes() | 返回字节对象。 |
callable() | 如果指定的对象是可调用的,则返回 True,否则返回 False。 |
chr() | 返回指定 Unicode 代码中的字符。 |
classmethod() | 把方法转换为类方法。 |
compile() | 把指定的源作为对象返回,准备执行。 |
complex() | 返回复数。 |
delattr() | 从指定的对象中删除指定的属性(属性或方法)。 |
dict() | 返回字典(数组)。 |
dir() | 返回指定对象的属性和方法的列表。 |
divmod() | 当参数1除以参数2时,返回商和余数。 |
enumerate() | 获取集合(例如元组)并将其作为枚举对象返回。 |
eval() | 评估并执行表达式。 |
exec() | 执行指定的代码(或对象)。 |
filter() | 使用过滤器函数排除可迭代对象中的项目。 |
float() | 返回浮点数。 |
format() | 格式化指定值。 |
frozenset() | 返回 frozenset 对象。 |
getattr() | 返回指定属性的值(属性或方法)。 |
globals() | 以字典返回当前全局符号表。 |
hasattr() | 如果指定的对象拥有指定的属性(属性/方法),则返回 True。 |
hash() | 返回指定对象的哈希值。 |
help() | 执行内建的帮助系统。 |
hex() | 把数字转换为十六进制值。 |
id() | 返回对象的 id。 |
input() | 允许用户输入。 |
int() | 返回整数。 |
isinstance() | 如果指定的对象是指定对象的实例,则返回 True。 |
issubclass() | 如果指定的类是指定对象的子类,则返回 True。 |
iter() | 返回迭代器对象。 |
len() | 返回对象的长度。 |
list() | 返回列表。 |
locals() | 返回当前本地符号表的更新字典。 |
map() | 返回指定的迭代器,其中指定的函数应用于每个项目。 |
max() | 返回可迭代对象中的最大项目。 |
memoryview() | 返回内存视图(memory view)对象。 |
min() | 返回可迭代对象中的最小项目。 |
next() | 返回可迭代对象中的下一项。 |
object() | 返回新对象。 |
oct() | 把数转换为八进制。 |
open() | 打开文件并返回文件对象。 |
ord() | 转换表示指定字符的 Unicode 的整数。 |
pow() | 返回 x 的 y 次幂的值。 |
print() | 打印标准输出设备。 |
property() | 获取、设置、删除属性。 |
range() | 返回数字序列,从 0 开始且以 1 为增量(默认地)。 |
repr() | 返回对象的可读版本。 |
reversed() | 返回反转的迭代器。 |
round() | 对数进行舍入。 |
set() | 返回新的集合对象。 |
setattr() | 设置对象的属性(属性/方法)。 |
slice() | 返回 slice 对象。 |
sorted() | 返回排序列表。 |
@staticmethod() | 把方法转换为静态方法。 |
str() | 返回字符串对象。 |
sum() | 对迭代器的项目进行求和。 |
super() | 返回表示父类的对象。 |
tuple() | 返回元组。 |
type() | 返回对象的类型。 |
vars() | 返回对象的 dict 属性。 |
zip() | 从两个或多个迭代器返回一个迭代器。 |
Python 字符串方法
Python 有一组可以在字符串上使用的内建方法。
注释:所有字符串方法都返回新值。它们不会更改原始字符串。
方法 | 描述 |
---|---|
capitalize() | 把首字符转换为大写。 |
casefold() | 把字符串转换为小写。 |
center() | 返回居中的字符串。 |
count() | 返回指定值在字符串中出现的次数。 |
encode() | 返回字符串的编码版本。 |
endswith() | 如果字符串以指定值结尾,则返回 true。 |
expandtabs() | 设置字符串的 tab 尺寸。 |
find() | 在字符串中搜索指定的值并返回它被找到的位置。 |
format() | 格式化字符串中的指定值。 |
format_map() | 格式化字符串中的指定值。 |
index() | 在字符串中搜索指定的值并返回它被找到的位置。 |
isalnum() | 如果字符串中的所有字符都是字母数字,则返回 True。 |
isalpha() | 如果字符串中的所有字符都在字母表中,则返回 True。 |
isdecimal() | 如果字符串中的所有字符都是小数,则返回 True。 |
isdigit() | 如果字符串中的所有字符都是数字,则返回 True。 |
isidentifier() | 如果字符串是标识符,则返回 True。 |
islower() | 如果字符串中的所有字符都是小写,则返回 True。 |
isnumeric() | 如果字符串中的所有字符都是数,则返回 True。 |
isprintable() | 如果字符串中的所有字符都是可打印的,则返回 True。 |
isspace() | 如果字符串中的所有字符都是空白字符,则返回 True。 |
istitle() | 如果字符串遵循标题规则,则返回 True。 |
isupper() | 如果字符串中的所有字符都是大写,则返回 True。 |
join() | 把可迭代对象的元素连接到字符串的末尾。 |
ljust() | 返回字符串的左对齐版本。 |
lower() | 把字符串转换为小写。 |
lstrip() | 返回字符串的左修剪版本。 |
maketrans() | 返回在转换中使用的转换表。 |
partition() | 返回元组,其中的字符串被分为三部分。 |
replace() | 返回字符串,其中指定的值被替换为指定的值。 |
rfind() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rindex() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rjust() | 返回字符串的右对齐版本。 |
rpartition() | 返回元组,其中字符串分为三部分。 |
rsplit() | 在指定的分隔符处拆分字符串,并返回列表。 |
rstrip() | 返回字符串的右边修剪版本。 |
split() | 在指定的分隔符处拆分字符串,并返回列表。 |
splitlines() | 在换行符处拆分字符串并返回列表。 |
startswith() | 如果以指定值开头的字符串,则返回 true。 |
strip() | 返回字符串的剪裁版本。 |
swapcase() | 切换大小写,小写成为大写,反之亦然。 |
title() | 把每个单词的首字符转换为大写。 |
translate() | 返回被转换的字符串。 |
upper() | 把字符串转换为大写。 |
zfill() | 在字符串的开头填充指定数量的 0 值。 |
注释:所有字符串方法都返回新值。它们不会更改原始字符串。
请在 Python 字符串教程 中学习更多有关字符串的知识。
Python 列表/数组方法
Python 有一组可以在列表/数组上使用的内置方法。
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
注释:Python 没有内置对数组的支持,但可以使用 Python 列表。
在 Python 列表教程 中学习有关列表的更多知识。
在 Python 数组教程 中学习有关数组的更多知识。
Python 字典方法
Python 有一组可以在字典上使用的内建方法。
方法 | 描述 |
---|---|
clear() | 删除字典中的所有元素 |
copy() | 返回字典的副本 |
fromkeys() | 返回拥有指定键和值的字典 |
get() | 返回指定键的值 |
items() | 返回包含每个键值对的元组的列表 |
keys() | 返回包含字典键的列表 |
pop() | 删除拥有指定键的元素 |
popitem() | 删除最后插入的键值对 |
setdefault() | 返回指定键的值。如果该键不存在,则插入具有指定值的键。 |
update() | 使用指定的键值对字典进行更新 |
values() | 返回字典中所有值的列表 |
在我们的 Python 字典教程 中学习更多有关字典的知识。
Python 元组方法
Python 有两个可以在元组上使用的内建方法。
方法 | 描述 |
---|---|
count() | 返回元组中指定值出现的次数。 |
index() | 在元组中搜索指定的值并返回它被找到的位置。 |
在我们的 Python 元组教程 中学习更多有关元组的知识。
Python 集合方法
Python 有一组可以在集合上使用的内建方法。
方法 | 描述 |
---|---|
add() | 向集合添加元素。 |
clear() | 删除集合中的所有元素。 |
copy() | 返回集合的副本。 |
difference() | 返回包含两个或更多集合之间差异的集合。 |
difference_update() | 删除此集合中也包含在另一个指定集合中的项目。 |
discard() | 删除指定项目。 |
intersection() | 返回为两个其他集合的交集的集合。 |
intersection_update() | 删除此集合中不存在于其他指定集合中的项目。 |
isdisjoint() | 返回两个集合是否有交集。 |
issubset() | 返回另一个集合是否包含此集合。 |
issuperset() | 返回此集合是否包含另一个集合。 |
pop() | 从集合中删除一个元素。 |
remove() | 删除指定元素。 |
symmetric_difference() | 返回具有两组集合的对称差集的集合。 |
symmetric_difference_update() | 插入此集合和另一个集合的对称差集。 |
union() | 返回包含集合并集的集合。 |
update() | 用此集合和其他集合的并集来更新集合。 |
在我们的 Python 集合教程 中学习更多有关集合的知识。
Python 文件方法
Python 有一组可用于文件对象的方法。
方法 | 描述 |
---|---|
close() | 关闭文件。 |
detach() | 从缓冲区返回分离的原始流(raw stream)。 |
fileno() | 从操作系统的角度返回表示流的数字。 |
flush() | 刷新内部缓冲区。 |
isatty() | 返回文件流是否是交互式的。 |
read() | 返回文件内容。 |
readable() | 返回是否能够读取文件流。 |
readline() | 返回文件中的一行。 |
readlines() | 返回文件中的行列表。 |
seek() | 更改文件位置。 |
seekable() | 返回文件是否允许我们更改文件位置。 |
tell() | 返回当前的文件位置。 |
truncate() | 把文件调整为指定的大小。 |
writeable() | 返回是否能够写入文件。 |
write() | 把指定的字符串写入文件。 |
writelines() | 把字符串列表写入文件。 |
请在我们的 Python 文件处理教程 学习更多有关文件对象的知识。
Python 关键字
Python 有一组关键字,这些关键字是保留字,不能用作变量名、函数名或任何其他标识符:
关键字 | 描述 |
---|---|
and | 逻辑运算符。 |
as | 创建别名。 |
assert | 用于调试。 |
break | 跳出循环。 |
class | 定义类。 |
continue | 继续循环的下一个迭代。 |
def | 定义函数。 |
del | 删除对象。 |
elif | 在条件语句中使用,等同于 else if。 |
else | 用于条件语句。 |
except | 处理异常,发生异常时如何执行。 |
False | 布尔值,比较运算的结果。 |
finally | 处理异常,无论是否存在异常,都将执行一段代码。 |
for | 创建 for 循环。 |
from | 导入模块的特定部分。 |
global | 声明全局变量。 |
if | 写一个条件语句。 |
import | 导入模块。 |
in | 检查列表、元组等集合中是否存在某个值。 |
is | 测试两个变量是否相等。 |
lambda | 创建匿名函数。 |
None | 表示 null 值。 |
nonlocal | 声明非局部变量。 |
not | 逻辑运算符。 |
or | 逻辑运算符。 |
pass | null 语句,一条什么都不做的语句。 |
raise | 产生异常。 |
return | 退出函数并返回值。 |
True | 布尔值,比较运算的结果。 |
try | 编写 try…except 语句。 |
while | 创建 while 循环。 |
with | 用于简化异常处理。 |
yield | 结束函数,返回生成器。 |