Python - неверный синтаксис для события l oop (maze_run-master) - PullRequest
1 голос
/ 02 марта 2020

У меня проблема с запуском скрипта, где print - это функция обратного вызова для события l oop

from pygame.locals import KEYDOWN
import pygame


def event_loop(handle_key, delay=10):
        """Processes events and updates callbacks."""
        while True:
            pygame.event.pump()
            event = pygame.event.poll()
            if event.type == KEYDOWN:
                handle_key(event.key)
            pygame.time.delay(delay)


if __name__ == '__main__':
        pygame.init()
        pygame.display.set_mode((640, 400))
        event_loop(print)

Я получаю синтаксическую ошибку:

event_loop(print)
               ^
 SyntaxError: invalid syntax
Wirman:04_scientific_method mac$ python event_loop.py
 File "event_loop.py", line 23
   event_loop(print)
                  ^
SyntaxError: invalid syntax

Любая помощь будет высоко ценится *

1 Ответ

0 голосов
/ 02 марта 2020

В Python 2.7 (который устарел с 2015 года и официально достиг конца срока службы в январе 1, 2020), print раньше был выражением , как и несколько других такие ключевые слова, как break и continue. В более новых версиях Python начиная с версии 3.0 print является функцией , и поэтому вы можете увидеть примеры вашего обратного вызова, в котором используется print.

получите SyntaxError, потому что вы применяете современную конструкцию (после 2015 v.3) к старой и официально устаревшей версии Python.

Если вы хотите продолжать использовать 2.7, вы можете обойти это создавая оболочку function только для оператора print:

def my_print (text):
  print text

def event_loop (handle_key):
  handle_key('hello!')

event_loop(my_print)

, где замена последней строки вашей исходной строкой

event_loop(print)

покажет, что SyntaxError снова. Но было бы лучше обновить.

...