我想从字典/列表中为每个项目执行一些功能。我试过这样做,但它没有给出预期的结果。这是代码。
class GroupDict(dict):
def iteritems(self):
# do some operation for every member in dict
print "in __iter__"
return super(GroupDict, self).iteritems()
a = GroupDict()
a['a'] = 0
a['b'] = 1
for key in a.iteritems():
print key
为此我得到输出
in __iter__
('a', 0)
('b', 1)
但预计是
in __iter__
('a', 0)
in __iter__
('b', 1)
我不想在for循环中进行操作,但是我在类中提到的任何内容都应该为每个成员执行。请帮帮我。
答案 0 :(得分:2)
iteritems()
仅在循环实际开始之前被调用一次。
让我们看看为什么。这个循环:
for x in EXP:
do_something()
大致翻译为:
it = iter(EXP)
while True:
try:
x = next(it)
except StopIteration:
break
do_something()
如果您想为每位成员做些事情,yield
iteritems()
来def iteritems(self):
for k, v in super(GroupDict, self).iteritems():
print "doing something with %s / %s" % (k,v)
yield k, v
更容易做到您想要的事情:
import sys
from PyQt5 import QtWidgets
app=QtWidgets.QApplication(sys.argv)
window=QtWidgets.QWidget()
vbox=QtWidgets.QVBoxLayout()
text_1=QtWidgets.QLineEdit()
text_2=QtWidgets.QLineEdit()
run_btn=QtWidgets.QPushButton("run")
text_3=QtWidgets.QLineEdit()
def main():
data_1=text_1.text()
data_2=text_2.text()
text_3.setText(str(data_1)+(data_2))
run_btn.clicked.connect(main)
vbox.addWidget(text_1)
vbox.addWidget(text_2)
vbox.addWidget(run_btn)
vbox.addWidget(text_3)
window.setLayout(vbox)
window.show()
print text_1.text()
sys.exit(app.exec_())