IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 那些值得称赞的 python 小亮点,断言,with 语句,格式化字符串,听我道来 -> 正文阅读

[Python知识库]那些值得称赞的 python 小亮点,断言,with 语句,格式化字符串,听我道来

断言

python 断言具备调试与检验的功能,它用于判断某些条件,当断言条件为 True 时,程序正常运行;当断言条件为 False 时,引发 AssertionError 异常。

例如在游戏里面设置一个未满 18 岁禁止访问的功能。

def overage18(age):
    assert age >= 18, "对不起未满18岁,无法进行游戏"
    print("享受欢乐游戏时光")

if __name__ == '__main__':
    overage18(15)

但是这个案例并不是一个完美的案例,因为断言是为了告知 开发人员 ,你写的程序发生异常了。如果一个潜在错误在程序编写前就能考虑到,例如程序运行时网络中断,这个场景就不需要使用断言。

断言主要为调试辅助而生,为的是程序自检,并不是为了处理错误,程序 BUG 还是要依赖 try… except 解决。

由于断言是给 开发人员看的,所以下述案例的断言是有效的。

def something():
	"""该函数执行了很多操作"""
	my_list = [] # 声明了一个空列表
	# do something
	return my_list

def func():
	"""调用 something 函数,基于结果实现某些逻辑"""
	ret = something()
	assert len(ret) == 18, "列表元素数量不对"
	# 完成某些操作

使用断言要注意: 不要用断言验证用户的输入,这是因为 python 通过命令行运行时,如果增加 -O 标识,断言就被全局禁止了,你的所有验证就都丢失了。

with 语句与上下文管理器

with 语句是一个非常有用的 python 特性,它可以大幅的减少代码行数,除此之外还能有效的避免程序 BUG。

不使用 with 语句操作一个文件的代码如下:

f = open('./橡皮擦.txt','w',encoding="utf-8")
try:
    f.write("梦想橡皮擦")
except Exception as e:
    pass
finally:
    f.close()

使用了 with 语句之后,代码修改为:

with open('./橡皮擦.txt','w',encoding="utf-8") as f:
    f.write("梦想橡皮擦")

与之对比的还有 threading 模块中的 Lock 对象。

lock = threading.Lock()
with lock:
	# do something

自己实现上下文管理器
with 语句可作用于,任意一个具备 上下文管理器 的类或者函数,所生成的对象,只需要在类的内部实现 __enter____exit__ 函数即可。

例如手动写一个属于自己的文件操作类。

class MyFileOP(object):
    def __init__(self, name, mode):
        self._name = name
        self._mode = mode

    def __enter__(self):
        self._file = open(self._name, self._mode, encoding="utf-8")
        return self._file

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self._file:
            self._file.close()


if __name__ == '__main__':
    with MyFileOP("./橡皮擦.txt", 'r') as f:
        print(f.read()

当程序执行到 with 语句上下文时,首先调用的是 __enter__ 函数,完成资源初始化 ,当 with 语句执行完毕时,调用 __exit__ ,完成资源释放。

编写一个测试代码运行时间的上下文管理器
主要通过封装 time 模块下相关方法实现,代码进入 with 语句时,调用 __enter__ 获取资源,离开时,调用 __exit__ 释放资源。

import time


class RunTime(object):

    def __enter__(self):
        self._start_time = time.perf_counter()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._duration = time.perf_counter() - self._start_time
        print("代码运行时间", self._duration)


if __name__ == '__main__':
    with RunTime():
        for i in range(100000):
            print("橡皮擦",end="")
        print("")

4 种格式化字符串浅析

通过 % 格式化字符串
在学习 python 时,很多地方都会提及 % 格式化字符串,这是由于 python 继承了 C 语言的部分写法,因此出现该种操作。

print("hello %s" % "world")

该写法随着时间的发展,可以慢慢被遗忘掉了。

通过 字符串.format 方法格式化字符串
format 方法在 python3 引入,该方法较于之前的 % 写法,多了一种位置格式化操作。

print("hello {}".format("world"))

通过 f-strings (格式化字符串字面值)
从 python3.6 开始,又增加了一种格式化字符串的方法,通过在字符串前面添加特殊标识 f ,实现在字符中嵌入任意表达式。

name = "橡皮擦"
print(f"{name} hello world {1 + 1}")

通过 模板字符串实现格式化
该用法不太常用,导入 string 模块的 Template 类进行实现。

from string import Template

t = Template("hello $str")  # 声明一个字符串模板
my_str = t.substitute(str="world") # 模板替换
print(my_str)

如何选择字符串格式化的方法,遵循一个原则即可,安全用 Template,其余用新的

写在后面

以上内容就是本文的全部内容,希望对学习路上的你有所帮助~

今天是持续写作的第 234 / 365 天。
期待 关注点赞评论收藏

更多精彩

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:24:31  更:2021-10-13 11:24:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:31:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码