【发布时间】:2011-12-28 11:19:10
【问题描述】:
我正在使用这样的构造来测试是否按下了所需的键:
def eventFilter(self, tableView, event):
if event.type() == QtCore.QEvent.KeyPress:
key = event.key()
if event.modifiers() in (QtCore.Qt.NoModifier, QtCore.Qt.KeypadModifier):
if key in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
self.menu.editItem.trigger()
return True
我知道“过早的优化是万恶之源”,但我认为eventFilter 经常被称为考虑它的优化。
我的担忧:
-
if key in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return)在每次运行时进行双重查找: 1. 在QtCore模块中找到Qt属性; 2.在Qt模块中找到Key_Enter属性。 -
if key in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return)这会在每次运行时构造元组。元组中的搜索是顺序的 - 最好使用frozenset?
您如何处理此类情况?不在乎?
【问题讨论】:
-
您的整个代码可以简化为一个条件检查。
-
没错,别在意!当然,在你有证据之前,这很重要。 (提示:它没有。)
-
如果这只是在键盘按下时执行,它的表现是没有意义的。
-
-1: “我知道‘过早的优化是万恶之源’”。好的。到时候,停下来。不要往前走。把时间花在更有价值的事情上。
-
@interjay - 这可能会为 每个 系统 UI 事件(例如鼠标移动或单击)调用,因此 event.type() 的第一次测试可能值得优化, 以快速放弃除按键之外的所有内容。
标签: python optimization python-3.x pyqt pyqt4