Skip to content

Python 3 教程(w3school)

Python 是一门流行的编程语言。它由 Guido van Rossum 创建,于 1991 年发布。

Python 简介

Python 可以做什么?

  • 可以在服务器上使用 Python 来创建 Web 应用程序。
  • Python 可以与软件一起使用来创建工作流。
  • Python 可以连接到数据库系统。它还可以读取和修改文件。
  • Python 可用于处理大数据并执行复杂的数学运算。
  • Python 可用于快速原型设计,也可用于生产就绪的软件开发。

为何选择 Python?

  • Python 适用于不同的平台(Windows、Mac、Linux、Raspberry Pi 等)。
  • Python 有一种类似于英语的简单语法
  • Python 的语法允许开发人员用比其他编程语言更少的代码行编写程序。
  • Python 在解释器系统上运行,这意味着代码可以在编写后立即执行。这也意味着原型设计可以非常快。
  • Python 可以以程序方式、面向对象的方式或功能方式来处理。

Python 对比其他语言

  • Python 被认为是一种高级语言,因为它的语法简单,开发人员可以用更少的代码行来完成任务。

  • Python 被认为是一种解释型语言,因为它的代码在运行时被解释器执行,而不是编译为机器代码。

  • Python 被认为是一种动态类型语言,因为开发人员不需要声明变量的类型。

  • Python 被认为是一种跨平台语言,因为它可以在不同的操作系统上运行,例如 Windows、Mac、Linux 等。

  • Python 是为可读性设计的,与英语有一些相似之处,并受到数学的影响。

  • Python 使用新行来完成命令,而不像通常使用分号或括号的其他编程语言。

  • Python 依赖缩进,使用空格来定义范围;例如循环、函数和类的范围。其他编程语言通常使用花括号来实现此目的。

变量

创建变量

  • 变量是存放数据值的容器。
  • 与其他编程语言不同,Python 没有声明变量的命令。
  • 首次为其赋值时,才会创建变量。 变量不需要使用任何特定类型声明,甚至可以在设置后更改其类型。
py
x = 5 # x is of type int
x = "Steve" # x is now of type str
print(x)

变量名称

变量可以使用短名称(如 x 和 y)或更具描述性的名称(age、carname、total_volume)。

Python 变量命名规则:

  • 变量名: 必须以字母或下划线字符开头
  • 变量名: 称不能以数字开头
  • 变量名: 只能包含字母数字字符和下划线(A-z、0-9 和 _)
  • 变量名: 称区分大小写(age、Age 和 AGE 是三个不同的变量)

    请记住,变量名称区分大小写

  1. 字符串变量可以使用单引号或双引号进行声明:
py
x = "Steve"
# is the same as
x = 'Steve'
  1. 向多个变量赋值
    • Python 允许您在一行中为多个变量赋值
    • 也可以在一行中为多个变量分配相同的值
py
x, y, z = "Steve", "Bill", "Gates"
print(x)
print(y)
print(z)
# 也可以在一行中为多个变量分配相同的值:
x = y = z = "Orange"
print(x)
print(y)
print(z)
  1. 全局变量 在函数外部创建的变量(如上述所有实例所示)称为全局变量。

全局变量可以被函数内部和外部的每个人使用。

注意:在函数内部创建的变量是局部变量,只能在该函数内部使用。 如果在函数内部创建具有相同名称的变量,则该变量将是局部变量,并且只能在函数内部使用。具有相同名称的全局变量将保留原样,并拥有原始值。

global 关键字

通常,在函数内部创建变量时,该变量是局部变量,只能在该函数内部使用。

要在函数内部创建全局变量,您可以使用 global 关键字。 实例 如果您用了 global 关键字,则该变量属于全局范围: 另外,如果要在函数内部更改全局变量,请使用 global 关键字。

py
x = "awesome"
def myfunc():
  global x
  x = "fantastic"

myfunc()

print("Python is " + x)

内置数据类型

变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。 Python 默认拥有以下内置数据类型:

类型描述
文本类型str
数值类型int, float, complex
序列类型list, tuple, range
映射类型dict
集合类型set, frozenset
布尔类型bool
二进制类型bytes, bytearray, memoryview
  1. 获取数据类型 您可以使用 type() 函数获取任何对象的数据类型:
