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

浅析电商网站建设趋势怎么做产品推广平台

浅析电商网站建设趋势,怎么做产品推广平台,网站建设 成都,wordpress google ua code 是什么目录 一、生成器 1、生成器定义 2、生成器存在的意义 3、创建生成器方式一(生成器表达式) 4. 创建生成器方式二(生成器函数) 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 i<3:'''yield i #第一次执行,此处挂起;同时将i的值返回到i#第二次执行,从挂起的地方往下执行'''temp = yield i #下次迭代时,代码从`yield`的下一条语句(不是下一行)开始执行print(f"i:{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__())# 抛出异常:StopIteration
'''
<class 'generator'>
start
0
temp:None
1
temp:None
2
temp:None
end
Traceback (most recent call last):in <module>print(a.__next__())# 抛出异常:StopIteration
StopIteration: done
'''

测试生成器工作原理(send)

'''
send的作用是唤醒并继续执行,发送一个信息到生成器内部
'''
def foo():print("start")i = 0while i < 2:temp = yield iprint(f"temp:{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))
StopIteration
'''

5. 总结

1. 什么是生成器

        生成器仅仅保存了一套生成数值的算法,并且没有让这个算法现在就开始执行,而是我什么时候调用它,它什么时候开始计算一个新的值,并给你返回

2. 生成器特点

  •  生成器函数生成一系列结果。通过 yield 关键字返回一个值后,还能从其退出的地方继续运行,因此可以随时产生一系列的值。
  • 生成器和迭代是密切相关的,迭代器都有一个 __next__() 成员方法,这个方法要么返回迭代的下一项要么引起异常结束迭代
  • 生成器是一个特殊的程序,可以被用作控制循环的迭代行为,

二、迭代器

1、概念

  1. 迭代是Python最强大的功能之一,是访问集合元素的一种方式
  2. 迭代器是一个可以记住遍历的位置的对象
  3. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束
  4. 迭代器只能往前不会后退
  5. 迭代器有两个基本的方法: iter() netx() 

2、可迭代对象和迭代器区别

  1. 一个实现了 iter 方法的对象,称为 "可迭代对象 Ieratable"
  2. 一个实现了 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
True
"""

        Python的 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__()

  1.  __iter__() 方法返回一个特殊的迭代器对象,这个迭代器对象实现了 __next__() 方法并通过StopIteration 异常标识迭代的完成
  2.  __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、运行过程中给对象添加属性和方法

#coding=utf-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、给类动态添加静态方法以及类方法

#encoding=utf-8
class Person():__slots__ = {"name", "age"}def __init__(self, name, age):self.name = nameself.age = age@staticmethod
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__的作用

  1. __slots__ 对动态添加成员变量、成员方法有限制。对动态添加类属性、类方法没有限制
  2. __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 'y'
"""

3. 对动态添加类属性、类方法没有限制

class MyClass:__slots__ = ['x']classattr = 1@classmethoddef 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.yidumall.com/news/51702.html

相关文章:

  • 万象城网站建设爱站网关键词长尾挖掘
  • 厦门网站制作最新国际新闻10条
  • 邢台网站制作最新新闻事件
  • 上海网站建设优化价格百度大数据平台
  • 宁波网站建设外包百度竞价推广怎么样才有效果
  • wordpress更改生成小图大小windows优化大师自动下载
  • 网站建站ddp站长统计app软件下载官网安卓
  • 花钱做网站注意些什么人工在线客服系统
  • 企业网站托管常见问题网络推广公司排名
  • 天津网站制作的公司哪个浏览器看黄页最快夸克浏览器
  • 周口网站优化页面设计漂亮的网站
  • 喀什百度做网站多少钱知名网络软文推广平台
  • 建设企业网站价钱搜索引擎优化seo应用
  • 做技术网站在背景图色盲眼镜
  • 企业网络营销网站设计磁力天堂最新版地址
  • 网站建设 bs模式种子搜索神器网页版
  • wordpress 繁体多地优化完善疫情防控措施
  • 网站背景宣传推广计划
  • PPT做音乐网站介绍seo怎么做关键词排名
  • 网站开发从什么学起网站创建流程
  • 深圳市文刀网站建设网站开发流程的8个步骤
  • 2020十大网络安全公司排名徐州seo推广优化
  • 做音乐网站的条件能打开各种网站的浏览器
  • 微软手机做网站服务器广州seo顾问服务
  • 简述网站建设基本流程营销网站建设规划
  • 北京网站开发月薪怎么进行推广
  • 网站更多分享怎么做私域运营软件
  • 千素网站建设电商平台
  • 商务网站建设论文答辩ppt百度网站下载
  • 网站建设和风险评估关于校园推广的软文