当前位置: 首页 > news >正文

网站的建设目标网站开发和桌面开发哪个难

网站的建设目标,网站开发和桌面开发哪个难,wordpress 编辑自己代码,网站关键词优化服务目录 一、生成器 1、生成器定义 2、生成器存在的意义 3、创建生成器方式一#xff08;生成器表达式#xff09; 4. 创建生成器方式二#xff08;生成器函数#xff09; 1. 生成器函数 2. 生成器函数的工作原理 5. 总结 1. 什么是生成器 2. 生成器特点 二、迭代器…目录 一、生成器 1、生成器定义 2、生成器存在的意义 3、创建生成器方式一生成器表达式 4. 创建生成器方式二生成器函数 1. 生成器函数 2. 生成器函数的工作原理 5. 总结 1. 什么是生成器 2. 生成器特点 二、迭代器 1、概念 2、可迭代对象和迭代器区别 3、for循环本质 4、创建一个迭代器 三、动态添加属性和方法 1、动态编程语言定义 2、运行过程中给对象添加属性和方法 3、给类动态添加静态方法以及类方法 四、限制动态添加 1、slots 1.  __slots__的作用 2. 对动态添加成员变量、成员方法有限制 3. 对动态添加类属性、类方法没有限制 一、生成器 1、生成器定义 在Python中一边循环一边计算的机制称为生成器generator 2、生成器存在的意义 列表所有数据都在内存中如果有海量数据的话将会非常消耗内存。 例如仅需要访问前面几个元素那后边所有空间就浪费了 如果列表元素按照某种算法推算出来就可以在循环的过程中不断推算出后续的元素这样就不必创建完整的 list 从而节省大量的空间。 3、创建生成器方式一生成器表达式 生成器表达式很简单只要把一个列表推导式的 [] 改成 () 就创建了一个生成器(generator) L [x * x for x in range(10)] #推导式 print(L) g (x * x for x in range(10)) #加成括号就是生成器 print(g) #generator object genexpr at 0x1022ef630 L是一个list而g则是一个 generator 4. 创建生成器方式二生成器函数 1. 生成器函数 如果一个函数中包含了 yield 关键字那么这个函数就不再是一个普通的函数调用函数就是创建了一个生成器generator对象生成器函数利用关键字 yield 一次性返回一个结果阻塞重新开始 2. 生成器函数的工作原理 生成器函数返回一个迭代器for循环对这个迭代器不断调用 __next__() 函数不断运行到下一个 yield 语句一次一次取得每一个返回值直到没有 yield 语句为止最终引发 StopIteration 异常 yield 相当于 return 返回一个值并且记住这个返回的位置下次迭代时代码从 yield 的下一条语句(不是下一行)开始执行 send() 和 next() 一样都能让生成器往下走一步下次遇到 yield 停但 send() 能传一个值这个值作为 yield 表达式整体的结果 测试生成器工作原理yield 如果一个函数中包含 yield 关键字那么这个函数就不再是一个普通函数 调用函数就是创建了一个生成器generator对象生成器函数其实就是利用关键字 yield 一次性返回一个结果阻塞重新开始原理 1. 函数有了yield之后调用它就会生成一个生成器 2. 下次从下一个语句执行切记不是下一行tmp yield i 3. return在生成器中代表生成器种植直接报错StopIeratation 4. next方法作用唤醒并继续执行def test():print(start)i 0while i3:yield i #第一次执行此处挂起同时将i的值返回到i#第二次执行从挂起的地方往下执行temp yield i #下次迭代时代码从yield的下一条语句(不是下一行)开始执行print(fi:{i})i 1print(end)return done if __name__ __main__:a test()print(type(a))print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__())# 抛出异常StopIterationclass generator start 0 temp:None 1 temp:None 2 temp:None end Traceback (most recent call last):in moduleprint(a.__next__())# 抛出异常StopIteration StopIteration: done测试生成器工作原理send send的作用是唤醒并继续执行发送一个信息到生成器内部def foo():print(start)i 0while i 2:temp yield iprint(ftemp:{temp})i 1print(end)g foo() print(next(g)) #等同g.__next__(),next是内置函数 print(**20) print(g.send(100)) print(next(g)) # for a in g:#g所返回的值是yield处的i # print(a)start 0 ******************** temp:100 1 temp:None end Traceback (most recent call last):print(next(g)) StopIteration5. 总结 1. 什么是生成器 生成器仅仅保存了一套生成数值的算法并且没有让这个算法现在就开始执行而是我什么时候调用它它什么时候开始计算一个新的值并给你返回 2. 生成器特点 生成器函数生成一系列结果。通过 yield 关键字返回一个值后还能从其退出的地方继续运行因此可以随时产生一系列的值。生成器和迭代是密切相关的迭代器都有一个 __next__() 成员方法这个方法要么返回迭代的下一项要么引起异常结束迭代。生成器是一个特殊的程序可以被用作控制循环的迭代行为 二、迭代器 1、概念 迭代是Python最强大的功能之一是访问集合元素的一种方式迭代器是一个可以记住遍历的位置的对象迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束迭代器只能往前不会后退迭代器有两个基本的方法 iter() 和 netx()  2、可迭代对象和迭代器区别 一个实现了 iter 方法的对象称为 可迭代对象 Ieratable一个实现了 next 方法并且是可迭代的对象称为迭代器 Iterator                                            即实现了 iter 方法和 next 方法的对象就是迭代器生成器都是 Iterator对象但 list 、 dict 、str 虽然都是 Iterable可迭代对象              却不是Iterator迭代器 生成器一定是迭代器 可迭代对象不一定是迭代器使用iter([])封装后可转为迭代器from collections.abc import Iterator from collections.abc import Iterable a isinstance([], Iterator) #list、dict、str虽然是Iterable可迭代对象却不是Iterator迭代器 print(a) a isinstance([], Iterable) #可迭代对象 print(a)执行结果 False True list、dict、str 等 Iterable 变成 Iterator可以使用 iter() 函数 b isinstance(iter([]), Iterator) print(b) b isinstance(iter(花非人陌), Iterator) print(b) 执行结果 True TruePython的 Iterator 对象表示的是一个数据流。可以把这个数据看做是一个有序序列但我们却不能提前知道序列的长度只能不断通过 next() 函数实现按需计算下一个数据所以 Iterator 的计算是惰性的只有在需要返回下一个数据时它才会计算。         所以生成器一定是迭代器。 3、for循环本质 #Python3 的 for 循环本质就是通过不断调用 next() 函数实现的。for x in [1,2,3,4,5]:pass本质是 #首先获得Iterator对象 it iter([1,2,3,4,5]) #循环 while True:try:# 获得下一个值x next(it)except StopIteration:# 遇到StopIteration 就退出循环break 4、创建一个迭代器 一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() __iter__() 方法返回一个特殊的迭代器对象这个迭代器对象实现了 __next__() 方法并通过StopIteration 异常标识迭代的完成 __next__() 方法会返回下一个迭代器对象 #创建一个依次返回10,20,30,...这样数字的迭代器 class MyNumbers:def __iter__(self):self.num 10return selfdef __next__(self):if self.num 40:x self.numself.num 10return xelse:raise StopIterationmyclass MyNumbers() myiter iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))执行结果 10 20 30 Traceback (most recent call last):raise StopIteration StopIteration程序解析 在这段代码中MyNumbers 类定义了一个迭代器。该迭代器的作用是生成一系列数字从 10 开始每次增加 10直到 40然后停止。在程序中通过 iter(myclass) 方法获取 MyNumbers 类的迭代器对象 myiter然后调用 next(myiter) 方法获取下一个数字。在第一次调用 next(myiter) 方法时迭代器会执行 __next__() 方法返回 self.num 的值 10然后将 self.num 的值增加 10变为 20。在第二次、第三次调用 next(myiter) 方法时迭代器会再次执行 __next__() 方法返回 20 和 30然后将 self.num 的值分别增加 10变为 30 和 40。在第四次调用 next(myiter) 方法时迭代器再次执行 __next__() 方法发现 self.num 的值已经大于等于 40于是抛出 StopIteration 异常表示迭代已经结束。三、动态添加属性和方法 1、动态编程语言定义 指在运行时可以改变其结构的语言例如新的函数、对象、甚至代码可以被引进 已有的函数可以被删除或是其他结构上的变化 2、运行过程中给对象添加属性和方法 #codingutf-8 import types class Person():def __init__(self, name, age):self.name nameself.age agep1 Person(zhangsan, 20) p2 Person(lisi, 18) #动态给对象添加属性和方法 p1.score 100 print(p1.score) #加给p1的只能p1用,对象的也是一样#动态给对象添加方法 def run(self):print(f{self.name}, running...) p1.run types.MethodType(run, p1) #而types.MethodType(run,p1)则是告诉解释器self指的就是p1 p1.run()执行结果 100 zhangsan, running...3、给类动态添加静态方法以及类方法 #encodingutf-8 class Person():__slots__ {name, age}def __init__(self, name, age):self.name nameself.age agestaticmethod def staticfunc():print(--- static method ---)Person.staticfunc staticfunc Person.staticfunc() Person.score 1000 #动态给对象静态方法 print(Person.score)classmethod def clsfunc(cls):print(--- cls method ---) Person.clsfunc clsfunc #动态增加类方法 Person.clsfunc() 四、限制动态添加 1、slots 1.  __slots__的作用 __slots__ 对动态添加成员变量、成员方法有限制。对动态添加类属性、类方法没有限制__slots__ 只对本类有限制不限制子类 2. 对动态添加成员变量、成员方法有限制 MyClass 类使用 __slots__ 属性限制了实例对象的属性只允许动态添加 x 属性。 因此obj.x 1 可以成功但是 obj.y 2 会抛出 AttributeError 异常class MyClass:__slots__ [x]obj MyClass() obj.x 1 # 可以动态添加 x 属性 obj.y 2 # 报错__slots__ 限制了不能动态添加 y 属性执行结果 AttributeError: MyClass object has no attribute y3. 对动态添加类属性、类方法没有限制 class MyClass:__slots__ [x]classattr 1classmethoddef myclassmethod(cls):print(class method)MyClass.newclassattr 2 # 可以动态添加类属性 print(MyClass.newclassattr) MyClass.mynewclassmethod lambda cls: print(new class method) # 可以动态添加类方法 MyClass.mynewclassmethod(MyClass) #传递类本身作为参数 obj MyClass() obj.x 3 # 可以动态添加实例属性 print(obj.x) # 可以动态添加 x 属性执行结果 2 new class method 3
http://www.dnsts.com.cn/news/57539.html

