python-迭代器和生成器

'''
property函数可以用0,1,3或4个参数来调用。如果没用参数,产生的属性既不可读,也不可写。如果只使用一个参数调用(一个取值方法),产生的属性是只读的。第三个参数(可选)用于删除特性的方法(它不要参数)。第四个参数(可选)是一个文档字符串。property的四个参数分别叫做fget,fset,fdel,doc
'''#静态成员方法和类成员方法
#静态方法和类成员方法分别在创建的时分别被装入staticmethod类型和classmethod类型
#的对象中。静态方法的定义没有self参数,且能够被类本身直接调用,类方法在定义需要名为
#cls的类似self的参数,类成员方法可以直接用类的具体对象调用,但cls参数是自动被绑定到类的
__metaclass__=type
class MyClass:def stamethod():print("static method!")stamethod=staticmethod(stamethod)def clsmethod(cls):print("class method!",cls)clsmethod=classmethod(clsmethod)'''
装饰器:能对任何可调用的对象进行包装,可以用于方法,也可以用于函数使用@操作符,在方法(或函数)的上方将装饰器列出。
'''
class MyClass:@staticmethod#静态方法def stamethod():print("static method!")@classmethod#类成员方法def clsmethod(cls):print("class method!",cls)MyClass.stamethod()
MyClass.clsmethod()'''
__getattr__、__setattr__拦截对象的所有特性访问是可能,这可以使用旧式类实现,因为property方法不能使用__getattribute__(self,name):当特性name被访问时自动被调用(只能在新式类中使用)__getattr__(self,name):当特性name被访问且对象没有相应的特性时被自动调用__setatr__(self,name,value):当试图给特性name赋值时会被自动调用__delattr__(self,name):当试图删除特性name时被调用'''class  Rectangle:def __init__(self):self.width=0self.height=0def __setattr__(self,name,value):if name=='size':self.width,self.height=valueelse:self.__dict__[name]=valuedef __getattr__(self,name):if name=='size':return self.width,self.heightelse:raise AttributeError
#注意:__setattr__方法在所涉及的特性不是size时也会被调用,如果属性为size,则像self.width,self.height=value
#   执行操作,否则需要使用特殊的方法__dict__,用来代替普通的特性赋值操作
#     __getattr__方法只在普通的特性没有找到的时候调用#迭代器用法
#特殊方法__iter__:是迭代器规则的基础#迭代器规则:__iter__方法会返回一个迭代器,即具有next方法的对象#斐波那契数列的列表:
class Fibs:def __init__(self):self.a=0self.b=1def next(self):self.a,self.b=self.b,self.a+self.breturn self.adef __iter__(self):return selffibs=Fibs()
print(fibs.next())#内建函数iter可以从可迭代的对象中获取迭代器'''
#生成器:是一种用普通函数语法定义的迭代器,任何包含yield语句的函数称为生成器函数每次执行完后(使用yield语句,函数被冻结:即函数停在那点等待被唤醒,唤醒后又从停止的那点开始。
'''
#将一个列表的列表展开
lst=[[1,2,3],[7,9,0],[1,4,6]]#不能用于元素为字符串的列表
def MyExpend(lst):for a in lst:for b in a:yield b
for ele in MyExpend(lst):print(ele)print(list(MyExpend(lst)))#循环生成器:生成器推导式(生成器表达式),返回的时生成器
g=((i+2)**2 for i in range(2,27))
#或在函数中使用
sum(i**2 for i in range(10))#递归迭代器:多层循环嵌套
def MyExp(ls):try:try:ls+''#用于进行类型判断except TypeError:passelse:raise TypeErrorfor s in ls:for k in MyExp(s):#递归生成器yield kexcept TypeError:yield lsprint(list(MyExp(["TXY",['DOC',["TXT"]]])))#通用生成器
'''
生成器是一个包含yield的函数,当它被调用时,函数体中的代码不会被执行,而会返回一个迭代器,每次请求一个值时,就会执行生成器中的代码,直到遇到yield或者return语句。yield意味生成一个值,return则为代表生成器要停止(return只有在一个生成器中才能无参调用)
'''#使用普通函数模拟生成器
def MyExpFunc(ls):result=[]try:try:#不要迭代类似字符串的对象ls+''except TypeError:passelse :raise TypeErrorfor i in ls:for j in MyExpFunc(i):result.append(j)except TypeError:result.append(ls)return resultprint(MyExpFunc(['a',['a','b'],['ab']]))
运行结果:
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转帖]Oracle 11G RAC For Windows 2008 R2部署手册

Oracle 11G RAC For Windows 2008 R2部署手册(亲测,成功实施多次) https://www.cnblogs.com/yhfssp/p/7821593.html 总体规划 服务器规划 1、建议使用两台硬件配置一模一样的服务器来作为 RAC 环境的两个物理节点 2、服务器至少需要配置两块物…

生日快乐送女朋友的网页生日礼物模版

生日快乐送女朋友的网页生日礼物模版 Demo: http://sylvanding.online/happy-birthday-20221120 仓库:https://github.com/sylvanding/happy-birthday-20221120 参考 背景 https://codepen.io/arcs/pen/XKKYZW蛋糕 https://codepen.io/fixcl/pen/AaBNZB卡片 http…

美国独步世界的八大领域

来源:世界先进制造技术论坛一、美国诺贝尔奖获得者世界第一

python-文件和流

#标准库导入自己的模块:import syssys.path.append("模块路径")import sys sys.path.append(x:/Users/Dell10/Desktop/test.py)#告诉解释器还需要导入的模块路径,注意反斜杆的写法 import test#导入模块,导入时创建了.pyc文件 #模块导入类似以…

spoj839 Optimal Marks(最小割,dinic)

题目大意: 给你一个无向图\(G(V,E)\)。 每个顶点都有一个int范围内的整数的标记。 不同的顶点可能有相同的标记。 对于边\((u,v)\),我们定义\(Cost(u,v)mark [u]\ \ xor\ \ mark [v]\)。 现在我们知道某些节点的标记了。你需要确定其他节点的标记&#x…

Hinton的胶囊网络不太行?CVPR Oral论文:不比卷积网络更「强」

来源:机器学习研究组订阅在一篇 CVPR 2021 Oral 论文中,来自慕尼黑大学、微软亚研的研究者对胶囊网络和卷积网络进行了全面的对比。一系列实验表明,一些被认为对胶囊网络(CapsNet)至关重要的设计组件实际上会损害它的鲁…

Python程序生成.exe的可执行文件

Python程序生成.exe的可执行文件 1)编写生成exe的脚本程序setup.py #codingutf-8 #exe文件生成脚本 from distutils.core import setup import py2exe setup(console[test.py])#test.py为应用程序文件 2)将应用程序test.py和脚本程序放在同一个文件夹下A…

数量庞大!中国成长型AI企业研究报告

来源:德勤Deloitte编辑:蒲蒲日前,德勤、英特尔和深圳人工智能行业协会联合发布《中国成长型AI企业研究报告》。该报告通过对数千家成长型AI企业数据的分析研究,几百家企业的走访以及和近百家优秀企业的深度合作,就中国…

Python+Selenium基础篇之2-打开和关闭火狐浏览器

本节介绍如何初始化一个webdriver实例对象driver,然后打开和关闭firefox浏览器。要用selenium打开fiefox浏览器。首先需要去下载一个driver插件geckodriver.exe, 下载地址https://github.com/mozilla/geckodriver/releases,下载好这个exe文件…

Oracle 数据库

Oracle 12c 数据库学习记录:study 1: 0.Oracle例程服务的启动net start oracleserviceorcl 1.查看数据库的初始化参数:通常登录sys用户:sqlplus / as sysdba;2. 查看内存方面的参数(模糊匹配):show paramet…

除了芯片,我们还应关注这六大核心技术!

来源:疯狂机械控企业想发展自己还是需要掌握核心技术。除了芯片以外,还有哪些核心技术是我们重点关注的呢?01 软件定义机器▼设备智能化的体现就是典型的软件定义机器,包括机器轻松连接至互联网;将APP和分析结果嵌入机…

matlab技巧

%matlab 编程技巧 %% 1,调试过程中,不能有clear all语句,该语句会清除断点%% 2.通过tic和toc来计算某块代码的执行时间 tic for i1:1000xx1 end timetoc%% 3.图像对象和句柄 %1.设置线条的属性 x0:0.01:10; hplot(x,x.*sin(cos(x)))%h为曲线的句柄 grid …

MySQL GROUP BY 语句

GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。 GROUP BY 语法 SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 1.group by 可以实现一个最简单的…

中国科学院院士褚君浩:第四次工业革命和智能时代

来源:信息化时代第一次工业革命起源于英国,以机械化为特征。第二次工业革命,以电气化为特征。第三次工业革命,以信息化为特征。现阶段,正值第四次工业革命,此次工业革命具有以下三个特征:信息科…

数据的描述统计量

一、本文简介   一组样本数据分布的数值特诊可以从三个方面进行描述: 1、数据的水平:也称为集中趋势或位置度量,反应全部数据的数值大小。 2、数据的差异:反应数据间的离散程度。 3、分布的形状:反应数据分布的偏度和…

Science:细胞如何测量自身的大小?答案是:DNA含量

图片显示的是一个茎尖分生组织(在中间),在它的两侧出现了花蕾。绿色标记的细胞即将进入DNA复制。来源:生物通自从350多年前科学家在显微镜下发现细胞以来,他们就注意到每一种细胞都有其特有的大小。从微小的细菌到几英寸长的神经元&#xff0…

Windows 程序设计技巧

#include<iostream> #include<windows.h>using namespace std;int main() {int nSelect ::MessageBox(NULL,"windows 程序设计","测试",MB_OKCANCEL);if (nSelect IDOK){printf("OK!");}else{printf("Cancel!");}return…

洛谷P1558 色板游戏

题目背景 阿宝上学了&#xff0c;今天老师拿来了一块很长的涂色板。 题目描述 色板长度为\(L\)&#xff0c;\(L\)是一个正整数&#xff0c;所以我们可以均匀地将它划分成\(L\)块\(1\)厘米长的小方格。并从左到右标记为\(1, 2, ... L\)。 现在色板上只有一个颜色&#xff0c;老师…

兰德公司发布《美国5G时代》报告

来源&#xff1a;微信公众号科技咨询频道作者&#xff1a;谢黎、张志强&#xff0c;中国科学院成都文献情报中心兰德公司2021年5月24日发布《美国5G时代&#xff1a;在保障国家和人民的同时获得竞争优势》报告。报告援引美国国防创新委员会、联邦政府的观点&#xff0c;声称5G是…

7-3 银行排队问题之单队列多窗口服务 (25 分)

7-3 银行排队问题之单队列多窗口服务 (25 分) 假设银行有K个窗口提供服务&#xff0c;窗口前设一条黄线&#xff0c;所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时&#xff0c;下一位顾客即去该窗口处理事务。当有多个窗口可选择时&#xff0c;假设顾客总是选择编号…