我正在开发一款游戏,并且我已经在我的Player()
课程中创建了一个函数,该函数为游戏中的其他所有玩家调用另一个函数(按顺序)。但是,我无法弄清楚是否可以将它推广到我在游戏中使用的各种不同的功能,每种功能都有不同的参数。
我已将其转换为两个功能,但需要至少扩展到every_other_player3
:
def every_other_player0(self, func):
i = self.self_index()
j = i + 1
while j % len(players) != i:
func(players[j % len(players)])
j += 1
def every_other_player1(self, func, arg1=None):
i = self.self_index()
j = i + 1
while j % len(players) != i:
func(players[j % len(players)], arg1)
j += 1
以下是我如何调用这些内容的示例:
player.every_other_player0(Player.draw_card) # Players draw from their deck
player.every_other_player1(Player.get_card, 'Spade') # Players get a Spade from a group pile
players
只是Player
个对象的列表,我将其用于转弯顺序。
有没有办法统一这些?
答案 0 :(得分:2)
听起来你想要使用压缩参数列表:
def every_other_player(self, func, *args, **kwargs):
i = self.self_index()
j = i + 1
while j % len(players) != i:
func(players[j % len(players)], *args, **kwargs)
j += 1
请注意,您计划通过Player
参数(例如every_other_player()
和func
)传递给draw_card()
的{{1}}方法可以保持不变并且幸福无知你正在打包/解包论据。
例如,请参阅此reference。