循环遍历字符串时是否保证执行顺序?

时间:2017-05-02 22:58:04

标签: python python-3.x for-loop order-of-execution

以下程序是否保证始终产生相同的输出?

border

5 个答案:

答案 0 :(得分:5)

是的,确实如此。这是因为str类型是不可变的序列。序列表示有限的有序元素集(请参阅参考指南的the Data model chapter中的序列)。

对于CPython解释器,CPython版本和Python实现的不同运行,保证对给定字符串(任何序列)的迭代始终以相同的顺序产生相同的结果。

答案 1 :(得分:3)

是。在内部,您拥有的字符串存储在c样式数组中(取决于解释器实现),作为一个连续的数据数组,可以创建iterator。为了使用for ... in ...语法,你需要能够在in之后对对象进行迭代。一个字符串提供它自己的迭代器,允许它在顺序中通过for语法进行解析订购为do all python sequences

对于列表,甚至是您创建的自定义对象也是如此。然而,并非所有可迭代的python对象都必须按顺序排列或表示它们存储的值,明确的例子是dictionary。字典迭代产生的键可能会或可能不是你添加它们的顺序(取决于你使用的python的版本,所以不要假设它的有序,除非你使用OrderedDict)而不是像list tuple和串。

答案 2 :(得分:3)

是的,确实如此。在字符串上,for循环按顺序迭代字符 。对于列表和元组也是如此 - for循环将按顺序迭代元素。

你可能会想到集和词典。这些不指定特定订单,因此:

return File(myStream, "application/pdf", "billing-summary.pdf");

将按照任意顺序进行迭代,以便您无法提前预测。

请参阅此Stack Overflow {{3}}以获取有关字典和集合顺序的保证的其他信息。

答案 3 :(得分:2)

是。 for循环是顺序的。

答案 4 :(得分:1)

是的,循环将始终从第一个字符开始逐个打印每个字母,并以最后一个字符结束。