当前位置: 首页 > 网络应用技术

python枚举():使用计数器简化周期

时间:2023-03-05 21:42:41 网络应用技术

  在Python中,FO循环通常写为迭代对象的循环。这意味着您不需要计算变量以访问项目。但是有时您确实需要一个变量,以更改每个循环迭代。您可以使用Python。

  枚举()同时从迭代对象中获得计数器和价值,而不是自己创建和增加变量!

  在本教程中,您会看到什么:

  开始吧!

  Forpython中的周期使用基于集合的迭代。这意味着Python将在每次Python时将迭代中的下一个项目分配给循环变量,如下所示:

  >>>

  在此示例中,值是一个带有三个字符串的列表,“ a”,“ a”,“ b”和“ c”。在python中,列表是一个迭代对象。周期,下一个按值设置的值。

  接下来,您将价值打印到屏幕上。收集的迭代优势在于它有助于避免其他编程语言中的常见错误。

  现在想象一下,除了值本身外,您还希望在每个迭代时在屏幕上打印项目的索引。处理此任务的一种方法是创建一个变量来存储索引并在每次迭代中更新它:

  >>>

  在此示例中,索引是一个整数,可以跟踪您在列表中的距离。在周期的每个迭代中,您打印索引和值的最后一步。

  >>>

  在此示例中,由于没有代码在周期结束时更新其值,因此索引保持在每次0的迭代处。尤其是对于长或复杂的周期,很难跟踪此错误。

  解决此问题的另一种常见方法是使用range()组合len()自动创建索引。这样,您不需要记住更新索引:

  >>>

  在此示例中,len(values)返回值的长度,即3. range()创建一个迭代器,从默认的启动值开始,直到达到len(值)。在这种情况下,索引变为您的周期变量。在周期中,您将当前值设置为项目。最后,您打印和值索引索引值

  在此示例中,可能发生的一个常见错误是您的价值忘记在每次迭代时都会更新。这类似于以前忘记更新索引的错误。这是该周期不被视为Pythonic的原因之一。

  在此示例上也有一些限制,因为值必须允许整数索引访问它。允许此访问的迭代对象称为Python中的序列。

  技术详细信息:根据Python文档,迭代对象可以一次返回成员的任何对象。根据定义,迭代对象支持迭代器协议,该协议指定了在使用迭代器中使用对象时如何返回对象成员.python有两种常用类型:

  1.序列

  2.发电机

  任何迭代对象都可以在for循环中使用,但只能通过整数索引访问序列。

  >>>

  在此示例中,您将将返回值分配给emumerate()为enum.enumerate()是一个迭代器,因此尝试通过索引访问其值将导致typerror。幸运的是,Pythonenmerate()允许您避免所有这些问题。

  您可以以几乎与原始迭代对象相同的方式以循环中的循环中枚举()。它不是直接在for循环中的迭代对象,而是将其放在枚举()上。您还必须稍微更改循环变量,如以下示例所示:

  >>>

  当您使用枚举()时,该函数返回两个周期变量:

  1.此计数的当前迭代

  2.当前迭代中项目的价值

  就像普通循环一样,周期变量可以任意命名。在此示例中使用计数和值,但是它们可以命名为i和/v或任何其他有效的python名称。

  使用枚举(),您不需要记住从迭代对象访问项目,也无需记住在周期结束时推进索引。所有内容都是由Python的魔术自动处理的!

  技术详细信息:使用计数和价值的两个周期变量,并使用逗号分开参数包装的示例。本文将进一步讨论此功能强大的Python功能。

  PythoneNumerate()有一个附加参数,您可以使用它来控制计数的起始值。默认值,起始值为0,因为Python序列类型开始从scratch.s scratch.s scratch.s换句话说,换句话说,当您想检索python sequence类型列表的第一个元素,您可以使用索引0:

  >>>

  您可以在此示例中看到对第一个元素a具有索引0的访问权限为0,将给出第一个元素。作为用户输出。在这种情况下,您可以使用start参数foreNumerate()更改启动计数:

  >>>

  在此示例中,您将启动= 1传递,然后从第一个循环开始1个迭代count.compare以上示例,其中开始的默认值为0,以查看是否可以找到差异。

  您应该枚举()使用循环中的计数和项目。请记住,枚举()将在每次迭代中添加一个。在接下来的几节中,您会看到枚举()。

  迭代物品的自然计数

  在上一节中,您可以看到如何使用枚举()with with with创建一个自然计数编号为用户打印。文件并告诉用户何时存在格式问题。

  注意:休息,也称为重组文本,是Python用于文档的文本文件的标准格式。您经常看到字符串,将其剩余格式作为python类和函数中的文档字符串。读取源代码的脚本文件并告诉用户格式称为linter,因为它们在代码中寻找隐喻范围。

  此示例来自rstlint.py。不必太担心此功能如何检查问题。关键是在现实世界中显示枚举()的使用

  这

  check_whitespace()接受一个参数,行,它是应评估的文件行。Check_whitespace()的第三行,枚举()用于通过行循环。此行将返回按LNO和LINE的缩写。由于不使用启动,LNO是从file.check_whitespace()中从头开始的计数器,然后多次检查不适当的字符:

  1.输入( 治愈

  2.制表()

  3.尾巴中的任何格子或制表

  当存在这些项目之一时,为用户check_whitespace()生成了当前的行号和有用的新闻。计数变量lno已添加到其中,以便它返回计数号而不是从scratch中返回索引。当用户rstlint。PY阅读了新闻,他们将知道要传输哪一行以及要修复的内容。

  项目状况陈述

  使用条件语句处理项目是一项非常强大的技术。有时您可能只需要在周期的第一次迭代中执行操作,如以下示例所示:

  >>>

  在此示例中,您将列表用作用户的仿真数据库。第一个用户是您的测试用户,因此您要打印有关用户的其他诊断信息,因为您已经设置了系统来测试用户,因此可以使用周期的第一个索引值,以打印额外的详细输出。

  您还可以将数学操作与计数或索引的条件相结合。例如,您可能需要从迭代对象返回项目,但前提是它们甚至具有索引。您可以使用枚举()执行此操作:

  >>>

  feast_items()接受一个命名的参数,该参数应该是Python可以穿越的某种类型的对象。首先,将值初始化为一个空列表。然后您创建一个使用set.iteraableenumerate.iteraableEnumerate()开始= 1 for loop for loop in 1 in 1,您检查其余的是使用2到零至2。因此,将项目添加到值中。最后,您返回值。

  您可以使用列表派生式在一行中执行相同的操作,而无需初始化空列表,以使代码更为Pythonic:

  >>>

  在此示例代码中,Feast_Items()使用列表衍生物而不是for循环将每个项目用索引作为列表中的咬合。

  您可以验证它是否在预期的10处工作是否可以从1到整数范围从1到整数范围。结果将为[2、4、6、8、10] :::::::::

  >>>

  正如预期的那样,从feast_items()返回木偶索引seq。当您使用整数时,这不是获得偶数的最有效方法。但是,现在您已经验证了它可以通过even_items()正常工作。

  >>>

  字符串是一个字符串,包含ASCII字母的所有26个小写字母。CALLFIES_ITEMS()和传递字母以返回字母中的替代对准交替。

  python字符串是一个可用于循环和整数索引和切片的序列。因此,对于字符串,您可以使用Square Brackets vev_items()更有效地实现相同的功能:

  >>>

  在此处使用字符串切片,您给出启动索引1,该索引1与第二个元素相对应。第一个结肠后,未竖起索引,因此python将转移到字符串的末端。A,2用于Python使用所有其他元素。

  但是,如您之前所见,生成器和迭代器无法索引或切成薄片,因此您仍然会发现它们很有用。继续前一个示例,您可以创建一个生成字母的生成字母,以根据需要在字母中生成字母:

  >>>

  在此示例中,您定义Alphabet()一个生成器函数。当循环中使用该函数时,它将在字母内生成字母。发电机或常规函数无法访问Python函数。如果您在第二行中尝试此功能,则会导致typerror。但是,您可以在周期中使用发电机函数,并且可以在最后一行中传递Alphabet()toeven_items()。示例是相同的。

  在最后几节中,当您看到何时以及如何枚举()播放您现在已经掌握的示例。

  为了更好地了解枚举()的原则,您可以使用Python实现自己的版本。

  1.接受迭代和起始计数值作为参数

  2.寄回包含当前计数值和迭代对象相关的项目的元组

  Python文档提供了一种符合这些规格的函数的方法:

  >>>

  my_enumerate()接受两个参数,序列和启动。默认值为0.在函数定义中,将n的值初始化为n值和序列的值。对于序列中的每个元素,您屈服控制返回到当前值n和elem。从本文中,您可以增加n为了准备下一次迭代。您可以在此处查看实际操作:我可以在此处查看实际操作:

  >>>

  首先,您可以创建要使用的四个季节的列表。下一步,您将显示带有SeasonsSemence的呼叫my_enumerate()以创建生成器对象。这是因为您使用收益率关键字将值发送到回调。

  最后,创建两个列表my_enmerate()。启动值保留为默认值。0在其中,开始更改为1。在这两种情况下,您最终将获得报价列表。每个金属组的第一个元素是计数的,第二个要素是该值的值季节。

  尽管您枚举()只能使用几行Python代码来实现等效函数,但实际的代码枚举()以C为编写。这意味着它超级快速有效。

  当您枚举()在for循环中使用时,您告诉Python使用两个变量,一个用于计数,另一个用于值本身。您可以使用称为参数包装的Python概念来做到这一点。

  参数包装的想法是,可以根据序列的长度将金属组分为几个变量。例如,您可以将包含两个元素的元组解开为两个变量:

  >>>

  首先,您创建一个包含两个元素的元组,即10和“ A”。然后将元组在第一个_ELEMAND中解开second_elem,并从元组中分配一个值。

  当您调用枚举()并传递一系列值时,python返回迭代器。当您向迭代器提出下一个值时,它将生成一个包含两个元素的元组。元素是您通过的顺序中的值:

  >>>

  在此示例中,您创建了一个带有两个元素“ a”和“ b”的列表。当您打印它时,enum_instance,您会看到它是带有特定内存地址的枚举()的实例。

  然后,使用python的build()函数从enum_instance返回的第一个值。enum_instance。它包含第一个元素值,其中包含第一个元素值,即“ a”。

  Next()再次致电ENUM_INSTANCE,以生成另一个成本组。这是第二个元素“ b”,“ b”,“ b”。最终,因为没有更多的值返回,呼叫()会再次增加。StopiterationEnum_instance

  当在for循环中使用迭代对象时,python将在每次迭代中自动调用,直到由Startration引起。Python将从迭代对象检索到的值分配给周期变量。

  如果迭代对象返回元组,则可以使用参数将元素的元素解开为多个变量。您是通过在本教程之前使用两个循环变量来完成的。

  另一次您可能已经看到,使用for循环解开参数使用构建的-in zip(),它允许您同时迭代两个或多个序列。在每次迭代中,zip()返回一个元-group,从所有传输序列中收集元素:

  >>>

  通过使用zip(),您可以同时遍历第一个,第二和第三。

  您可以使用嵌套参数组合zip()和枚举():

  >>>

  在此示例的周期中,您将zip()嵌套在枚举()中。这意味着每次迭代时,枚举()会生成另一组,它包含元素zip()从参数到。要解压缩嵌套结构,您需要从zip()中添加括号。

  还有其他方法可以模拟枚举()和zip()。一种方法使用itertools.count()返回默认从头开始的连续整数。您可以更改上一个示例以使用itrtools.counts.count():

  >>>

  在此示例中,您可以使用itertools.count()使用单个zip()调用来生成仪表和无嵌套参数拆卸软件包的周期变量。

  当您需要计算和迭代值时,PythoneNumerate()允许您编写pythonic for循环。它还为您提供更改计数器的起始值的选项。

  在本教程中,您是如何学到的:

  您还会在一些实际代码中看到枚举(),包括在Cpython代码存储库中。

  作者:Yuchuan。