py
x = 5
print(type(x))
  1. 数字 Python 中有三种数字类型:

    • int(有符号整数)

    • float(浮点数)

    • complex(复数)

      2.1 Int 有符号整数 Int 或整数是完整的数字,正数或负数,没有小数,长度不限。 2.2 Float 浮点数 浮动或“浮点数”是包含小数的正数或负数。 浮点数也可以是带有“e”的科学数字,表示 10 的幂。 2.3 complex 复数 复数用 "j" 作为虚部编写:

      2.4 类型转换 您可以使用 int()、float() 和 complex() 方法从一种类型转换为另一种类型: 有时您可能需要为变量指定类型。这可以通过 casting 来完成。 Python 是一门面向对象的语言,因此它使用类来定义数据类型,包括其原始类型。

    因此,使用构造函数完成在 python 中的转换:

    • int() - 用整数字面量、浮点字面量构造整数(通过对数进行下舍入),或者用表示完整数字的字符串字面量
    • float() - 用整数字面量、浮点字面量,或字符串字面量构造浮点数(提供表示浮点数或整数的字符串)
    • str() - 用各种数据类型构造字符串,包括字符串,整数字面量和浮点字面量
    py
    x = int(1)   # x 将是 1
    y = int(2.5) # y 将是 2
    z = int("3") # z 将是 3
    
    x = float(1)     # x 将是 1.0
    y = float(2.5)   # y 将是 2.5
    z = float("3")   # z 将是 3.0
    w = float("4.6")# w 将是 4.6
    
    x = str("S2") # x 将是 'S2'
    y = str(3)    # y 将是 '3'
    z = str(4.0)  # z 将是 '4.0'

    2.5 随机数 Python 没有 random() 函数来创建随机数,但 Python 有一个名为 random 的内置模块,可用于生成随机数:

    py
    import random
    print(random.randrange(1,10)) # 导入 random 模块,并显示 1 到 9 之间的随机数:

Python 字符串

字符串字面量 python 中的字符串字面量由 单引号双引号 括起。 'hello' 等同于 "hello"。

  1. 多行字符串 您可以使用三个引号将多行字符串赋值给变量: 1.1 字符串是数组 像许多其他流行的编程语言一样,Python 中的字符串是表示 unicode 字符的字节数组。 但是,Python 没有字符数据类型,单个字符就是长度为 1 的字符串。 方括号可用于访问字符串的元素。 1.2 裁切 您可以使用裁切语法返回一定范围的字符。 指定开始索引和结束索引,以冒号分隔,以返回字符串的一部分。 1.2.1 负的索引 使用负索引从字符串末尾开始切片: 1.2.2 裁切范围 裁切范围指定开始索引和结束索引,以冒号分隔,以返回字符串的一部分。 如果省略开始索引,则将从字符串的开头开始。 如果省略结束索引,则将切片到字符串的末尾。 1.2.3字符串长度 如需获取字符串的长度,请使用 len() 函数。

    py
     a = "Hello, World!"
     print(a[1])
     print(a[2:5])  # 获取从位置 2 到位置 5(不包括)的字符:
     print(b[-5:-2]) # 获取从位置 -5(包含)到位置 -2(不包含)的字符:
     print(len(a))   # 输出字符串的长度:

字符串方法

  • Python 有一组可在字符串上使用的内建方法。
  • strip() 方法删除开头和结尾的空白字符:
  • lower() 返回小写的字符串:
  • upper() 方法返回大写的字符串:
  • replace() 用另一段字符串来替换字符串:
  • split() 方法在找到分隔符的实例时将字符串拆分为子字符串:
  • in 或 not in: 如需检查字符串中是否存在特定短语或字符,我们可以使用 in 或 not in 关键字。
  • + 如需串联或组合两个字符串,您可以使用 + 运算符。
  • format() 方法接受传递的参数,格式化它们,并将它们放在占位符 {} 所在的字符串中:
py
age = 63
txt = "My name is Bill, and I am {}"
print(txt.format(age)) # 使用 format() 方法将数字插入字符串:

quantity = 3
itemno = 567
price = 49.95
myorder = "I want {} pieces of item {} for {} dollars."
print(myorder.format(quantity, itemno, price)) # format() 方法接受不限数量的参数,并放在各自的占位符中:

