那些年被我坑过的Python——山外有山(第四章)
装饰器:
定义:
本质是函数,(装饰其他函数)就是为其他函数添加附加功能
原则:
1.不能修改被装饰的函数的源代码
2.不能修改被装饰的函数的调用方式
优点:
装饰器带来的最直观的好处:减少对函数的细化修改,批量增加新功能。
实现装饰器必备知识:
1、函数即“变量”
函数的原理与变量引用相似,都是将一个命名于内存对象进行映射
2、高阶函数
满足下列两个条件之一的则为高阶函数:
a、把一个函数名当作实参传递给另一个函数(在不修改被装饰函数代码的情况下为它增加功能)
b、一个函数返回值中包含另一个函数名(不修改函数的调用方式)
3、嵌套函数
具有局部变量的特性,即在函数内部继续使用def定义新的子函数;
4、高阶函数 + 嵌套函数 => 装饰器
最简单的装饰器示例:
def auth(_func):
def decorate(*args, **kwargs):
<需要附加的功能>
result = _func(*args, **kwargs)
<需要附加的功能>
return result return decorate
Python的内存回收机制:
1、当内存对象没有变量引用时候,会在一段时间内将内存对象回收
2、取消变量引用可以使用del关键词,实际上是实现了变量名与内存对象之间的映射关系
生成器(generator):
eg.( i**2 for i in range(10) )返回结果为一个生成器
1、只有在调用的时候才会生成相应的数据
2、只能记录当前的位置及数据,而且只能向后,不能向前
3、获取下一个数据的方法是调用:__next__()方法
迭代器 VS 可迭代对象(Iterator VS Iterable)
1、迭代器是指可以调用next()方法的对象
2、迭代对象是指可以使用for ... in ...: 遍历的对象
3、迭代对象可以通过iter()方法转换为迭代器
4、迭代器一定是迭代对象
5、但迭代对象不一定是迭代器,可以通过iter()转换
匿名函数的使用:
匿名函数,又称为:lambda 函数。这段代码显示如何使用 lambda 函数:
f = lambda x : 2 * x
print f(3)
一个返回语句是未使用过 lambda 函数,它总是返回一些东西。 lambda 函数可以包含 if 语句:
f = lambda x: x > 10
print(f(2))
print(f(12))
map函数中调用lambda:
映射的定义是 map(函数,可迭代)。它适用于一个函数可重复每一个项目。我们可以用 map(),以与列表中的lambda函数:
list = [1,2,3,4,5]
squaredList = map(lambda x: x*x, list)
print(squaredList)
使用 lambda 函数任何地方,都可以使用正常的函数来代替。lambda 函数不是一个语句,它是一个表达式。lambda 函数不支持的语句块。
filter函数中调用lambda:
过滤器(函数,迭代器)创建一个新的列表的元素,函数返回True。示例:
list = [1,2,3,4,5,6,7,8,9,10]
newList = filter(lambda x: x % 2 == 0, list)
print(newList)
返回的列表将返回仅包含其中lambda表达式的元素 “lamba x: x % 2 == 0” 的值为:true.
reduce 函数中调用lambda:
reduce 函数, reduce(function, iterable) 适用于两个参数累积到可迭代的项目,由左到右。示例:
list = [1,2,3,4,5]
s = reduce(lambda x,y: x+y, list)
print(s)
在这种情况下,表达始终为:true,因此,它简单地概括了列表的元素。另一个例子:
list = [10,6,7,5,2,1,8,5]
s = reduce(lambda x,y: x if (x > y) else y, list)
print(s)
内置函数:

