电子商务网站规划原则企业网站优化包括哪三个方面

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

电子商务网站规划原则,企业网站优化包括哪三个方面,网站开发w亿玛酷1专注,电影网站建设规划书一、迭代器 #xff08;1#xff09;定义 标准解释#xff1a;迭代器是 Python 中实现了迭代协议的对象#xff0c;即提供iter()和 next()方法#xff0c;任何实现了这两个方法的对象都可以被称为迭代器。 所谓iter()#xff0c;即返回迭代器自身 所谓… 一、迭代器 1定义 标准解释迭代器是 Python 中实现了迭代协议的对象即提供iter_()和 next()方法任何实现了这两个方法的对象都可以被称为迭代器。 所谓iter()即返回迭代器自身 所谓next()即返回容器的下一个元素。 是不是没看懂别急听下面的人话怎么说 简单来说你听我慢慢道来 首先我们看python中的 for 循环 for i in 对象 其中对象必须是可迭代的什么叫可迭代就比如对象是[1,23]i会依次变为1,23那么这个对象就是可迭代的如果这个对象是33i只会变成33这行代码还会报错这个对象就是不可迭代的 然后我们来理解下这行代码的逻辑 如果对象是[1,23]那么它是可以迭代的而这个可以迭代的对象就叫做iter( ) 方法。 所以这一点我们可以这么理解如果没有iter( )方法那么对象就不可迭代那么程序就会报错。 当 i 依次变为1,23的过程中它能自己变就是从1变成2又从2变成3这种可以自动下一个的过程就叫做next()方法 那么迭代器我们就可以这么去理解了 迭代器iter()方法 next()方法 即一个对象它具有iter()方法和next()方法那么它就是迭代器 注意诸如iter()中左右横线是英文状态下的两个“”连在一起的  2使用 我们来看一个迭代器的例子加深理解 list [1, 2, 3]# 用inter方法获取迭代器对象 a iter(list)# 使用迭代器遍历元素 print(next(a)) # 输出 1 print(next(a)) # 输出 2 print(next(a)) # 输出 3# 若再写一行print(next(a))

则下一次调用将会抛出 StopIteration 异常因为列表中没有更多的元素了解释