myorder = "I want to pay {2} dollars for {0} pieces of item {1}."
print(myorder.format(quantity, itemno, price)) # 您可以使用索引号 {0} 来确保参数被放在正确的占位符中:
# 要多次引用相同的值,请使用索引号:
age = 63
name = "Bill"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))
# 命名索引
myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Porsche", model = "911"))

内建方法

注意:所有字符串方法都返回新值。它们不会更改原始字符串。

方法描述
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。

  • bool(): 函数可让您评估任何值,并为您返回 True 或 False。
  • 大多数值都为 True
    • 如果有某种内容,则几乎所有值都将评估为 True。
    • 空字符串 外,任何字符串均为 True。
    • 0 外,任何数字均为 True。
    • 空列表外任何列表元组集合字典均为 True。
    • 实际上,除空值(例如 ()、[]、{}、""、数字 0 和值 None)外,没有多少值会被评估为 False。当然,值 False 的计算结果为 False。
  • isinstance() 函数,该函数可用于确定对象是否具有某种数据类型 (Python 还有很多返回布尔值的内置函数)
py
print(bool("Hello"))
print(bool(10))
x = "Hello"
y = 10

print(bool(x))
print(bool(y))

x = 200
print(isinstance(x, int))

运算符

运算符用于对变量和值执行操作。 Python 身份运算符 用于比较两个对象,看它们是否指向内存中的同一位置。

运算符描述实例
is如果两个变量是同一个对象,则返回 true。x is y
is not如果两个变量不是同一个对象,则返回 true。x is not y
in如果对象中存在具有指定值的序列,则返回 True。x in y
not in如果对象中不存在具有指定值的序列,则返回 True。x not in y

集合

集合(数组) Python 编程语言中有四种集合数据类型:

  • 列表(List)是一种有序和可更改的集合。允许重复的成员。
  • 元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。
  • 集合(Set)是一个无序和无索引的集合。没有重复的成员。
  • 词典(Dictionary)是一个无序,可变和有索引的集合。没有重复的成员。

列表

列表是一个有序且可更改的集合。在 Python 中,列表用方括号编写。

py
thislist = ["apple", "banana", "cherry"]
print(thislist[1])  # 您可以通过引用索引号来访问列表项
print(thislist[-1])  # 负索引从末尾开始,-1 表示最后一个项目 负索引表示从末尾开始,-1 表示最后一个项目,-2 表示倒数第二个项目,依此类推。
print(thislist[2:5])  # 指定范围后,返回值将是包含指定项目的新列表。
thislist[1] = "mango"
print(thislist)  # 更改第二项:

if "apple" in thislist: # 检查列表中是否存在 “apple”:
  print("Yes, 'apple' is in the fruits list")

print(len(thislist)) # 如需确定列表中有多少项,请使用 len() 方法:
thislist.append("orange") # 如需将项目添加到列表的末尾,请使用 append() 方法:

## 复制列表
thislist = ["apple", "banana", "cherry"]
mylist = thislist.copy()
print(mylist)
mylist = list(thislist) # 制作副本的另一种方法是使用内建的方法 list()。
print(mylist)

列表方法

Python 有一组可以在列表上使用的内建方法。

方法描述
append()在列表的末尾添加一个元素
clear()删除列表中的所有元素
copy()返回列表的副本
count()返回具有指定值的元素数量。
extend()将列表元素(或任何可迭代的元素)添加到当前列表的末尾
index()返回具有指定值的第一个元素的索引
insert()在指定位置添加元素
pop()删除指定位置的元素
remove()删除具有指定值的项目
reverse()颠倒列表的顺序
sort()对列表进行排序

元组(Tuple)

元组是一个有序且不可更改的集合。在 Python 中,元组用圆括号编写。

创建有一个项目的元组

如需创建仅包含一个项目的元组,您必须在该项目后添加一个逗号,否则 Python 无法将变量识别为元组。

py
thistuple = ("apple",)
print(type(thistuple))
#不是元组
thistuple = ("apple")
print(type(thistuple))

注释:

  • 您无法删除元组中的项目。
  • 元组一旦创建,您就无法向其添加项目。元组是不可改变的。

元组方法

Python 提供两个可以在元组上使用的内建方法。

方法描述
count()返回元组中指定值出现的次数。
index()在元组中搜索指定的值并返回它被找到的位置。

集合(Set)

集合是无序和无索引的集合。在 Python 中,集合用花括号编写。

