最近忙中偷闲把前些年买的《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高手之路 ------读书有感的更多相关文章

  1. 《Python高手之路 第3版》这不是一本常规意义上Python的入门书!!

    <Python高手之路 第3版>|免费下载地址 作者简介  · · · · · · Julien Danjou 具有12年从业经验的自由软件黑客.拥有多个开源社区的不同身份:Debian开 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  4. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  5. Python高手之路【二】python基本数据类型

    一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

  6. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  7. Python高手之路【八】python基础之requests模块

    1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2  ...

  8. Python高手之路【十三】socket网络编程

    什么是客户/服务器架构? 什么是客户/服务器架构?不同的人有不同的答案.这要看你问的是什么人,以及指的是软件系统还是硬件系统了.但是,有一点是共通的:服务器是一个软件或硬件,用于提供客户需要的&quo ...

  9. Python高手之路【十一】python基础之面向对象

    创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数, ...

随机推荐

  1. shell 布尔运算符

    布尔运算符 下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 ! 非运算,表达式为 true 则返回 false,否则返回 true. [ ! false ...

  2. STL_算法_中使用的函数对象

    写在前面: STL算法中的 函数对象的功能: (1).都是提供一种比较的函数,比较相邻的左右两个值的 相等/大小 等的关系, (2).返回值都是bool :该返回值 貌似是指明 遍历元素是否还要继续往 ...

  3. 《F4+2团队项目系统设计改进》

    项目软件系统设计改进 1引言 1.1编写目的 本阶段完成系统的大致设计并明确系统的数据结构与软件结构.本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件概貌,把它加工成在程序细节上非常接近与源 ...

  4. [.NET开发] C# 如何更改Word语言设置

    一般在创建或者打开一个Word文档时,如果没有进行过特殊设置的话,系统默认的输入语言的是英语输入,但是为适应不同的办公环境,我们其实是需要对文字嵌入的语言进行切换的,因此,本文将介绍如何使用Spire ...

  5. 测序中Q20 Q30 Q40

    你能给别人讲清楚这个概念吗? 二代测序中,每测一个碱基会给出一个相应的质量值,这个质量值是衡量测序准确度的.碱基的质量值13,错误率为5%,20的错误率为1%,30的错误率为0.1%.行业中Q20与Q ...

  6. spoj Fast Multiplication

    题意:乘法 要用nlogn的fft乘法. //#pragma comment(linker,"/STACK:1024000000,1024000000") #include< ...

  7. 安装 tensorflow 时遇到 OSError: [Errno 1] Operation not permitted 的解决办法

    Installing collected packages: numpy, scipy, six, pyyaml, Keras, opencv-python, h5py, html5lib, blea ...

  8. IE6不兼容hover已解决

    新建一个csshover.htc文件,一下是csshover.htc内容 <public:attach event="ondocumentready" onevent=&qu ...

  9. Android 7.0正式版工厂镜像下载

    Android 7.0正式版工厂镜像下载 从3月份上线首个开发者预览版(Developer Preview)之后,经过近6个月时间的打磨,谷歌今天开始向Nexus设备推送Android 7.0 Nou ...

  10. Clear The Matrix CodeForces - 903F (状压)

    大意: 给定4行的棋盘以及4种大小的正方形方块, 每种各有一定花费, 每次可以选一种方块放在棋盘上, 棋盘对应格子全变为'.', 求最少花费使得棋盘全部变成'.' 状压基本操作练习, 状态取12位, ...