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基础之面向对象
创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数, ...
随机推荐
- python 字节与字符串转化
name = 'laogaoyang' # 采用系统默认编码格式 nameBytes = name.encode('utf-8') # 先将 name 解码(采用系统默认格式),然后用 'utf-8' ...
- shell 布尔运算
布尔运算 Bash 里的逻辑运算,与.或.非. 在 Shell 下如何进行逻辑运算 范例:true or false 单独测试 true 和 false,可以看出 true 是真值,false 为假 ...
- shell 注释
以 # 开头的行就是注释,会被解释器忽略. 通过每一行加一个 # 号设置多行注释,像这样: #-------------------------------------------- # 这是一个注释 ...
- java基础深入解析基本类型
一.基本类型的简介 基本类型的两条准则: Java中,如果对整数不指定类型,默认时int类型,对小数不指定类型,默认是double类型. 基本类型由小到大,可以自动转换,但是由大到小,则需要强制类型转 ...
- RetinaNet论文理解
引言 介绍 目前精度高的检测器都是基于two-stage,proposal-driven机制,第一阶段生成稀疏的候选对象位置集,第二阶段使用CNN进一步将每个候选位置分为前景或者背景以及确定其类别: ...
- URAL 1658 Sum of Digits
URAL 1658 思路: dp+记录路径 状态:dp[i][j]表示s1为i,s2为j的最小位数 初始状态:dp[0][0]=0 状态转移:dp[i][j]=min(dp[i-k][j-k*k]+1 ...
- Codeforces 545D - Queue
545D - Queue 思路:忍耐时间短的排在前面,从小到大排序,贪心模拟,记录当前等待时间,如过等待时间大于当前的这个人得忍耐时间,那么就把这个人扔到最后面,不要管他了(哼╭(╯^╰)╮,谁叫你那 ...
- English trip -- VC(情景课) 7 B Clothing 服装
xu言: 不要使用中式的思维去思考西方的语义!!!切记切记 words a tie 领带 a blouse 女士衬衣 a sweater 毛衣 a skirt 短裙 a jacket 夹 ...
- Working routine CodeForces - 706E (链表)
大意: 给定矩阵, q个操作, 每次选两个子矩阵交换, 最后输出交换后的矩阵 双向十字链表模拟就行了 const int N = 1500; int n, m, q; struct _ { int v ...
- hdu1238 kmp
You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...