在做图形界面,界面里有三个ListWidget,每个ListWidget都有一个名字,假如分别叫a,b,c.现在就是通过接收一个标志然后对相应的ListWidget做添加item等一系列的操作我目前代码大概是这样的
# mode是标志,emails是邮件数据
def addQList(self,emails,mode):
if mode == 'a':
for subject in emails:
if subject != '':
abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
self.a.addItem(abstractContent)
...其他操作...
elif mode == 'b':
for subject in emails:
if subject != '' and subject not in self.isSent:
self.isSent.update({subject:emails[subject]})
abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
self.b.addItem(abstractContent)
...其他操作...
elif mode == 'c':
for subject in emails:
if subject != '' and subject not in self.isReceived:
self.isReceived.update({subject:emails[subject]})
abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
self.c.addItem(abstractContent)
...其他操作...
对标志做if判断后,就分别对相应ListWidget做操作,但是因为操作都是一样的,只是操作对象不一样,我知道这么写代码会很冗余。所以想问一下有没有简单一点的方法,就是有没有类似这样的方法:我不是获取到标志mode了吗,如果mode等于a,有没有一种方法直接操作self.mode,等同于操作self.a的感觉?Python里可以这样吗?或者说有什么方法可以做到这种效果
4 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
这个问题挺有意思的,这也是我为什么特别喜欢python的原因之一.
函数本质,或者对于python来说,对象,本身就是一段内存中的二进制的空间而已.函数名实际上也是人附加给它的.那么,函数名如何映射到那段内存空间中呢.
额,感觉会讲的很复杂.
简单来说
eval()
可以,虽然这种做法比较不推荐
RISEBY
TA贡献1856条经验 获得超5个赞
题主,你应该这样
for subject in emails:
if mode == 'b':
if subject in self.isSent:
continue
if mode == 'c':
if subject in self.received:
continue
self.isSent.update({subject:emails[subject]})
abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
self.addItem(abstractContent, mode)#mode穿进去
...其他操作...
添加回答
举报
0/150
提交
取消