python生成器、迭代器、__call__、闭包简单说明
1.生成器
这种一边循环一边计算的机制,称为生成器:generator,最简单的方法是把生成式的[]改为().
>>> l=(x * x for x in range(1, 11) if x % 2 == 0)
>>> l
<generator object <genexpr> at 0x7fb6ca32fca8>
定义生成器的另一种方法:如果一个函数定义中包含yield关键字,
那么这个函数就不再是一个普通函数,而是一个生成器:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a+b
n += 1
return 'done'
任何一个循环都得有一个结束条件,n在这个函数中就是结束条件,
b是主角a是配角,循环一次生成器就改变一次.
2.迭代器
凡是可作用于for循环的对象都是Iterable类型(可迭代对象);
凡是可作用于next()函数的对象都是Iterator类型;它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,
不过可以通过iter()函数获得一个Iterator对象;
Python的for循环本质上就是通过不断调用next()函数实现的.
3.在页脚html代码添加如下内容,会增加打赏功能:
<script>
window.tctipConfig = {
staticPrefix: "http://static.tctip.com",
buttonImageId: 5,
buttonTip: "zanzhu",
list:{
alipay: { qrimg: "https://files.cnblogs.com/files/fawaikuangtu123/weichat.bmp"}, //修改1
weixin: { qrimg: "https://files.cnblogs.com/files/fawaikuangtu123/zfb.bmp"}, //修改2
}
};
</script>
4.在页首html代码添加如下代码,右上角会出现藏着github地址的a标签图片:
<a href="https://github.com/LiXiang-LiXiang" title="Fork me on GitHub" target="_blank">
<img style="position: absolute; top: 72px; right: 1px; border: 0" alt="Fork me on GitHub"
src="http://images.cnblogs.com/cnblogs_com/fawaikuangtu123/1343168/o_Fuck-me-on-GitHub.png"></a>
5.Python __call__ 方法
实现了__call__方法的对象,相当于重载了(),可以实现调用功能.
class A():
def __call__(self,name):
print("%s is running!" % name)
>>> a = A()
>>> a("people")
people is running!
实现斐波纳契数列的类:
class Fib(object):
def __call__(self, *args, **kwargs):
ret = [1,1]
num = int(args[0])
if num == 1:
return [1, ]
else:
while len(ret) < num:
ret.append(ret[-1] + ret[-2])
return ret
hehe = Fib()
print(hehe(5))
6.部署完一个网站后,想统计用户总访问量、日访问量、用户ip地址和该ip地址的访问次数,
定义一个函数,也可以是装饰器,在视图中调用,
这种做法只适合简单页面访问量统计,不适合统计高并发页面访问量,而且会降低性能,
等以后水平高了再来想这个问题.
参考地址:https://blog.csdn.net/Duke10/article/details/81273741
Django2.0整合markdown编辑器并实现代码高亮
参考地址:https://blog.csdn.net/Duke10/article/details/81033686
7.闭包
闭包:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,
并且外函数的返回值是内函数的引用,这样就构成了一个闭包.
def test(number):
print("--1--") def test_in(number2):
print("--2--")
print(number + number2) print("--3--")
return test_in ret = test(100)
ret(1)
python生成器、迭代器、__call__、闭包简单说明的更多相关文章
- python 生成器 迭代器
阅读目录 一 递归和迭代 二 什么是迭代器协议 三 python中强大的for循环机制 四 为何要有for循环 五 生成器初探 六 生成器函数 七 生成器表达式和列表解析 八 生成器总结 一 递归和迭 ...
- day6学python 生成器迭代器+压缩文件
生成器迭代器+压缩文件 readme的规范 1软件定位,软件的基本功能2运行代码的方法:安装环境,启动命令3简要的使用说明4代码目录结构说明,更详细点可以说明软件的基本原理5常见问题说明 ====== ...
- python生成器&迭代器
列表生成式 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 里每个值都加一 普通做法 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]for index,i in e ...
- Python 生成器, 迭代器, 可迭代对象的区别
1.可迭代对象 在python中, 一切皆对象, 但凡是可以用for循环进行遍历取值的对象都可以称之为可迭代对象, 可迭代对象在程序的一个执行周期中,可以无限轮次的进行循环遍历 2.迭代器 a.一个可 ...
- python 生成器 迭代器 yiled
文章来源:http://python.jobbole.com/81911/ https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449 ...
- python 生成器&迭代器
列表生成式 要生成[1x1, 2x2, 3x3, ..., 10x10]>>> [x * x for x in range(1, 11)]for循环后面还可以加上if判断>&g ...
- python 基础 4.4 生成式 生成器 迭代器
一.生成式和生成器 列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理. #/usr/bin/python #coding=u ...
- Python 生成器 (generator) & 迭代器 (iterator)
python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...
- python中的生成器、迭代器、闭包、装饰器
迭代器 迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 可迭代对象 以直接作用于 for ...
- python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解
一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...
随机推荐
- 大意了,这几道Python面试题没有答对,Python面试题No13
第1题: Python如何爬取 HTTPS 网站? 这类问题属于简单类问题 在使用 requests 前加入:requests.packages.urllib3.disable_warnings(). ...
- Python学习笔记:re模块(正则表达式)
本文是部分内容参考自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html,虽然这篇博客是基于Python2.4的老版本,但是基础的P ...
- 使用python3调用MyQR库生成动态二维码(附源代码)
可生成普通二维码.带图片的艺术二维码(黑白与彩色).动态二维码(黑白与彩色). GitHub:https://github.com/sylnsfar/qrcode 中文版:https://github ...
- 剑指Offer(书):顺时针打印数组
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...
- 10个MCU常用的基础知识
转自:http://bbs.21ic.com/icview-2659278-1-1.html 1.MCU有串口外设的话,在加上电平转换芯片,如MAX232.SP3485就是RS232和RS485接口了 ...
- PTA 银行排队问题之单队列多窗口加VIP服务 队列+模拟
假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假设顾客总是选择编号最小的窗口. 有些银行会给 ...
- C3P0连接问题
C3P0 连接时的相关问题: 我的环境是在IDEA中使用C3P0中进行的: 使用C3P0主要用到的jar包都是最新和Mysql8.0兼容的包 在连接的时候遇到: 先是在连接的时候出现数据库连接的时候的 ...
- Linux学习-检验软件正确性
md5sum / sha1sum / sha256sum 目前有多种机制可以计算文件的指纹码,我们选择使用较为广泛的 MD5, SHA1 或 SHA256 加密机 制来处理,我们拿NTP 软件来检查看 ...
- P2598 [ZJOI2009]狼和羊的故事(最小割)
P2598 [ZJOI2009]狼和羊的故事 题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么 ...
- css 阴影使用
文本阴影 p{ text-shadow: 5px 5px 5px #FF0000; } text-shadow: h-shadow v-shadow blur color; text-shadow: ...