Python: в чем разница между вызовом метода С () и без?
Это должно быть что-то очень простое и очевидное, потому что я просто не могу найти ответ через google или здесь...
Какое значение имеют скобки в Python, когда я вызываю методы?
Пример кода с pygame и скобками:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((640, 480))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
Когда я щелкаю крестик окна, оно закрывается с помощью sys.exit () - последнее, что вызывается в Traceback.
Когда я изменяю его на это:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((640, 480))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit
pygame.display.update()
Он по-прежнему выходит, но с ошибкой отображения в качестве последнего элемента в Обратный след.
Я столкнулся с этим, когда следовал этому учебнику для Panda3D здесь: http://www.mygamefast.com/volume1/
В некоторых вопросах (например, здесь в методе keyboardSetup класса ArcadeFlightGame): http://www.mygamefast.com/volume1/issue5/4/) он называет " sys.выход" вместо " sys.exit () " и игра завершается правильно. Если я изменю его на " sys.exit () " вызывает некоторую ошибку при запуске.
Это кажется настолько простым, что никто толком не объяснил его в любом месте... Я был бы очень признателен, если бы кто-нибудь мог немного просветить меня на этот счет : /
1 ответ:
Если вы не используете скобки, вы не вызываете функцию. Все очень просто.
При этом иногда имя функции без скобок передается какой-либо другой функции или привязывается к событию. В таком случае скобки не используются, потому что вы говорите этой другой функции или событию "вызовите это в соответствующее время".sys.exit
абсолютно ничего не делает,sys.exit()
вызывает функцию.Например, в учебнике, на который вы ссылаетесь, есть эта строка код:
self.accept("escape", sys.exit)
Это Не вызов sys.выход. Вместо этого он сообщает системе событий: "когда вы обнаружите клавишу escape, вызовите эту функцию". В момент вызова этого кода
sys.exit
является Не вызываемым, а скорее зарегистрированным для последующего вызова. Когда клавиша escape нажата, базовая структура фактически вызовет функцию, используя скобки.Таким образом, существует разница между немедленным вызовом функции (с помощью
()
) и регистрация функции (используя только имя, нет()
).