相关文章:

  • 网站建设的心得短链接在线生成官网
  • 如何让百度收录我的网站建筑工程完工证明格式
  • 优秀网站模板seo百度关键词优化
  • wordpress 4.7.2 被黑郑州seo优化顾问热狗
  • 学做网站用谁的书英文网站建设 飞沐
  • 安徽省交通建设工程质量监督局网站郑口住房和城乡建设局网站
  • 网站建设服务合同协议教育培训机构网站
  • 青岛网站建设公昆明网站建设方案报价
  • 互动型网站做网站都用什么工具
  • 数码公司网站建设调查学院网站开发网站定位
  • 网站宣传推广策划ui登录界面设计
  • 企业所得税的计算公式三种seo推广淘客
  • 网站建设学什么好管理员界面wordpress
  • 乐彩网站源码网站建设在百度怎么做网站
  • 集团网站方案策划书dtc建站服务
  • 长安公司网站制作网站上的楼价走势图怎么做
  • nas做网站服务器网站建设前期工作
  • 从0到建网站如何建设电影网站
  • 自己做网站和推广wordpress缓存怎么清理
  • 网站程序结构wordpress+云播插件
  • 上百度推广的网站要多少钱英文网站建设注意事项
  • 零食网站模板企业老板培训课程
  • 阿里云如何添加新网站做英文网站违法吗
  • 旅游网站建设的重要性wordpress4.9.6漏洞
  • 在线企业建站模板wordpress试卷插件
  • 玉树网站建设wordpress上传到服务器发布
  • 政协网站建设要求怎样提升网站权重
  • 毕业设计除了网站还可以做啥净水机企业网站源码
  • 怎样修改公司网站内容淘宝店网站建设
  • 长治市建设厅官方网站北京欢迎你 网站建设