5. 流程控制和迭代器#
先定义一个变量
some_var = 5
这是个 if 语句,注意缩进在 Python 里是有意义的,缩进要使用 4 个空格而不是 tab。这段代码会打印 “some_var is smaller than 10”
if some_var > 10:
print("some_var is totally bigger than 10.")
elif some_var < 10:
# elif 语句是可选的
print("some_var is smaller than 10.")
else:
# else 也是可选的
print("some_var is indeed 10.")
用 for 循环语句遍历列表
"""
打印:
dog is a mammal
cat is a mammal
mouse is a mammal
"""
for animal in ["dog", "cat", "mouse"]:
# 你可以使用 format() 格式化字符串并插入值
print("{} is a mammal".format(animal))
“range(number)” 返回数字列表从 0 到 number 的数字
"""
打印:
0
1
2
3
"""
for i in range(4):
print(i)
“range(lower, upper)” 会返回一个包含从 lower 到 upper 的数字迭代器
"""
打印:
4
5
6
7
"""
for i in range(4, 8):
print(i)
“range(lower, upper, step)” 会返回一个 从 lower 到 upper,并且间隔值为 step 的迭代器,如果 step 未传入则会使用默认值 1。
"""
打印:
4
6
"""
for i in range(4, 8, 2):
print(i)
遍历列表,并且同时返回列表里的每一个元素的索引和数值。
"""
打印:
0 dog
1 cat
2 mouse
"""
animals = ["dog", "cat", "mouse"]
for i, value in enumerate(animals):
print(i, value)
while 循环直到条件不满足
"""
打印:
0
1
2
3
"""
x = 0
while x < 4:
print(x)
# x = x + 1 的简写
x += 1
用 try/except 块处理异常状况
try:
# 用 raise 抛出异常
raise IndexError("This is an index error")
except IndexError as e:
# pass 是无操作,但是应该在这里处理错误
pass
except (TypeError, NameError):
# 可以同时处理不同类的错误
pass
else:
# else 语句是可选的,必须在所有的 except 之后
# 只有当 try 运行完没有错误的时候这句才会运行
print("All good!")
finally:
# 在任何情况下都会执行
print("We can clean up resources here")
可以使用 with 语句来代替 try/finally 对操作进行结束的操作
with open("myfile.txt") as f:
for line in f:
print(line)
写入文件
contents = {"aa": 12, "bb": 21}
with open("myfile1.txt", "w+") as file:
# 写入字符串到文件
file.write(str(contents))
with open("myfile2.txt", "w+") as file:
# 写入对象到文件
file.write(json.dumps(contents))
从文件读取字符串
with open("myfile1.txt", "r+") as file:
# 从文件读取字符串
contents = file.read()
# => {"aa": 12, "bb": 21}
print(contents)
从文件读取 json 对象
with open("myfile2.txt", "r+") as file:
# 从文件读取 json 对象
contents = json.load(file)
# => {"aa": 12, "bb": 21}
print(contents)
Windows 环境调用 open() 读取文件的默认编码为 ANSI,如果需要读取 utf-8 编码的文件需要指定 encoding 参数:
open("myfile3.txt", "r+", encoding = "utf-8")
Python 提供一个叫做可迭代 (iterable) 的基本抽象。一个可迭代对象是可以被当作序列的对象,比如说上面 range 返回的对象就是可迭代的。
filled_dict = {"one": 1, "two": 2, "three": 3}
our_iterable = filled_dict.keys()
# 输出 dict_keys(['one', 'two', 'three']),是一个实现可迭代接口的对象
print(our_iterable)
可迭代对象可以进行遍历
for i in our_iterable:
# 打印 one, two, three
print(i)
但是不可以随机访问
# 抛出TypeError
our_iterable[1]
可迭代对象知道怎么生成迭代器
our_iterator = iter(our_iterable)
迭代器是一个可以记住遍历的位置的对象
# 用 "next()" 获得下一个对象
# => "one"
next(our_iterator)
再一次调取 “next()” 时会记得位置
# => "two"
next(our_iterator)
# => "three"
next(our_iterator)
当迭代器所有元素都取出后,会抛出 StopIteration
# 抛出 StopIteration
next(our_iterator)
还可以通过遍历访问所有的值,实际上 for 内部就实现了迭代器
our_iterator = iter(our_iterable)
for i in our_iterator:
# 依次打印 one, two, three
print(i)
可以用 list 一次取出迭代器或者可迭代对象所有的元素
# => 返回 ["one", "two", "three"]
list(filled_dict.keys())
# => 返回 [] 因为迭代的位置已经被保存了
list(our_iterator)