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

广州网站建设优化公司哪家好建筑行业征信查询平台

广州网站建设优化公司哪家好,建筑行业征信查询平台,低价建设网站,网站设置不能通过链接访问文章目录一、概述二、生成器1#xff09;生成器和迭代器的区别2#xff09;生成器创建方式1、通过生成器函数创建2、通过生成器表达式创建3#xff09;生成器表达式4#xff09;yield关键字5#xff09;生成器函数6#xff09;return 和 yield 异同7#xff09;yield的使… 文章目录一、概述二、生成器1生成器和迭代器的区别2生成器创建方式1、通过生成器函数创建2、通过生成器表达式创建3生成器表达式4yield关键字5生成器函数6return 和 yield 异同7yield的使用方法8for与next9send的使用三、协程进阶1生成器与协程关系2协程实现原理3协程实现方式一、概述 生成器是一种在 Python 中的迭代器生成器。生成器是一个函数它生成一个迭代器。当生成器函数被调用时它不会立即执行而是返回一个生成器对象该对象可以被用于迭代。生成器可以利用 yield 语句在函数内部生成值并在函数调用者处接收这些值。 协程是一种高效的、内存友好的、线程内的并发技术它可以让您在单个线程内并发地执行多个任务。协程是通过使用 async 关键字实现的并可以在 Python 中的 asyncio 库中使用。与线程不同协程不需要额外的系统线程因此它们比线程更高效、更灵活。 在简单的说法生成器用于生成一系列的值而协程用于在单个线程中并发执行多个任务。 二、生成器 生成器表达式本质上就是一个迭代器是定义迭代器的一种方式是允许自定义逻辑的迭代器。生成器使用generator表示。 生成器可以使用 for 循环或 next() 函数来遍历。当生成器对象被创建时它会保存函数的当前状态并在每次调用 next() 或 for 循环时从当前状态开始执行直到遇到 yield 语句为止。 当生成器遇到 yield 语句时它会生成当前的值并保存函数的当前状态以便下次调用时可以从该状态开始继续执行。当生成器再次被调用时它会继续执行从上次暂停的地方开始直到遇到下一个 yield 或者 return 语句或者函数结束为止。 下面是一个生成器函数的示例 def my_generator():for i in range(3):yield igen my_generator() for i in gen:print(i)输出 0 1 2从上面的示例可以看出生成器的工作原理是通过保存函数的当前状态以便每次调用时从当前状态开始继续执行并使用 yield 语句生成值的。 1生成器和迭代器的区别 生成器和迭代器是 Python 中的两个相关的概念但是有一些区别 定义生成器是一种特殊的迭代器它可以生成一系列的值而迭代器是一个对象它实现了 iter 和 next 方法可以返回一个值的序列。 创建生成器可以通过定义生成器函数在函数内部使用 yield 语句生成值迭代器可以通过定义迭代器类在类中实现 iter 和 next 方法。 效率生成器函数在生成值时只需要暂停函数的执行因此它具有更高的效率迭代器类需要维护一个对象状态因此效率较低。 用途生成器适用于生成大量的数据因为它可以在生成数据时保存函数的状态从而避免占用大量内存迭代器适用于处理少量数据因为它需要创建一个对象维护状态。 因此在实际开发中我们可以根据数据量和处理效率的需求来选择使用生成器或迭代器。 2生成器创建方式 在 Python 中可以通过以下两种方式创建生成器 1、通过生成器函数创建 通过在函数中使用 yield 语句可以将函数变为生成器函数每次调用生成器函数时可以生成一个生成器。 例如 def generator_example():yield 1yield 2yield 3gen generator_example() print(next(gen)) print(next(gen)) print(next(gen))2、通过生成器表达式创建 生成器表达式是一种简写的生成器创建方式它基于列表推导式的语法。 例如 gen (x for x in range(3)) print(next(gen)) print(next(gen)) print(next(gen))以上是生成器的两种创建方式您可以根据实际需求选择使用。 3生成器表达式 生成器表达式是一种简写的生成器创建方式它基于列表推导式的语法。 例如 gen (x for x in range(3)) print(next(gen)) print(next(gen)) print(next(gen))在上面的例子中我们使用生成器表达式创建了一个生成器该生成器生成从 0 到 2 的整数。然后我们使用 next() 函数逐个迭代生成器中的值。 4yield关键字 yield 关键字是 Python 中的一个关键字用于生成器函数中。它允许一个函数在生成值时暂停其执行以便在稍后恢复其执行并生成下一个值。这使生成器函数成为一种特殊的函数可以按需生成一系列值。 5生成器函数 生成器函数是 Python 中特殊的函数该函数可生成一个生成器。与普通函数不同生成器函数可以在每次被调用时生成一个生成器并在生成器中生成一系列值。 生成器函数通过使用 yield 语句创建生成器。每当函数执行到 yield 语句时生成器函数的执行就会暂停并返回 yield 语句后面的值。当再次调用生成器函数时它将从上次暂停的位置继续执行直到遇到下一个 yield 语句或者函数返回。 例如 def generator_example():yield 1yield 2yield 3gen generator_example() print(next(gen)) print(next(gen)) print(next(gen))在上面的例子中我们定义了一个生成器函数 generator_example该函数通过使用 yield 语句生成了三个整数1、2 和 3。然后我们通过调用该函数并将其结果分配给生成器 gen 来创建生成器并使用 next() 函数逐个迭代生成器中的值。 6return 和 yield 异同 return 和 yield 都是用于在函数中终止执行的关键字但是它们的作用是不同的。 return当函数调用 return 时函数立即终止执行并返回一个值如果存在给调用者。该值通常表示函数的最终结果。 yield当生成器函数调用 yield 时它仅暂停其执行并生成一个值但不终止函数。在下一次调用该生成器时它将恢复其执行直到遇到下一个 yield 或终止函数。 因此yield 是生成器函数的一个关键字可以使生成器生成一系列值而 return 是一般函数的一个关键字它返回一个值并终止函数。 7yield的使用方法 yield 关键字用于生成器函数。在生成器函数中我们可以使用 yield 关键字生成一系列值而无需暂停整个函数。 例如以下是使用 yield 关键字的简单生成器函数的例子 def simple_generator():yield 1yield 2yield 3yield 4yield 5gen simple_generator() print(next(gen)) # Output: 1 print(next(gen)) # Output: 2 print(next(gen)) # Output: 3 print(next(gen)) # Output: 4 print(next(gen)) # Output: 5我们可以使用 for 循环或 next() 函数迭代生成器中的值如下所示 for value in simple_generator():print(value)# Output: # 1 # 2 # 3 # 4 # 5【注意】生成器函数只能迭代一次所以请确保在使用生成器函数时存储其返回值。 8for与next 在使用生成器时我们可以使用两种不同的方法来迭代生成器中的值for 循环和 next() 函数。 for 循环通过使用 for 循环我们可以在生成器中迭代所有值。例如 def simple_generator():yield 1yield 2yield 3for value in simple_generator():print(value)# Output: # 1 # 2 # 3next() 函数通过使用 next() 函数我们可以手动控制生成器的迭代。例如 def simple_generator():yield 1yield 2yield 3gen simple_generator() print(next(gen)) # Output: 1 print(next(gen)) # Output: 2 print(next(gen)) # Output: 3 【注意】在生成器迭代完所有的值后再使用 next() 函数将导致抛出 StopIteration 异常。因此在使用 next() 函数时请确保捕获该异常。 9send的使用 send() 方法是生成器的一种方法它允许我们在生成器函数内部向生成器发送数据。该方法允许生成器接收外部数据并使用这些数据生成结果。 在使用 send() 方法时我们需要在生成器函数中使用 yield 表达式来接收数据如下所示 def simple_generator():result yieldprint(Received data:, result)gen simple_generator() next(gen) gen.send(Hello, World!) # Output: Received data: Hello, World!【注意】第一次使用 send() 方法之前我们需要调用 next() 函数以启动生成器函数。此外使用 send() 方法将导致抛出 StopIteration 异常因此请确保在使用该方法时进行异常处理。 三、协程进阶 协程Coroutine是一种编程技巧用于在多任务环境中实现轻量级的任务切换。与线程不同协程不需要创建新的系统级线程并且消耗的资源也比线程更少。因此协程可以比线程更高效地完成任务。在我上篇的文章已经讲解了IO模型和协程介绍 1生成器与协程关系 生成器和协程是相关但有所不同的概念。生成器是一种特殊的迭代器可以生成一系列的值每次迭代时只返回一个值。生成器可以使用 yield 关键字来暂停执行并在下一次调用时继续执行。 协程是一种并发编程技术可以在单一线程中实现多个任务的并行执行。与线程不同协程不需要创建新的系统级线程并且消耗的资源也比线程更少。协程可以使用 yield 关键字来暂停执行并在下一次调用时继续执行。 因此生成器可以用于实现协程但它们不是协程的必需条件。在 Python 中可以使用 asyncio 库来实现协程该库不需要使用生成器。不过在实现协程时生成器确实可以作为一种有效的工具帮助开发者实现协程的暂停和恢复。 2协程实现原理 协程的实现主要是通过一种叫做 “协程调度器” 的技术实现的这种技术能够在不创建新的线程的情况下在单一线程中按需切换协程的执行。协程调度器会管理当前正在运行的协程以及等待执行的协程并在每个协程执行完后切换到下一个协程。 3协程实现方式 在 Python 中可以使用 asyncio 库来实现协程。协程函数可以使用 async 关键字标记表示该函数是一个协程函数。在协程函数中可以使用 await 关键字等待其他协程完成从而实现协程的切换。 在 Python 中可以使用 asyncio 库来实现协程。下面是一个简单的例子 import asyncioasync def task1():print(Task 1 is running)await asyncio.sleep(1)print(Task 1 is complete)async def task2():print(Task 2 is running)await asyncio.sleep(1)print(Task 2 is complete)async def main():task1_coro task1()task2_coro task2()await asyncio.gather(task1_coro, task2_coro)if __name__ __main__:asyncio.run(main())上面的代码中task1 和 task2 是两个协程函数它们可以在单独的任务中并行执行。main 函数是协程的入口在这个函数中我们创建了两个协程的对象 task1_coro 和 task2_coro并通过 asyncio.gather 函数将它们并行执行。最后我们通过 asyncio.run 函数启动了整个协程。 运行上面的代码可以得到以下输出 Task 1 is running Task 2 is running Task 1 is complete Task 2 is complete可以看到协程中的任务是并行执行的因此我们可以充分利用 CPU 的资源提高程序的执行效率。 Python 高级编程之生成器与协程进阶讲解就先到这里了有任何疑问欢迎给我留言后续会持续更新相关技术文章请小伙伴耐心等待也可以关注我的公众号【大数据与云原生技术分享】进行深入技术交流~
http://www.hkea.cn/news/14274239/

