目录

  • 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相关推荐

  1. 分享一个python cookbook的在线教程地址

    分享一个python cookbook的在线教程地址: http://python3-cookbook.readthedocs.org/zh_CN/latest/ 翻译者:熊能 转载于:https:/ ...

  2. 《Python Cookbook》 最佳译本开放下载啦!

     摘要 看过<流畅的Python>的小伙伴应该知道作者Luciano Ramalho会推荐给读者另一部与Python相关的大作. David Beazley的<Python Cook ...

  3. 计算机编程书籍-Python Cookbook

    Python Cookbook [美] 大卫·比斯利(David Beazley),布莱恩·K.琼斯(Brian K.Jones) 著,陈舸 译 ISBN:9787115379597 包装:平装 开本 ...

  4. python cookbook 豆瓣_备受好评的20本python图书,不用到处找了!

    闲来无事,用豆瓣API爬取了豆瓣上的Python图书,筛选了评分人数>80的书,按照评分高低排序,删除了些中英文版本重复的书,整理出了下面这张最受好评的20本Python图书榜单. No.1 F ...

  5. python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf

    作 者 :(美)比斯利,(美)琼斯著 出版发行 : 北京:人民邮电出版社 , 2015.05 ISBN号 :978-7-115-37959-7 页 数 : 684 原书定价 : 108.00 开本 : ...

  6. python cookbook 中文版 第 3 版-《Python Cookbook》第三版中文版

    人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来.虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持. 目 ...

  7. 《Python Cookbook(第3版)中文版》——1.9 在两个字典中寻找相同点

    本节书摘来自异步社区<Python Cookbook(第3版)中文版>一书中的第1章,第1.9节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节内 ...

  8. 将python3.7降为3.5_python3.7降至3.5【python cookbook】python访问子字符串

    访问子字符串最简单的的方式是使用切片 afiled=theline[3:8]但一次只能取一个子字符串 如果还要考虑字段的长度struct.unpack可能更合适 importstruct #得到一个5 ...

  9. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

最新文章

  1. c语言贪吃蛇编写分析,刚学C语言,想写一个贪吃蛇的代码
  2. Python基础高级用法,必须要掌握的知识点
  3. vue 使用了浏览器的刷新之后报错_Laravel 7 + vue.js 学习笔记(一)
  4. 网站提速-页面静态化(2)
  5. 计算机不同用户信息互通吗,迷你世界电脑版和手机版通用吗 二者账号数据互通吗...
  6. 版权归原作者的飞鸽传书(IPMSG)
  7. 安卓下拉框获取序号_中文编程:安卓的右上角菜单
  8. github代码_GitHub代码空间如何提高生产力和降低障碍
  9. Android MemInfo 各项的意义(转)
  10. vista iis7上安装php4.4.7
  11. SpringMVC【一 简单入门例子】
  12. Protues 8.8 SP1 无需破解 可用直装版 指路
  13. vba数组如何精确筛选_Filter函数和ReDim语句讲解,以及VBA中利用动态数组排重的方法一...
  14. Python关于pandas中 ValueError: Writing 0 cols but got ”XXX“ aliases的错误
  15. HDU 1867 A + B for you again(KMP)
  16. 电视机顶盒CM311-1A-YST基于openwrt搭建pptpipsec服务器
  17. java 按钮添加音乐_如何使得java swing里加入的背景音乐 可用按钮控制播放与停止...
  18. R 18切割替换练习
  19. transformation-matrix
  20. PostgreSQL实战之体系结构

热门文章

  1. ORA-01810格式代码出现两次 的解决方案
  2. 如何从源码启动和编译IoTSharp
  3. 使用本地计划任务定时关闭azure虚拟机
  4. win7+vs2008+windows mobile6.5.3
  5. linux查看进程和终止进程
  6. 【06年博文搬家】一个修改时间的批处理程序
  7. 【Java从0到架构师】SpringMVC - 返回值
  8. 【jQuery笔记Part1】06-jQuery对象与js对象转换
  9. 通过德雷福斯模型探寻成长之路
  10. Linux expect脚本使用详细说明及示例