Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当在for循环中用作迭代器时,将列表项称为什么?_Python_Terminology - Fatal编程技术网

Python 当在for循环中用作迭代器时,将列表项称为什么?

Python 当在for循环中用作迭代器时,将列表项称为什么?,python,terminology,Python,Terminology,我不确定在下面的for循环中如何命名n。有一个术语吗 for n in [1,2,3,4,5]: print i 而且,列表本身是for循环的迭代器,我说的对吗 你举的例子是 n称为循环变量 列表扮演的角色更难命名 事实上,在与@juanpa.arrivillaga进行了一次有趣的对话之后,我得出结论,对于这个语法元素,没有一个明确正确的正式名称,也没有一个常用名称 话虽如此,我确实认为如果你在一个句子的上下文中把它称为循环迭代器,每个人都会知道你的意思 在这样做的过程中,您可能会让自

我不确定在下面的for循环中如何命名n。有一个术语吗

for n in [1,2,3,4,5]:
    print i

而且,列表本身是for循环的迭代器,我说的对吗

你举的例子是

n称为循环变量

列表扮演的角色更难命名

事实上,在与@juanpa.arrivillaga进行了一次有趣的对话之后,我得出结论,对于这个语法元素,没有一个明确正确的正式名称,也没有一个常用名称

话虽如此,我确实认为如果你在一个句子的上下文中把它称为循环迭代器,每个人都会知道你的意思

在这样做的过程中,您可能会让自己或其他人感到困惑,因为处于该位置的语法元素实际上不是迭代器,而是集合或松散的集合,而是参考文章中的定义中的某种iterable

我想之所以没有这个名字,一个原因是我们几乎不需要在一句话中提到它。另一个原因是,它们可能出现在该位置的元素类型差异很大,因此很难用标签安全地覆盖所有元素

当n被称为循环变量时,列表绝对不是迭代器。它是iterable对象,即和iterable,但它不是迭代器。iterable本身可能是迭代器,但并不总是如此。也就是说,迭代器是可迭代的,但并非所有的可迭代都是迭代器。在列表的情况下,它只是一个iterable

它是一个iterable,因为它实现了一个_iter__)方法,该方法返回一个迭代器:

从表中可以看出:

一种能够一次返回一个成员的对象。例子 iterables包括所有序列类型,如list、str和tuple 还有一些非序列类型,如dict、文件对象和 使用_uiter或_getitem方法定义的任何类。 Iterables可用于for循环和许多其他需要 序列需要zip、map等。。。。当一个iterable对象 作为参数传递给内置函数iter,它返回 对象的迭代器。此迭代器适用于在 一组值。使用iterables时,通常不需要 调用iter或自己处理迭代器对象。for声明 这样做会自动为您创建一个临时的未命名变量 在循环期间保持迭代器

因此,请注意:

>>> x = [1,2,3]
>>> iterator = iter(x)
>>> type(iterator)
<class 'list_iterator'>
>>> next(iterator)
1
>>> next(iterator)
2
>>> next(iterator)
3
>>> next(iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
相当于:

iterator = iter(some_iterable)
while True:
    try:
        n = next(iterator)
        # do something
    except StopIteration as e:
        break
迭代器通过调用对象的_iter _方法返回,也实现了通常返回自身的_iter _方法,但它们也实现了一个_next _方法。因此,检查某个对象是否是iterable的一种简单方法是查看它是否实现了下一个方法

这是:

>>> for c1 in my_list:
...   for c2 in my_list:
...     print(c1,c2)
... 
a a
a b
a c
b a
b b
b c
c a
c b
c c
>>> 
迭代器的行为方式几乎相同,因此我仍然可以这样做:

>>> it = iter(my_list)
>>> for c in it:
...   print(c)
... 
a
b
c
>>> 
但是,迭代器不支持多次迭代。您可以将自己的迭代器设置为支持多次迭代的迭代器,但通常情况下,迭代器不支持:

>>> it = iter(my_list)
>>> for c1 in it:
...   for c2 in it:
...     print(c1,c2)
... 
a b
a c
为什么呢?请回忆一下在引擎盖下使用for循环的迭代器协议所发生的事情,并考虑如下:

for n in some_iterable:
    # do something
>>> my_list = ['a','b','c','d','e','f','g']
>>> iterator = iter(my_list)
>>> iterator_of_iterator = iter(iterator)
>>> next(iterator)
'a'
>>> next(iterator)
'b'
>>> next(iterator_of_iterator)
'c'
>>> next(iterator_of_iterator)
'd'
>>> next(iterator)
'e'
>>> next(iterator_of_iterator)
'f'
>>> next(iterator)
'g'
>>> next(iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> next(iterator_of_iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> 

我看到它被称为一个项目。变量名通常取决于所迭代的内容,例如文件中的行、行中的行等@linusg我怀疑基本编程书是否指定了这些元素。仅举一个例子,没有命名它们。@GreenAsJade-同意,但了解Python中for循环的工作原理将是一个很好的开始。稍后,他可以学习所有这些花哨的名字,如迭代器等。谢谢大家的帮助。@linusg我相信我确实理解for循环是如何工作的,但我正试图向我班上的其他学生解释它的用法,因此能够给它起一个独特的名称是非常有用的,这样就不会将它与其他概念混淆。循环变量是程序员经常谈论的话题,但我不知道是否有官方的Python术语。注意,在Python中可以有多个循环变量:对于n,enumeratea_列表中的item,对于k,v,在a_dict.items中,对于x,y,z,在coords_列表中等等。注意:我认为您可以将列表称为迭代器,但循环迭代器更清晰,这是比较可取的,因为迭代器是一个重载严重的术语。列表不是迭代器。正如您在回答的注释中所讨论的,列表不是python迭代器,但它是这个基于迭代器的for循环构造中的循环迭代器。我想您混淆了迭代器这一不幸重载术语的两种用法。Python有一个迭代器的正式定义,列表确实不是其中之一。然而,在基本的分类术语中,Pythonfor循环是一个简单的循环。这个构造的组件是循环变量和循环迭代器。不幸的是,存在这些不同的定义/用法。。。但他们确实如此。而后一种方法符合OP的目的。你还没有提供
d你的回答中有一个替代方案。@GreenAsJade对不起,但我仍然不同意。来自您自己的链接:它的特点通常是使用隐式或显式迭代器,其中循环变量接受序列或其他数据集合中的每个值。在Python for each构造中,循环迭代器是隐式的。我们同意的循环变量,列表是序列或其他数据收集。这允许其他情况。在Python中,我们还可以使用列表。我同意这不是一个理想的术语冲突,但据我所知,这是问题的答案。我不知道这个构造有任何其他分类法。@GreenAsJade另外,如果您遵循到的链接,它的内容是:在计算机编程中,迭代器是一个使程序员能够遍历容器(特别是列表)的对象。迭代器不是容器,它是一个支持遍历的对象。显然不是。然而,它在基于迭代器的for循环构造中扮演着迭代器的角色。这是它正在扮演的角色的名称。Python恰好支持在该角色中放置列表。
>>> it = iter(my_list)
>>> for c1 in it:
...   for c2 in it:
...     print(c1,c2)
... 
a b
a c
>>> my_list = ['a','b','c','d','e','f','g']
>>> iterator = iter(my_list)
>>> iterator_of_iterator = iter(iterator)
>>> next(iterator)
'a'
>>> next(iterator)
'b'
>>> next(iterator_of_iterator)
'c'
>>> next(iterator_of_iterator)
'd'
>>> next(iterator)
'e'
>>> next(iterator_of_iterator)
'f'
>>> next(iterator)
'g'
>>> next(iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> next(iterator_of_iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> 
>>> id(iterator)
139788446566216
>>> id(iterator_of_iterator)
139788446566216