我们首先定义一个列表 然后用 iter方法获取了可迭代对象 最后再用 next方法进行了输出 注意有人可能发现我们之前一直说的都是iter()而这里写的却是 iter 原因在于这里代码中的 iter() 是一个函数它用于调用该对象的 iter() 方法进而返回一个迭代器。 那么什么时候写 iter 什么时候写iter( ) 呢 何时写 iter
当你已有一个可迭代对象并希望得到它的迭代器时你可以直接使用 iter() 函数。 例如你有一个列表想获取它的迭代器。 何时写iter( )
你创建了一个类并希望它可以被 for 循环遍历或者可以被 next() 函数逐个获取元素 这个新概念“类”不懂可以先跳过后面的章节会详细解释什么叫“类” 说起使用这里还有个重要知识点获取迭代器的值 在上面的例子中我们可以看到获取迭代器的值用的是 next迭代器对象 其实我们还可以用  迭代器对象.next  来获取如 补充除此之外还可以用一个报错的方法来输出 为啥我说报错呢因为for循环时内部会报错但是我们看不到而已。 3作用 我们使用时可以发现迭代器输出时是一个一个往外蹦的我们不用next方法它就不会输出。 所以这里的一个重要作用便是它只有在需要时才计算和返回下一个数据。 这意味着它们不会一次性计算出所有结果而是每次调用时都产生下一个值从而避免了不必要的计算和内存占用。 二、生成器 1定义 生成器就是一个特殊的迭代器。 特殊在哪呢 就在于它多了个带 yield 关键字的函数 什么是yield关键字 你可以把它理解为函数里的return 它长什么样它长下面这样 其中gen就是一个生成器。 前面那个my_generator()函数后面不是带了三个yield吗所以给gen后gen就变成生成器了。 2yield关键字 我们来详细解释下这个yield关键字 首先我们要知道使用 yield 关键字的函数会变成一个生成器从此它就不是普通的函数了。yield可以有多个 与return不同的是  每次调用yield时函数会暂停并返回一个值。 即计算机执行完第一个print(next(gen))时函数会将当前第一个值 1 返回然后自身暂停到yield1和yield2之间。 执行第二个print(next(gen))时函数就从新起步然后返回当前第一个值 2 因为它之前不是暂停到yield1和yield2之间了吗所以此时2是第一个值然后再次暂停到了yield2和yield3之间 依次类推是谓函数会暂停并返回一个值。 所以到此生成器的作用也就体现出来了即它可以暂停函数的执行并在 需要时恢 复执行不会一次性生成所有的数据而是什么时候需要什么时候 生成从而节省内存。  3生成器的执行 说白了就是输出值 我们之前说了生成器是特殊的迭代器所以迭代器获取值的方法生成器同样适用即 next生成器对象生成器对象.next用for遍历 我们来看一个复杂点的例子 def fun1(L:list): #Llist 表明 L参数预期得到一个列表类型sum 0for i in L:sum iyield suml[1,4,3] print(list(fun1(l))) #list将结果转换为易看懂的列表#输出[1, 5, 8] 当l列表中第一个元素 1 到函数fun1中时sum1 返回1然后暂停 当l列表中第二个元素 4 到函数fun1中时sum14返回5然后暂停 当l列表中第三个元素 3 到函数fun1中时sum53返回8 而如果把上面的yield换成return的话最终只会输出一个1然后之间结束了记得删掉list因为yield返回的是迭代对象所以需要转化而return的话则不需要 4传值 前文我们说了不少获取值的方法其实这里还有个传入值的方法那就是send函数 格式生成器对象.send(value) 其中value这个参数可有也可无。但作用很不同。 当无参数时我们将value写作None即 生成器对象.sendNone 此时它和 next() 函数的功能完全相同如图 当有参数时它会将暂停的程序继续执行而 value 值会赋值给之前暂停 yield 。 def a():b yield hello #此时b是第一个yield的接受者c yield b #此时c是第二个yield的接受者yield cprint(b) #输出b的值print© #输出c的值yield 输出完毕d a()print(d.send(None)) print(d.send(1)) #将值1输送进去 print(d.send(2)) #将值2输送进去print(输出b、c的值) print(d.send(None)) 输出 hello 1 2 输出b、c的值 1 2 输出完毕 解释 执行print(d.send(None))时相当于next方法即将yield返回所以首先输出hello。注意此时b还没有被赋值便已经暂停了。 执行print(d.send(1))时值1被赋值给被暂停的yield所以成了b1 然后继续执行代码c yield b 此时遇到yield所以输出b的值1然后暂停。 执行print(d.send(2))将刚才暂停的yield值赋值为2所以成了c2然后继续执行到第三个yield语句输出c的值。 最后我们又用send检验了一下b和c的值发现确实是这样。 5停止运行 如果说我们想终止该生成器让其后续将无法再调用 next() 函数 或者 next() 方法启动执行否则抛出 StopIteration 异常 我们可以使用close函数 如图 三、装饰器 1定义 标准解释在Python中装饰器decorators是一种高级功能它允许你在不修改 原有函数或方法定义的情况下给函数或方法添加新的功能。装饰器本质上 是一个函数它接收一个函数作为参数并返回一个新的函数或修改原来的 函数。 用人话来说比如我们有一个a函数a函数中有 b功能代码、c功能代码、d功能代码等等。 我们不想直接去修改b功能代码因为c功能等可能跟b有关系要修改b的话可能整个a函数的各板块都要大改。 所以我们可以用装饰器说明一下即在别处写好一个n功能代码然后使用装饰器让n功能代码平替了b功能代码这样就不用大改了。 2格式 格式 须装饰的函数名 此时我们称那个被装饰的函数名为装饰器 除此之外装饰器函数一般需要函数闭包形式实现。 言内之意就是装饰器必须是函数嵌套那样的。 说一般是因为还可以使用类来实现装饰器后续文章再详细介绍 3用法 比如我们有n、c、d功能代码我们想计算这些代码的运行时间 如果没用装饰器我们可能会写 import time def a1(m):time1time.time()b功能代码time2time.time()time0time2-time1 return time0 def a2(m):time1time.time()c功能代码time2time.time()time0time2-time1 return time0 def a3(m):time1time.time()d功能代码time2time.time()time0time2-time1 return time0 print (a1(True)) print (a2(True)) print (a3(True)) 如果用上装饰器就会简单很多 import time def a(m):def n(): #函数嵌套即闭包time1time.time() #起始那会的时间m()time2time.time() #结束那会的时间time0time2-time1 #计算时间差return time0return na #启用装饰器会将b函数平替m def b(x):代码 print (a(True)) #输出平替后的运行b函数的时间a
def c(x):代码 print (a(True))a
def d(x):代码 print (a(True))