Должен ли я использовать `app.exec()` или `app.exec _()` в моем приложении PyQt?
Я использую Python 3 и PyQt5. Здесь моя тестовая программа PyQt5, сосредоточьтесь на последних двух строках:
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class window(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.setWindowTitle('test')
self.resize(250,200)
app=QApplication(sys.argv)
w=window()
w.show()
sys.exit(app.exec())
#sys.exit(app.exec_())
Я знаю, что exec
- это ключевое слово языка в Python. Но код Официальная документация PyQt5 (в частности, Разрушение объекта на выходе). Я вижу, что в этом примере показано использование app.exec()
, которое меня смущает.
Когда я тестировал его на своей машине. Я обнаружил, что нет никакого заметного отличия от моего конца. Как с, так и без _
производит одинаковый выход без разницы во времени.
Мой вопрос:
- Что-то не так происходит, когда я использую
app.exec()
? например, столкновение с внутренним Python exec
? Я подозреваю, что оба exec
выполняют что-то.
- Если нет, могу ли я использовать как взаимозаменяемые?
Ответы
Ответ 1
Это потому, что до тех пор, пока Python 3, exec
не было зарезервированным ключевым словом, разработчики PyQt добавят к нему подчеркивание. Начиная с Python 3, exec
больше не зарезервированное ключевое слово (потому что это встроенная функция, такая же ситуация, как print
), поэтому она имела смысл в PyQt5 предоставить версию без подчеркивания, чтобы она соответствовала документам С++, но сохраните версию с подчеркиванием для обратной совместимости. Итак, для PyQt5 с Python 3 две функции exec
одинаковы. Для старых PyQt доступен только exec_()
.
Ответ 2
В вопросе о том, следует ли предпочитать один над другим: использование exec_
означает, что вам нужно меньше беспокоиться о том, когда вы решите добавить поддержку PyQt4 и/или Python >= 2.6 и хотите сохранить единая кодовая база.