Должен ли я использовать `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 и хотите сохранить единая кодовая база.