1、abs:返回绝对值
2、all: 遍历一个迭代器,如果都为空,或者每个迭代元素都会true,则返回ture,等价于:
def all(iterable):
for element in iterable:
if not element:
return False
return True
3、any:与all函数作用相反,如果任何迭代的一个元素为ture,或者为空,则返回false
4、ascii: 转成ascii码
5、bin:转一个整数得到一个二进制的字符串
6、bool:转换一个值,得到一个bool类型
7、bytearray:返回一个字节数据
8、bytes: 根据一个编码转换成字节形式
9、callable: 回调函数,如果返回false,则代表回调失败,如果为true,它也仍然可能失败
10、chr:返回一个整形数字的Unicode形式,比如97返回a
11、classmethod:为函数返回一个类方法
12、compile:编译一个资源进入一个代码里或一个AST对象
13、complex:创建一个复数的表达式
14、 delattr:移除一个对象的属性
15、dict:创建一个词典结构(类似Map)
16、dir:如果没有参数返回本文件的路径,如果有参数返回一个对象的属性列表
17、divmod:两个整形数字做相除
18、enumerate:返回一个枚举对象
19、eval:执行一个表达式,或字符串作为运算
20、exec:支持python代码的动态执行
21、filter:在一个元组里面过滤出目标字符串
22、float:字符串转成浮点类型
23、format:格式化字符串
24、frozenset:返回一个新的克隆对象
25、getattr:获取对象的一个方法的结果,类似于x.foobar
26、 globals: 返回当前全局的字典表
27、hasattr:判断是否有某个属性值,返回true代表有
28、hash:取一个对象的hash值
29、help:调用系统内置的帮助系统
30、hex:转换一个整形数字,为小写的十六进制
31、id: 返回一个对象的唯一标识值
32、input:从控制台读取数据
33、int,转换字符串为int型
34、isinstance:判断一个对象是否为该类的一个实例
35、issubclass:判断一个类是否为另一个类的子类
36、iter: 返回一个可迭代的对象
37、len: 返回一个字符串的长度
38、list:打印一个集合对象
39、locals:更细并返回一个词典的本地标志表
40、map:返回一个可迭代的map函数
41、max:返回集合里面最大的一个或多个值
42、memoryview:返回一个python对象的内部数据
43、min:返回集合里面最小的一个或多个值
44、next:返回集合里面的下一项数值
45、object:返回一个新的对象,是所有的类的父类
46、oct:返回一个整形为八进制类型
47、open: 打开一个系统文件
48、ord:得到一个字符串或unicode类型的ascii数值
49、pow:返回的数字n次方值
50、print:打印输出语句
51、property:返回一个属性值
51、range:产生一个数字序列
52、repr:返回一个字符串可打印对象
53、reversed:反转一个集合
54、round:返回一个四舍五入的浮点数
55、set:返回一个新的set对象
56、setattr:设置一个新的属性值
57、slice:返回一个集合的区间集合
58、sorted:对一个集合进行排序
59、staticmethod:声明返回一个静态方法
60、str:将数字类型转换为字符串
61、sum:对一个集合里面的值求和
62、super:返回一个代理父类的对象
63、tuple:返回一个不可变的元组
64、type:返回一个对象的类型
65、vars:返回对象的属性
66、zip:返回组合一个对等的项
67、__import__: 比import高级的导入方法
python里面的内置常量
:
1、False:bool类型的值
2、True:bool类型的值
3、None:对象的为null
4、NotImplemented: 不是其他类型的实现
5、Ellipsis:省略
6、__debug__:debug选项
7、quit,exit,copyright,license,credits
其他小知识点:
1、获取绝对路径:
os.path.abspath()
2、获取上级目录
os.path.dirname()
3、获取函数名:
func.__name__
或者
getattr(func,__name__)
那些年被我坑过的Python——山外有山(第四章)的更多相关文章
- 《python for data analysis》第四章,numpy的基本使用
<利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块…… # -*- c ...
- 流畅python学习笔记:第十四章:迭代器和生成器
迭代器和生成器是python中的重要特性,本章作者花了很大的篇幅来介绍迭代器和生成器的用法. 首先来看一个单词序列的例子: import re re_word=re.compile(r'\w+') c ...
- Python 3标准库 第十四章 应用构建模块
Python 3标准库 The Python3 Standard Library by Example -----------------------------------------第十四章 ...
- 那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = "Zhang Xuyao" from sqlalchemy im ...
- 《Python 学习手册4th》 第四章 介绍Python对象类型
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容(每天看42页内容,可以保证月底看完此书) ''' ...
- Python:从入门到实践--第四章--列表操作--练习
#1.想出至少三种你喜欢的水果,将其名称存储在一个列表中,再使用for循环将每种水果的名称都打印出来. #要求:(1)修改这个for循环,使其打印包含名称的句子,而不是仅仅是水果的名称.对于每种水果, ...
- Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据
前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...
- 《Python网络编程基础》第四章 域名系统
域名系统(DNS) 是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因: 它们可以使人们比较容易地记住名字,如www.baidu.com. 它 ...
- python核心编程2 第十四章 练习
14-3.执行环境.创建运行其他Python脚本的脚本. if __name__ == '__main__': with open('test.py') as f: exec(f.read()) 14 ...
随机推荐
- A Round Peg in a Ground Hole - POJ 1584 (判断凸多边形&判断点在多边形内&判断圆在多边形内)
题目大意:首先给一个圆的半径和圆心,然后给一个多边形的所有点(多边形按照顺时针或者逆时针给的),求,这个多边形是否是凸多边形,如果是凸多边形在判断这个圆是否在这个凸多边形内. 分析:判断凸多边形可 ...
- springframework hibernate Transaction not successfully started
先贴出错误:org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transac ...
- 未能从程序集“WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35“ 中加载“System.Windows.SplashSceen”
通过添加windowsbase.dll,可以解决这个问题,你可以在自己的电脑上找到这个文件,地址是:C:\Program Files\Reference Assemblies\Microsoft\Fr ...
- 2015华为机试——数字基root
题目描写叙述: 求整数的Root:给定正整数,求每位数字之和;假设和不是一位数,则反复; 输入:输入随意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行相 ...
- tcmalloc资料
1. 确定dylib在max os是可以成功的. http://lists.apple.com/archives/perfoptimization-dev/2008/Dec/msg00002.html ...
- spring下载dist.zip
http://repo.springsource.org/libs-release-local/org/springframework/spring/ 选择对应版本下载即可
- Linux squid 安装配置
linux 代理软件 squid 查看是否安装squid 以上信息表明,本机是已经安装了此软件了 如果没有显示说明没有安装,则可以使用yum工具来安装 安装完软件后我们接着开始配置squid代 ...
- Linux网络基础
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3840284.html ...
- 第八篇:python高级之多进程
python高级之多进程 python高级之多进程 本节内容 多进程概念 Process类 进程间通讯 进程同步 进程池 1.多进程概念 multiprocessing is a package ...
- C++ hello world
日文版本的vs 2008 , 在 < 新建 里面先创建一个项目 然后点击项目去创建一个C++的主启动文件 选择创建的文件类型 然后在文件里面写入代码 #include<iostream&g ...