我从Python文档中读到了对象的内置迭代方法:
它对__iter__方法的说明如下:
返回迭代器对象。对象需要支持下面描述的迭代器协议。
但是,在我看来似乎不是这样的,如果我让__iter__方法返回一个像'abc'那样的字符串,我会得到一个类型错误:TypeError: iter() returned non-iterator of type 'str'但是我们知道,字符串是可迭代的对象,为什么python会把它当作不是迭代对象呢?
我可以像这样解决这个问题:
def __iter__(self):
return 'abc'
在讨论主要问题之前,我首先要问:当您试图检查Python中的list是否为空时,下面的四种情况是否会产生不同的布尔值?
if not []if not len([])if len([]) == 0if len([]) is 0
如果不是,哪种方法是检查这个布尔值的最快方法,为什么?-也就是说,每一种情况下到底发生了什么?差别可能很小,但我很好奇在执行过程中这些差异会有什么不同。
如何在迭代过程中更改python迭代器?
例如:
for i in range(10):
print i
i = 5
这些指纹:
0
1
...
9
我想打印:
0
5
5
5
...
编辑:对不起,这个问题给人们带来了困惑。我感兴趣的是,为什么当我试图在for循环期间更改迭代器时,for循环会在下一次迭代中忽略它。
其他人已经提交了一个答案,澄清了我的困惑。range创建一个列表,然后for循环将迭代器分配给列表中的下一个变量。
我对编码和python还比较陌生,我正试图把我的头脑集中在一些概念上。我正在努力解决的一个问题是拆分()函数,以及为什么这两段代码产生两个不同的输出
y = ["hello\n", "world\n", "python\n"]
x = [line.strip() for line in y]
print(x)
和
y = ["hello\n", "world\n", "python\n"]
for line in y:
x = [line.strip()]
print(x)
第一段代码产生的
解释我的问题的最好方法是举个例子:
example.py:
class A(object):
integers = [1, 2, 3]
singles = [i for i in integers]
class B(object):
integers = [1, 2, 3]
pairs = [(i, j) for i in integers for j in integers]
当我在Python2下运行它时,它工作得很好,但在Python3下,我得到了B类的NameError (而不是A类):
$ python example.py
Traceback (m
我正在学习Python的数据结构和算法。对于我正在使用的教科书,我重新讨论了一个我从未理解过的问题。对于下面的用户构建的Range类,为什么像x在范围(0,5)中工作呢?本质上,为什么索引会自动移动?没有对getitem或len的调用。
我已经阅读了Python教程和类部分,但还没有弄清楚这一点。
class Range:
"""A class that mimic's the built-in range class."""
def __init__(self, start, stop=None, step=1):
&
我从python2.7.8的官方文档中学到了如何使用迭代器和生成器。我有个与好奇心有关的问题。
it = iter("abcde")
print it
>>> <iterator object at 0x7ff4c2b3bad0>
class example1():
def __init__(self, word):
self.word = word
self.index = len(word)
def __iter__(self):
for x in range(self.inde
为什么python 2和python 3中的代码输出是不同的?
class A:
def m(self):
print("m of A called")
class B(A):
pass
class C(A):
def m(self):
print("m of C called")
class D(B,C):
pass
x = D()
x.m()
实际产出:
$ python diamond1.py //python 2 used for the code
m of A call
下面的代码在Python3 (3.5.2)中运行良好,但在Python2中引发了一个AttributeError: 'super' object has no attribute '__eq__' (2.7.12)
class Derived(int):
def __eq__(self, other):
return super(Derived, self).__eq__(other)
a, b = Derived(1024), Derived(1729)
print(a == b)
Python 3的行为是预期的。我正在努力理解为
对于这个python问题,我在一个参数中接受一个int,这是我要追加的列表的最大长度。从int值1开始,我希望遍历列表,并追加两个线性值,直到达到最大长度。
我得到了一个无限循环或类似的东西;我没有收到任何值,但python仍在处理中。
这就是发生无限循环的代码,想知道为什么吗?代码:
def dbl_linear(n):
lst_u =[1]
while len(lst_u)<=n:
for i in lst_u:
lst_u.append(2*i+1)
lst
我需要在Python中模拟枚举,并通过编写如下类来实现:
class Spam(Enum):
k = 3
EGGS = 0
HAM = 1
BAKEDBEANS = 2
现在,我想用以下语法测试某个常量是否是特定Enum派生类的有效选择:
if (x in Foo):
print("seems legit")
因此,我尝试创建一个"Enum“基类,其中我覆盖了__contains__方法,如下所示:
class Enum:
"""
Simulates an enum.
"
如果我们使用Collections.synchrnizedList(集合c),那么同步遍历块的目的是什么?
我正在使用Collections.synchronizedList()方法来获取arrayList的同步版本,那么为什么我应该将数组列表的遍历放在一个同步的块中呢?
所以,我正在学习一个关于如何使arraylist同步的教程。我遇到了下面这行代码。
导入java.util.*;
class GFG
{
public static void main (String[] args)
{
List<String> list =
我已经知道Iterator包含一个扩展ZipEntry的对象集合,但我无法在没有错误的情况下执行这种向下转换:
ZipFile zf = new ZipFile("a.zip");
// Type mismatch: cannot convert from Iterator<capture#4-of ? extends ZipEntry> to Iterator<ZipEntry>
Iterator<ZipEntry> it = zf.entries().asIterator();
向下转换在Java中不是错误:
String a =
这里的初学者,试着理解使用Python3的循环。请有人在下面的代码中解释为什么for循环外部的值为5?如果在for循环之外调用一个变量,Python只返回最大值吗?
for x in range(0,6):
print(x) #here is the expected output of (0,1,2,3,4,5)
print(x) #this just returns 5, why?
我有两个列表,我想使用for循环创建生成商。具体地说,我希望拥有.5、.25和.125,并且按照这个顺序。当然,我可以手动获取这些值并确定商,但我是从第一次尝试学习Python的人的角度来看待这一问题的。我读过其他一些关于for循环的文章,但我不明白为什么会出现下面的结果: index error: list index out of range。因此,我不仅希望修改这段代码,还希望得到一个合理的解释,说明为什么会有这样的错误。 x=[2,4,16]
y=[4,16,128]
for i in y:
y[i]/x
我遇到了一个Python行为,这对我来说似乎很奇怪,我很想了解它。
通常,我期望函数在传递相同的对象时总是返回相同的值。在CPython中,它对应于对象在内存中的位置。
当我创建一个对象并应用id时,结果总是相同的,但是当我在对象的绑定方法上使用id时,结果会发生变化。为什么会这样呢?每次我获得方法属性时,是否都会创建一个新方法?
我首先在IPython中注意到了这一点,但是要制作一个显示相同行为的脚本要困难得多。也许这在一定程度上是IPython的问题?
我确实写了一个小块,可以部分地重新创建这种行为。
# Create an object
class Foo(object):
d
所以我最近在我的python类中学习了迭代器协议,我被告知__iter__(self)方法应该总是返回一个新的迭代器,而不是self。在流利的Python一书中,它谈到了在迭代器中返回self,所以我不确定为什么我的导师告诉我不能使用self作为返回值。 这是我们在考试中的例子,我因为使用self而不是FileNamesIterator而失去了分数。 class FileNamesIterator:
"""
Iterator that iterates over all the file names in the
FileNamesIterab