注释: 集合是无序的,因此您无法确定项目的显示顺序。 集合一旦创建,您就无法更改项目,但是您可以添加新项目。

添加项目

  • add() 方法 要将一个项添加到集合
  • update() 方法 要向集合中添加多个项目
  • len() 方法 要确定集合中有多少项
  • remove() 或 discard() 要删除集合中的项目 注释:如果要删除的项目不存在,则 discard() 不会引发错误
  • pop() 方法 要删除集合中的最后一个项目(请记住,set 是无序的,因此您不会知道被删除的是什么项目。)
  • del 彻底删除集合: del thisset
  • union() 返回包含两个集合中所有项目的新集合,也可以使用 update() 方法将一个集合中的所有项目插入另一个集合中:

    注释:union() 和 update() 都将排除任何重复项。 还有其他方法将两个集合连接起来,并且仅保留重复项,或者永远不保留重复项,请查看此页面底部的集合方法完整列表。

py
thisset = {"apple", "banana", "cherry"}
thisset.add("orange")
thisset.update(["orange", "mango", "grapes"])
# 要确定集合中有多少项,请使用 len() 方法。
print(len(thisset))
thisset.remove("banana")
thisset.discard("banana") # 注释:如果要删除的项目不存在,则 discard() 不会引发错误。

# 合并两个集合
set1 = {"a", "b" , "c"}
set2 = {1, 2, 3}

set3 = set1.union(set2)
print(set3)

set1.update(set2)
print(set1)

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 中,字典用花括号编写,拥有键和值。

py
thisdict =	{
  "brand": "Porsche",
  "model": "911",
  "year": 1963
}
print(thisdict)
x = thisdict["model"]       # 方括号内引用其键名来访问字典的项目
x = thisdict.get("model")   # 还有一个名为 get() 的方法会给你相同的结果:
thisdict["year"] = 2019     # 引用其键名来更改特定项的值
thisdict["color"] = "red"   # 通过使用新的索引键并为其赋值,将项目添加到字典中
thisdict.pop("model")       # pop() 方法删除具有指定键名的项:
thisdict.clear()            # clear() 关键字清空字典
mydict = dict(thisdict)     # dict() 方法创建字典的副本
mydict = thisdict.copy()    # copy() 方法来复制字典

for x in thisdict.values(): # values() 函数返回字典的值
  print(x)

for x in thisdict.keys():
  print(x)

for x, y in thisdict.items():   #  items() 函数遍历键和值
  print(x, y)

字典方法

Python 提供一组可以在字典上使用的内建方法。

方法描述
clear()删除字典中的所有元素
copy()返回字典的副本
fromkeys()返回拥有指定键和值的字典
get()返回指定键的值
items()返回包含每个键值对的元组的列表
keys()返回包含字典键的列表
pop()删除拥有指定键的元素
popitem()删除最后插入的键值对
setdefault()返回指定键的值。如果该键不存在,则插入具有指定值的键。
update()使用指定的键值对字典进行更新
values()返回字典中所有值的列表

Python If ... Else

Python 支持来自数学的常用逻辑条件:

  • 等于:a == b
  • 不等于:a != b
  • 小于:a < b
  • 小于等于:a <= b
  • 大于:a > b
  • 大于等于:a >= b
py
a = 200
b = 66
if b > a:
  print("b is greater than a")
elif a == b:
  print("a and b are equal")
else:
  print("a is greater than b")

#### 简写 If
if a > b: print("a is greater than b")  # 如果只有一条语句要执行,则可以将其与 if 语句放在同一行。
print("A") if a > b else print("B")     # 如果只有两条语句要执行,一条用于 if,另一条用于 else,则可以将它们全部放在同一行:
print("A") if a > b else print("=") if a == b else print("B")   # 还可以在同一行上使用多个 else 语句:

Python While 循环

Python 有两个原始的循环命令:

  • while 循环
  • for 循环 while 循环 如果使用 while 循环,只要条件为真,我们就可以执行一组语句。
py
# 如果使用 break 语句,即使 while 条件为真,我们也可以停止循环:
# 如果使用 continue 语句,我们可以停止当前的迭代,并继续下一个:
# 通过使用 else 语句,当条件不再成立时,我们可以运行一次代码块:
i = 1
while i < 6:
  print(i)
  if i == 2:
    continue
  if i == 3:
    break
  i += 1
else:
  print("i is no longer less than 6")