相关文章:

  • php网站开发api做网站数据分析架构
  • 山西网站制作公司哪家好个人网站要不要备案
  • 科技网站建设分析seo技术教学视频
  • 门户网站制作需要多少钱公司没有销售网站怎么做业务
  • 嘉禾手机网站建设宣传片制作合同模板
  • 中国做木线条的网站网站备案代码
  • 为什么要建设档案网站如何将图片生成链接
  • 苏州网站制作好的公司wordpress关闭多站点
  • 养殖网站源码蔬菜网站建设
  • php网站开发外文安装wordpress空白
  • 中国网站开发用盗版犯法网站外链建设的八大基本准则
  • 查询域名是否做过网站西安做网站建设的公司
  • 网站收录了怎么做排名中国八冶建设集团网站
  • 外贸人常用的网站包头网站建设公司
  • 来广营做网站公司商丘网格通
  • 做网站那个搜索引擎好自己做网站和推广
  • 苏州住房建设建局官方网站青海城乡住房和建设厅网站
  • 陶瓷企业 瓷砖地板公司网站建设淘宝联盟怎么自己做网站
  • 门户网站建设公开情况自查做网站提成
  • 重庆市渝兴建设投资有限公司网站北京王府井图片
  • 怎样做淘宝优惠券网站wordpress趣味插件
  • 网站设计为什么要域名河北石家庄旅游网页设计
  • 自己网站怎么做百度推广设计公司品牌策划
  • 做视频网站是什么职业1688做网站费用
  • 成都市微信网站建网站建设开发服务费
  • 简答电子商务网站建设流程域名在线查询
  • 福田网站 建设seo信科个人作品展示网站
  • 佛山企业建网站千锋教育培训机构就业率
  • 网站设计与建设的公司手工做皮具国外的网站
  • 领导视察网站建设中国招生代理网