Python Cookbook by Eric
目录
- 1 Variable
- Python中的mutable变量
- 2 Operator
- 2.1 `:=`:海象运算符
- 3 Function
- 3.1 函数的默认参数如果是mutable,则相当于是共享的静态对象
- 3.2 如何用列表或字典向函数传递参数
- 4 String (immutable)
- 3.1 使用`f""`字符串进行信息显示
- 5 List
- 5.1 条件筛选列表
- 6 Dictionary
- 5.1 同时遍历key和value
- 7 列表推导式
- 8 代码简化
- 使用comprehension一行代码实现list元素简单映射
- `map`也可以一行实现元素映射,不过没有comprehension快
- comprehension中最后一个list会使用全局变量
- 9 Class
- 9.1 私有属性:以`__`开头
- 7.2 数据类:dataclass
- 7.3 定义只读属性:`@property`
- 可以使用`@property`声明只读属性
- 使用@property_name.setter实现属性赋值的检查
- 使用`@property`实时计算属性值
- 8 Pip安装package
- 8.1 pip+国内镜像安装package
- 8.1.1 使用清华源也可以
- 9 终端显示
- 打印信息同时显示代码行号——“带有行号的print”
- 显示表格:`rich.table`
- 10 代码调试
- 简化错误信息:`import pretty_errors`
- 输出表达式的值:`f{x=}`
- 获取函数被调用位置文件名 & 被调用代码行
- 11 统计运行时间
- 12 文件读写
- 13 时间信息处理
1 Variable
Python中的mutable变量
Mutable变量类型: str
, tuple
和numbers。
美元方式用_
定义整数
Python中可以使用美元金额的表示方法,使用_
代替 , 标记整数的千分位,
例如:x = 1_000_000
判断变量类型
# 判断变量是否是字符串
isinstance(a,str)
编写模式常量
使用枚举类来定义模式常量,关于枚举类的使用,请参考《Python 标准库 » 数据类型 » enum — 对枚举的支持》;
2 Operator
2.1 :=
:海象运算符
:=
可以用在赋值表达式中,使其在完成赋值的同时,也使表达式本身会返回当前运算的赋值结果,(Python文档的英文描述如下),
[Docs.Python | 6.12. Assignment expressions]: An assignment expression (sometimes also called a “named expression” or “walrus”) assigns an expression to an identifier, while also returning the value of the expression.
示例代码:
# Handle a matched regex
if (match := pattern.search(data)) is not None:# Do something with match
3 Function
3.1 函数的默认参数如果是mutable,则相当于是共享的静态对象
所以如果不希望使用静态对象的话,则需要考虑其它的定义方式,请参考《【Python】 25个需要你改掉的新手习惯 | Python 基础教程 |第六点》;
3.2 如何用列表或字典向函数传递参数
这里用一个简单的函数func来表示用列表或字典传递参数的过程,首先定义func:
def func(a,b,c):print(a,b,c)
然后是列表传递参数,
args = [1,2,3]
func(*args)
字典传递参数,
kwargs = {'a':1,'b':2,'c':3}
func(**kwargs)
4 String (immutable)
3.1 使用f""
字符串进行信息显示
可以使用使用f""
字符串来显示变量信息;
5 List
快速获得列表的副本:a[:]
(这种方法比.copy()
要方便一些)
列表批量复制:lst*10
5.1 条件筛选列表
可以使用filterfalse
来条件筛选列表,这样可读性也很高:
a = [1, 2, 2, 3, 4]def even(x):return x % 2 == 0from itertools import filterfalsea[:] = filterfalse(even, a)# --> a = [1, 3]
6 Dictionary
5.1 同时遍历key和value
使用d.items()
获得字典的key和value:
for key,val in d.items():...
7 列表推导式
8 代码简化
使用comprehension一行代码实现list元素简单映射
我们可以使用推导式在一行代码中完成list元素的简单映射,例如:
r =(x**2 for x in [1,2,3,4,5,6,7,8,9])
list(r)
map
也可以一行实现元素映射,不过没有comprehension快
map
也可以在一行代码中实现对列表中的元素进行简单的映射,
例如:
不过其运算速度没有comprehension快,测试结果截图如下:
comprehension中最后一个list会使用全局变量
我们可以看看下面的例子:
这里推导式的最后一个list变量lst
,在调用的时候使用的是全局变量list
(可能内部是以字典的形式调用的),而前面所有的mutable对象则是evaluated immediately
,即赋值当前了lst的引用;
[Note]:关于以上内容请参考《PEP 289 – Generator Expressions | “outermost for-expression is evaluated immediately”》;
而在调用时,由于lst = [1,2]
将lst替换成了新的列表[1,2]
,所以之前的引用则成为匿名变量lst_0
,但是其内容仍然存在(即之前的[1,2,3]
);
9 Class
9.1 私有属性:以__
开头
Python定义私有属性有一个默认的规则
“Private” instance variables that cannot be accessed except from inside an object don’t exist in Python. However, there is a convention that is followed by most Python code: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). …
… Any identifier of the form __spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is the current class name with leading underscore(s) stripped…
(关于“python中私有属性定义的分析”可以参考《[Python]Python中的私有变量》)
也就是说,python中对于私有成员的默认规则是:使用双下划线(eg. __member
)定义的成员变量。
7.2 数据类:dataclass
dataclass是python提供的一种装饰器,可以快速编写一个数据类;
from dataclasses import dataclass
@dataclass()
class Comment:id: inttext: str
7.3 定义只读属性:@property
使用装饰器@property
+私有变量可以定义只读属性;
class Comment:def __init__(self, id: int, text: str):self.__id: int = idself.__text: str@propertydef id(self):return self.__id@propertydef text(self):return self.__text
使用@property
修饰的函数具有以下性质:
- 只能有一个参数
self
; - 不能与其它成员属性同名;
- 此函数在调用时不需要加
()
。
可以使用@property
声明只读属性
我们可以使用__
将属性私有化,然后通过@property
声明该属性的函数接口,实现该成员属性的read-only特性;
使用@property_name.setter实现属性赋值的检查
对于某些属性,由于对参数值有着一定要求,比如:batch-size就需要是正整数;
这时我们可以使用**@property_name.setter**在对属性赋值时先对参数值进行合法性检查,例如:
class A():def __init__(self):self.__value = 1@propertydef value(self):return self.__value@value.setterdef value(self, x):if x < 0:raise ValueError("value must > 0")self.__value = xa = A()
a.value = -1
使用@property
实时计算属性值
我们可以使用@property
声明属性函数,然后在此property函数中实时计算属性的值,减少代码的逻辑冗余;
这里可以看看知乎回答《@property装饰器、功能和应用场景》;答主在回答中使用的“电压、电阻和电流”的原理,这里摘录如下:
[答主“深度学习可好玩了”]:解释一下第三种情况,比如我们已知电阻阻值和电压,要求电流,最好的方式就是实现@property装饰的函数,可以像属性一样访问电流,并且是实时计算的。
8 Pip安装package
pip安装代码template:
python -m pip install package -i https://pypi.doubanio.com/simple/
用“python -m pip”替换“pip”命令,确保将package安装到当前运行的python环境中去;
8.1 pip+国内镜像安装package
使用“-i”实现从指定的镜像网址下载安装函数库,例如:
pip install package_name -i https://pypi.doubanio.com/simple/
这里的例子用的是豆瓣的镜像,这里对豆瓣表示感谢,希望豆瓣越来越好!
这里以安装open-contrib
函数库为例,其安装代码如下,
pip install opencv-contrib-python -i https://pypi.doubanio.com/simple/
8.1.1 使用清华源也可以
示例代码如下:
pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple
9 终端显示
推荐使用rich
库进行终端信息的显示;
打印信息同时显示代码行号——“带有行号的print”
可以使用console.log
打印信息并在右侧显示信号所在代码位置(行号);
显示表格:rich.table
我们可以使用rich.table
形成表格内容并显示输出;
关于rich.table
的使用请参考《Beautiful Terminal Styling in Python With Rich | Table》;
10 代码调试
简化错误信息:import pretty_errors
可以使用pretty_errors
库来简化错误信息;
输出表达式的值:f{x=}
使用f{x=}
输出值的效果如下:
获取函数被调用位置文件名 & 被调用代码行
# 获取被调用位置所在文件名
sys._getframe().f_back.f_code.co_filename# 被调用位置信息
sys._getframe().f_back.f_code.co_filename + ": " + str(sys._getframe().f_back.f_lineno)
11 统计运行时间
使用time.perf_counter()
:
start = time.perf_counter()
time.sleep(1)
end = time.perf_counter()
print(end-start)
12 文件读写
请参考《Python中文件操作和文件夹操作的学习笔记》;
13 时间信息处理
使用pendulum
来进行处理时间信息,可以使用conda install pendulum
来进行安装;
获取当前时间
now = pendulum.now()
新建local时间
dt = pendulum.local(2021, 12, 6)
Python Cookbook by Eric相关推荐
- 分享一个python cookbook的在线教程地址
分享一个python cookbook的在线教程地址: http://python3-cookbook.readthedocs.org/zh_CN/latest/ 翻译者:熊能 转载于:https:/ ...
- 《Python Cookbook》 最佳译本开放下载啦!
摘要 看过<流畅的Python>的小伙伴应该知道作者Luciano Ramalho会推荐给读者另一部与Python相关的大作. David Beazley的<Python Cook ...
- 计算机编程书籍-Python Cookbook
Python Cookbook [美] 大卫·比斯利(David Beazley),布莱恩·K.琼斯(Brian K.Jones) 著,陈舸 译 ISBN:9787115379597 包装:平装 开本 ...
- python cookbook 豆瓣_备受好评的20本python图书,不用到处找了!
闲来无事,用豆瓣API爬取了豆瓣上的Python图书,筛选了评分人数>80的书,按照评分高低排序,删除了些中英文版本重复的书,整理出了下面这张最受好评的20本Python图书榜单. No.1 F ...
- python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf
作 者 :(美)比斯利,(美)琼斯著 出版发行 : 北京:人民邮电出版社 , 2015.05 ISBN号 :978-7-115-37959-7 页 数 : 684 原书定价 : 108.00 开本 : ...
- python cookbook 中文版 第 3 版-《Python Cookbook》第三版中文版
人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来.虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持. 目 ...
- 《Python Cookbook(第3版)中文版》——1.9 在两个字典中寻找相同点
本节书摘来自异步社区<Python Cookbook(第3版)中文版>一书中的第1章,第1.9节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节内 ...
- 将python3.7降为3.5_python3.7降至3.5【python cookbook】python访问子字符串
访问子字符串最简单的的方式是使用切片 afiled=theline[3:8]但一次只能取一个子字符串 如果还要考虑字段的长度struct.unpack可能更合适 importstruct #得到一个5 ...
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
最新文章
- c语言贪吃蛇编写分析,刚学C语言,想写一个贪吃蛇的代码
- Python基础高级用法,必须要掌握的知识点
- vue 使用了浏览器的刷新之后报错_Laravel 7 + vue.js 学习笔记(一)
- 网站提速-页面静态化(2)
- 计算机不同用户信息互通吗,迷你世界电脑版和手机版通用吗 二者账号数据互通吗...
- 版权归原作者的飞鸽传书(IPMSG)
- 安卓下拉框获取序号_中文编程:安卓的右上角菜单
- github代码_GitHub代码空间如何提高生产力和降低障碍
- Android MemInfo 各项的意义(转)
- vista iis7上安装php4.4.7
- SpringMVC【一 简单入门例子】
- Protues 8.8 SP1 无需破解 可用直装版 指路
- vba数组如何精确筛选_Filter函数和ReDim语句讲解,以及VBA中利用动态数组排重的方法一...
- Python关于pandas中 ValueError: Writing 0 cols but got ”XXX“ aliases的错误
- HDU 1867 A + B for you again(KMP)
- 电视机顶盒CM311-1A-YST基于openwrt搭建pptpipsec服务器
- java 按钮添加音乐_如何使得java swing里加入的背景音乐 可用按钮控制播放与停止...
- R 18切割替换练习
- transformation-matrix
- PostgreSQL实战之体系结构