Python For 循环

for 循环用于迭代序列(即列表,元组,字典,集合或字符串)。 这与其他编程语言中的 for 关键字不太相似,而是更像其他面向对象编程语言中的迭代器方法。 通过使用 for 循环,我们可以为列表、元组、集合中的每个项目等执行一组语句。

range() 函数

如需循环一组代码指定的次数,我们可以使用 range() 函数, range() 函数返回一个数字序列,默认情况下从 0 开始,并递增 1(默认地),并以指定的数字结束。

注意:range(10) 不是 0 到 10 的值,而是值 0 到 9。 range() 函数默认 0 为起始值,不过可以通过添加参数来指定起始值:range(3, 10),这意味着值为 3 到 10(但不包括 10): range() 函数默认将序列递增 1,但是可以通过添加第三个参数来指定增量值:range(2, 30, 3):

这将返回从 2 开始(包括 2),并递增 3(默认是 1),直到小于 30(不包括 30)的所有数字: or 循环中的 else 关键字指定循环结束时要执行的代码块:

py
for i in range(10):
  print(i)
else:
  print("Finally finished!")

Python 函数

函数是一种仅在调用时运行的代码块。 您可以将数据(称为参数)传递到函数中。 函数可以把数据作为结果返回。 在 Python 中,使用 def 关键字定义函数:

在 Python 文档中,“关键字参数”一词通常简称为 kwargs。

py
# 关键字参数
def my_function(child3, child2, child1):
  print("The youngest child is " + child3)

my_function(child1 = "Phoebe", child2 = "Jennifer", child3 = "Rory")    # 关键字参数

# 任意参数   # 如果参数数目未知,请在参数名称前添加 *:
def my_function(*kids):         # 如果参数数目未知,请在参数名称前添加 *:
  print("The youngest child is " + kids[2])

my_function("Phoebe", "Jennifer", "Rory")

Python Lambda

如果在短时间内需要匿名函数,请使用 lambda 函数。 lambda 函数是一种小的匿名函数。 lambda 函数可接受任意数量的参数,但只能有一个表达式。

py
x = lambda a, b, c : a + b + c
print(x(5, 6, 2))

Python 类和对象

  • Python 是一种面向对象的编程语言。
  • Python 中的几乎所有东西都是对象,拥有属性和方法。
  • 类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。

创建类

如需创建类,请使用 class 关键字:

__init__() 函数

所有类都有一个名为 init() 的函数,它始终在启动类时执行。 使用 init() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:

注释:每次使用类创建新对象时,都会自动调用 init() 函数。

对象方法

对象也可以包含方法。对象中的方法是属于该对象的函数。

提示:self 参数是对类的当前实例的引用,用于访问属于该类的变量。

self 参数

  • self 参数是对类的当前实例的引用,用于访问属于该类的变量。
  • 它不必被命名为 self,您可以随意调用它,但它必须是类中任意函数的首个参数:
py
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def myfunc(self):
        print("Hello my name is " + self.name)
    def myfunc(abc):
        print("Hello my name is " + abc.name)

p1 = Person("Bill", 63)
p1.myfunc()
print(p1.name)
print(p1.age)

Python 继承

继承允许我们定义继承另一个类的所有方法和属性的类。 父类是继承的类,也称为基类。 子类是从另一个类继承的类,也称为派生类。

当您添加 init() 函数时,子类将不再继承父的 init() 函数。 注释:子的 init() 函数会覆盖对父的 init() 函数的继承。 如需保持父的 init() 函数的继承,请添加对父的 init() 函数的调用:

使用 super() 函数

Python 还有一个 super() 函数,它会使子类从其父继承所有方法和属性: 通过使用 super() 函数,您不必使用父元素的名称,它将自动从其父元素继承方法和属性。

py
class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)
    super().__init__(fname, lname)

提示:如果您在子类中添加一个与父类中的函数同名的方法,则将覆盖父方法的继承。

Python 迭代器

  • 迭代器是一种对象,该对象包含值的可计数数字。
  • 迭代器是可迭代的对象,这意味着您可以遍历所有值。
  • 从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 iter() 和 next()。

迭代器 VS 可迭代对象(Iterable)

列表、元组、字典和集合都是可迭代的对象。它们是可迭代的容器,您可以从中获取迭代器(Iterator)。 所有这些对象都有用于获取迭代器的 iter() 方法:

py
# 从元组返回一个迭代器,并打印每个值:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))
# 提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。
mystr = "banana"

for x in mystr:
  print(x)

提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。

创建迭代器

要把对象/类创建为迭代器,必须为对象实现 iter() 和 next() 方法。

  • 正如您在 Python 类/对象 一章中学到的,所有类都有名为 init() 的函数,它允许您在创建对象时进行一些初始化。
  • iter() 方法的作用相似,您可以执行操作(初始化等),但必须始终返回 迭代器对象本身
  • next() 方法也允许您执行操作,并且必须返回序列中的下一个项目

创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等):

py
class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    x = self.a
    self.a += 1
    return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

StopIteration 如果你有足够的 next() 语句,或者在 for 循环中使用,则上面的例子将永远进行下去。

  • 为了防止迭代永远进行,我们可以使用 StopIteration 语句。
  • next() 方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误:

在 20 个迭代之后停止:

py
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)

Python 模块

模块是包含一组函数的文件,希望在应用程序中引用。

创建模块

如需创建模块,只需将所需代码保存在文件扩展名为 .py 的文件中:

py
import mymodule as mx # 您可以在导入模块时使用 as 关键字创建别名:

a = mx.person1["age"]
print(a)

Python 作用域

变量仅在创建区域内可用。这称为作用域。

  • 在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。
  • global 关键字使变量成为全局变量。

Python 日期

Python 中的日期不是其自身的数据类型,但是我们可以导入名为 datetime 的模块,把日期视作日期对象进行处理。

  • strftime() 方法 把日期对象格式化为可读字符串的方法

    导入 datetime 模块:

py
import datetime
x = datetime.datetime.now()
print(x)

x = datetime.datetime(2019, 10, 1)
print(x.strftime("%B"))

Python 数学

Python 拥有一组内置的数学函数,包括一个广泛的数学模块,允许你对数字执行数学任务。

  • min() 和 max() 函数可用于查找可迭代对象中的最低或最高值:
  • abs() 函数返回指定数字的绝对(正)值:
  • pow(x, y) 函数返回 x 的 y 次幂(xy)的值。
  • math.sqrt() 方法返回一个数字的平方根:
  • math.ceil() 方法将一个数字向上舍入到最近的整数,而
  • math.floor() 方法将一个数字向下舍入到最近的整数,并返回结果
  • math.pi 常量返回 PI 的值
py
import math
x = min(5, 10, 25)
y = max(5, 10, 25)
x = math.sqrt(64)
print(x)
print(y)

Python JSON

JSON 是用于存储和交换数据的语法。 JSON 是用 JavaScript 对象表示法(JavaScript object notation)编写的文本。

Python 有一个名为 json 的内置包,可用于处理 JSON 数据。

  • 若有 JSON 字符串,则可以使用 json.loads() 方法对其进行解析。 结果将是 Python 字典。
  • 若有 Python 对象,则可以使用 json.dumps() 方法将其转换为 JSON 字符串。 使用 separators 参数来更改默认分隔符:
py
import json

# 一些 JSON:
x =  '{ "name":"Bill", "age":63, "city":"Seatle"}'
# 解析 x:
y = json.loads(x)
# 结果是 Python 字典:
print(y["age"])

# Python 对象(字典):
x = {
  "name": "Bill",
  "age": 63,
  "city": "Seatle"
}
# 转换为 JSON:
y = json.dumps(x)
# 结果是 JSON 字符串:
print(y)
# 使用 indent 参数来定义缩进的数量:
json.dumps(x, indent=4, separators=(". ", " = "))

Python Try Except

  • try 块允许您测试代码块以查找错误。
  • except 块允许您处理错误。
  • finally 块允许您执行代码,无论 try 和 except 块的结果如何。

Python 模块

Python 参考手册

  • NumPy 模块 "Numerical Python",是一个用于处理数组的 库。
  • Matplotlib 模块 "Matplotlib",是一个用于绘制图表的库。
  • Pandas 模块 "Pandas",是一个用于数据分析的库。
  • SciPy,Scientific Python 是一个科学计算库,底层使用了 NumPy。

Scikit-learn 模块 "Scikit-learn",是一个用于机器学习的库。TensorFlow 模块 "TensorFlow",是一个用于机器学习的库。Keras 模块 "Keras",是一个用于深度学习的库。