Python高手之路 ------读书有感
最近忙中偷闲把前些年买的《Python高手之路》翻了出来,大致看完了一遍,其中很多内容并不理解,究其原因应该是实践中的经验不足,而这对于现如今的我仍是难以克服的事情,对此也就只能说是看会了多少算多少了,但是在自己理解的那一部分之中本人还是发现了很多以前没有见过的东西,对此本博主将其记录下来,以为自己日后翻阅同时也共享给网上的众多网友。
1. collections.defaultdict
collections 为Python中的一个高级模块,其中collections模块中有一个 默认字典( collections.defaultdict ) 的类型,调用该类时对其初始化一个类对象,该类对象所生成的对象必为可调用,如:list,set等,若不赋值则默认为None。
可以看到对 defaultdict 所生成的对象进行赋值时 返回的自动为 生成该对象时 赋予的类对象所生成的 对象。
有此可见对该类型的调用可以自动将调用的赋值作为key, 其返回的就是默认生成对象,对于该对象我们可以对其进行操作。
2. memoryview
import copy x=str(range(10000000)) @profile
def fun():
w=x[1:-1] view=memoryview(x) limited=view[1:-1] if __name__=="__main__":
fun()
由此,可见 memoryview 和C语言中的指针颇有相似, 该操作对 字符串 和 字节类型的 变量进行切片 不增加其它 内存 开销。
根据 memoryview 改变原对象中 变量的值:
3. memory_profiler
memory_profiler 是Python中的一个内存耗费显示模块, 该模块不属于标准库, 因此需要额外安装。
该模块使用是对要检测的模块中函数加入 @profile 装饰器, 即可实现对该函数调用时内存耗费情况的检测。
4. 装饰器 functools.wraps
def is_admin(f):
def wrapper(*args, **kwargs):
if kwargs.get("username")!='admin':
raise Exception("This user is not allowed to get food!")
return f(*args, **kwargs)
return wrapper def foobar(username="someone"):
"""Do crazy stuff."""
pass print foobar.func_doc
print foobar.__name__
修改如下:
def is_admin(f):
def wrapper(*args, **kwargs):
if kwargs.get("username")!='admin':
raise Exception("This user is not allowed to get food!")
return f(*args, **kwargs)
return wrapper @is_admin
def foobar(username="someone"):
"""Do crazy stuff."""
pass print foobar.func_doc
print foobar.__name__
由上可知, 使用装饰器对函数进行包装后 函数原有的一下特性及信息丢失。
import functools def is_admin(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
if kwargs.get("username")!='admin':
raise Exception("This user is not allowed to get food!")
return f(*args, **kwargs)
return wrapper @is_admin
def foobar(username="someone"):
"""Do crazy stuff."""
pass print foobar.func_doc
print foobar.__name__
使用 functools.wraps 装饰器 对 包装函数 中的返回函数进行修饰, 将原函数的信息复制给该函数。
写于 大连理工大学 软件学院
Python高手之路 ------读书有感的更多相关文章
- 《Python高手之路 第3版》这不是一本常规意义上Python的入门书!!
<Python高手之路 第3版>|免费下载地址 作者简介 · · · · · · Julien Danjou 具有12年从业经验的自由软件黑客.拥有多个开源社区的不同身份:Debian开 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【二】python基本数据类型
一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- Python高手之路【八】python基础之requests模块
1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 ...
- Python高手之路【十三】socket网络编程
什么是客户/服务器架构? 什么是客户/服务器架构?不同的人有不同的答案.这要看你问的是什么人,以及指的是软件系统还是硬件系统了.但是,有一点是共通的:服务器是一个软件或硬件,用于提供客户需要的&quo ...
- Python高手之路【十一】python基础之面向对象
创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数, ...
随机推荐
- Java Selenium 笔记
目录一.基本语句 1.循环控制(break,continue) 3.字符的替换(replace,repalceFirst,replaceAll,regex) 4.字符串的连接("+" ...
- Java中泛型使用
Java中泛型使用 泛型作用: 泛型:集合类添加对象不用强转 反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码: ArrayList<Ls> ff=new ArrayList ...
- [Java学习] Java类的基本运行顺序
我们以下面的类来说明一个基本的 Java 类的运行顺序: 1. public class Demo{ 2. private String name; 3. private int age; 4. 5. ...
- Rspec: everyday-rspec实操。5:controller test(了解基础)
第 5 章 控制器测试 5.1基础 rails generate rspec:controller home RSpec.describe HomeController, type: :control ...
- bzoj2595: [Wc2008]游览计划 斯坦纳树
斯坦纳树是在一个图中选取某些特定点使其联通(可以选取额外的点),要求花费最小,最小生成树是斯坦纳树的一种特殊情况 我们用dp[i][j]来表示以i为根,和j状态是否和i联通,那么有 转移方程: dp[ ...
- nyoj-489-dinic/建图
哭泣天使 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石 ...
- 关于Floyd求解最小环的问题
最近学习了floyd的奇妙用处,求解最小环,自己的领悟写在了纸上. 对于一个最小环,显然至少要包含三个点(此处不把两个点的回路称之为环) 从大体上考虑的话,一定有一个点与左右两侧的点是直接连接的(即不 ...
- C# 中的时间(DataTime)
在做报表或查询的时候,常常会预设一些可选的日期范围,如本周.本月.本年等,利用 C# 内置的DateTime基本上都可以实现这些功能. 当前时间: DateTime dt = DateTime.Now ...
- Linux文件与目录管理(一)
一.Linux文件与目录管理 1.Linux的目录结构是树状结构,最顶级的目录是根目录/(用"/"表示) 2.Linux目录结构图: /bin:bin是Binary的缩写,这个目录 ...
- 在linux中,如何增加、修改、删除、暂停和冻结用户名
在Linux中,如何增加.修改.删除.暂停和冻结用户名 在操作增加.修改和删除用户名前,先认识linux中两个最重要的文件,它们就是账号管理最重要文件“/etc/passwd”与“etc/shadow ...