Skip to content

1.end]

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下:

python
#!/usr/bin/python3
 
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 1000:
    print(b, end=',')
    a, b = b, a+b

执行以上程序,输出结果为:

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

with

Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。

with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。

在处理文件对象时使用 with 关键字是一种很好的做法。

我们可以看下以下几种代码实例:

不使用 with,也不使用 try…except…finally

实例

file = open('./test_runoob.txt', 'w')
file.write('hello world !')
file.close()

以上代码如果在调用 write 的过程中,出现了异常,则 close 方法将无法被执行,因此资源就会一直被该程序占用而无法被释放。

接下来我们呢可以使用 try…except…finally 来改进代码:

实例

file = open('./test_runoob.txt', 'w')
try:
    file.write('hello world')
finally:
    file.close()

以上代码我们对可能发生异常的代码处进行 try 捕获,发生异常时执行 except 代码块,finally 代码块是无论什么情况都会执行,所以文件会被关闭,不会因为执行异常而占用资源。

使用 with 关键字:

实例

with open('./test_runoob.txt', 'w') as file:
    file.write('hello world !')

使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。

我们可以在执行 with 关键字后检验文件是否关闭:

实例

>>> with open('./test_runoob.txt') as f:
...     read_data = f.read()

>>> # 查看文件是否关闭
>>> f.closed
True

with 语句实现原理建立在上下文管理器之上。

上下文管理器是一个实现 enter 和 exit 方法的类。

使用 with 语句确保在嵌套块的末尾调用 exit 方法。

这个概念类似于 try...finally 块的使用。

实例

with open('./test_runoob.txt', 'w') as my_file:
    my_file.write('hello world!')

以上实例将 hello world! 写到 ./test_runoob.txt 文件上。

在文件对象中定义了 enterexit 方法,即文件对象也实现了上下文管理器,首先调用 enter 方法,然后执行 with 语句中的代码,最后调用 exit 方法。 即使出现错误,也会调用 exit 方法,也就是会关闭文件流。

实例

以下 Python 代码是一个简单的旅游计划管理工具,它从 5A.txt 文件中读取城市列表,并提供以下功能:

  1. 读取城市列表:从文件中读取以数字开头的城市名称,添加到旅游计划列表中。

  2. 删除城市:用户可以输入不想去的城市数量和序号,将对应的城市从计划中删除。

  3. 修改城市:用户可以选择修改某些城市的名称,更新旅游计划。

  4. 生成随机旅游计划:打乱城市顺序,并显示前五个城市作为最终的旅游推荐。

5A.txt 文件每行包含一个以数字开头的城市名称:

  1. 北京
  2. 上海
  3. 广州
  4. 深圳
  5. 成都
  6. 杭州
  7. 西安
  8. 重庆
  9. 南京
  10. 苏州

实例

from random import shuffle

try:
    with open('5A.txt', 'r') as fp:
        i = [line for line in fp if line[0].isdigit()]
except FileNotFoundError:
    print("文件 '5A.txt' 未找到,请检查文件路径。")
    exit()

travelList = []

添加旅游城市

for index, item in enumerate(i):
    temp_1 = item.strip()[2:]  # 使用 strip 去除行末的换行符
    temp_1 = f"{index}#{temp_1}"
    travelList.append(temp_1)

print("旅游计划城市:", travelList)

删除旅游城市

city_num = input('输入不想旅游城市的个数:')
try:
    for _ in range(int(city_num)):
        index = int(input('输入不想旅游城市的序号(第1个城市索引为0)'))
        if 0 <= index < len(travelList):
            travelList.pop(index)
            print("旅游计划城市:", travelList)
        else:
            print("输入的序号超出范围。")
except ValueError:
    print("请输入有效的整数。")

修改旅游城市

city_num = input('输入修改计划旅游的城市个数:')
try:
    for _ in range(int(city_num)):
        index = int(input('输入修改计划旅游的城市序号(第1个城市索引为0)'))
        if 0 <= index < len(travelList):
            city_name = input('输入修改计划旅游的城市名称:')
            travelList[index] = city_name
            print('旅游计划城市:', travelList)
        else:
            print("输入的序号超出范围。")
except ValueError:
    print("请输入有效的整数。")

shuffle(travelList)
print('请领取您的TOPS旅游计划:', travelList[:5])

执行以上代码,输出结果类似如下:

旅游计划城市: ['0# 北京', '1# 上海', '2# 广州', '3# 深圳', '4# 成都', '5# 杭州', '6# 西安', '7# 重庆', '8# 南京', '9#. 苏州'] 输入不想旅游城市的个数:0 输入修改计划旅游的城市个数:3 输入修改计划旅游的城市序号(第1个城市索引为0)4 输入修改计划旅游的城市名称:7 旅游计划城市: ['0# 北京', '1# 上海', '2# 广州', '3# 深圳', '7', '5# 杭州', '6# 西安', '7# 重庆', '8# 南京', '9#. 苏州']

assert

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。

语法格式如下:

assert expression

等价于:

if not expression: raise AssertionError

assert 后面也可以紧跟参数:

assert expression [, arguments]

等价于:

if not expression: raise AssertionError(arguments)

以下为 assert 使用实例:

>>> assert True     # 条件为 true 正常执行
>>> assert False    # 条件为 false 触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1==1    # 条件为 true 正常执行
>>> assert 1==2    # 条件为 false 触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

>>> assert 1==2, '1 不等于 2'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: 1 不等于 2
>>>

以下实例判断当前系统是否为 Linux,如果不满足条件则直接触发异常,不必执行接下来的代码:

实例

import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"

接下来要执行的代码

评论区

欢迎留言、补充或勘误。

xiaoba.blog