最近忙中偷闲把前些年买的《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. MongoDB(课时29 MapReduce)

    3.7.4 MapReduce MapReduce 是整个大数据的精髓所在(实际中别用,因为在MongoDB中属于最底层操作). MapReduce是一种计算模型,简单的说就是将大批量的工作分解执行, ...

  2. Ubuntu安装NVIDA显卡驱动

    0. 综述 电脑型号:R720 Ubuntu版本:16 显卡型号:1050ti 目前,知道3种安装N卡驱动的方法: 1. PPA源:最简便,但未必有最新驱动(亲测),或可能遇到问题(风闻). sudo ...

  3. android--------阿里 AndFix 热修复

    AndFix,全称是Android hot-fix.是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug. 支持Android 2.3 到 6.0,并且支持arm 与 X86 ...

  4. thinkphp中页面中时间的默认显示

    1,第一我们都知道thinkphp 控制器和页面是通过$this->assgin();或着$this->在页面中要得到的值的随便变量   ,来传值的 比如(此方法是在有时间控件才能使用的) ...

  5. SPFA 最短路

    求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm.     SPFA算法是西南交通大学段凡丁于1994年发表的.    从名字我们就可以看出,这种算法在 ...

  6. hdu 1175 bfs+priority_queue

    连连看 如上图所示如果采用传统bfs的话,如果按照逆时针方向从(1,1)-->(3,4)搜索,会优先选择走拐四次弯的路径导致ans错误: Time Limit: 20000/10000 MS ( ...

  7. LeetCode 22. Generate Parentheses(构造)

    题目大意:给n个'(' 和 ')',构造出所有的长度为2*n并且有效的(可匹配的)字符串. 题目分析:这道题不难,可以直接搜索出所有可能的字符串,然后再逐一判断是否合法即可.但是还有更好的办法,实际上 ...

  8. 双机热备(准)-->RAC(夭折)-->DG(异地容灾)

    以下有的地方为oracle专业术语,非懂勿喷.前段时间某项目负责人告知,他们应用需要一套oracle数据库环境运行模式为双机热备.简单了解下对于现在已经非常成熟的RAC再合适不过了.详细问了问当前服务 ...

  9. codeforce 853A Planning

    题目地址:http://codeforces.com/problemset/problem/853/A 题目大意: 本来安排了 n 架飞机,每架飞机有 ci 的重要度, 第 i 架飞机的起飞时间为 i ...

  10. 链表(list)的实现(c语言)

    链表是一种基本的数据结构,今天练习了一下,所以将代码贴在下面,代码测试通过,代码还可以优化,我会过段时间就会增加一部分或者优化一部分直达代码无法优化为止,我的所有数据结构和算法都会用这样的方式在博客上 ...