class SomeClass(object):
def __init__(self, key_text_pairs = None):
.....
for key, text in key_text_pairs:
......
......
x = SomeClass([(1, "abc",), (2, "fff",)])
即使我按照上面的语句传递列表, init 中key_text_pairs的值也为None。为什么会这样?
我想编写一个通用的 init ,它可以获取所有迭代器对象......
由于
编辑:oops ..我想以元组的形式传递键值对...我只是想创建一个玩具示例..我仍然看到相同的行为
答案 0 :(得分:2)
首先,当你说for key, text in key_text_pairs
时,你暗示列表中有元组。我完全按照它的方式测试了你的代码,这就是发生的事情。
将x = SomeClass([1, 2, 3])
更改为x = SomeClass([(1, 1.0), (2, 2.0), (3, 3.0)])
并查看是否有帮助
干杯
答案 1 :(得分:0)
所以只看那段代码,你发布的是你想要的东西吗?具体来说,如果您传入的列表如下:
[1, 2, 3]
然后我认为你不想尝试像这样提取它:
for key, text in key_text_pairs
您可以将单个整数列表提取为一对值,如键/文本。
如果我在发布时运行该代码,我会得到一个堆栈跟踪:
Traceback (most recent call last):
File "test.py", line 6, in <module>
x = SomeClass([1, 2, 3])
File "test.py", line 3, in __init__
for key, text in key_text_pairs:
TypeError: 'int' object is not iterable
你需要做这样的事情(一次提取一个值):
class SomeClass(object):
def __init__(self, key_text_pairs = None):
for key in key_text_pairs:
....
x = SomeClass([1, 2, 3])
或者,如果要保持代码相同,原始列表需要更改为持有值对:
x = SomeClass([('a',1),('b',2),('c',3)])
答案 2 :(得分:0)
你可以发布追溯吗?
这是我运行代码时得到的结果:
In [1]: class SomeClass(object):
...: def __init__(self, key_text_pairs = None):
...: for key, text in key_text_pairs:
...: print "key:", key, "text", text
...:
...:
In [2]: x = SomeClass([1,2,3])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/ryan/<ipython console> in <module>()
/home/ryan/<ipython console> in __init__(self, key_text_pairs)
TypeError: 'int' object is not iterable
In [3]: x = SomeClass(zip('abc', [1,2,3]))
key: a text 1
key: b text 2
key: c text 3