Допустим, я хочу иметь статическую функцию с именем repeatForever
, которая выглядит так:
while True:
# code that gets defined here
Я видел много функций, которые можно «переопределить» с помощью ключевого слова def
, например (функция определена заранее, я просто «передаю код как параметр»).
def repeatForever():
print("This should get printed forever!")
И это было бы то же самое, что;
while True:
print("This should get printed forever!")
Как я могу определить такую функцию?
Как я могу определить такую функцию?
def repeatForever(): while True: #Do something
Нет, я имею в виду, что я могу определить функцию заранее, и мне просто нужно «передать свой код в качестве параметра», чтобы он выполнялся в цикле while.
Вы можете передавать переменную, а также функции функциям, если вы это имеете в виду?
Так, например, в C# у вас могут быть функции, такие как функция update()
в игровом движке Unity, где вы можете определить функцию как обычно, если вы наследуете ее класс, и код, который вы помещаете в эту функцию, будет выполняться каждый раз. рамка. Я хотел сделать что-то подобное.
Правильный способ сделать это — иметь основную update()
функцию, которая вызывает другие update_x()
функции. Судя по комментариям, вы хотите сделать какую-то игру.
Сначала вы должны создать класс игры, который содержит метод обновления и экземпляры всех других вещей в игре:
class Game():
def __init__(self):
self.player = Player()
self.scenary = Scenary()
def update(self):
self.player.update()
self.scenary.update()
if __name__ == "__main__":
game = Game()
while True:
game.update()
Это предполагает, что эти другие классы имеют свои собственные функции обновления, которые будут выглядеть примерно так:
class Player():
def __init__(self, name):
self.name = name
def update(self):
self.update_movement()
self.update_collission()
self.update_status()
Таким образом, вы можете просто кодировать в каждом соответствующем классе, и все будет обновляться каждый кадр с помощью функций обновления.
Мой способ обновления различных классов, который работал у меня, заключался в том, чтобы получить список всех классов и пройтись по ним, используя цикл for, например так;
while True:
for c in classes:
try:
c.Update()
except:
pass
Каков твой вопрос?
while True:
не является функцией. Ключевое словоdef
используется для определения функции. Это не то же самое