这些调用函数的函数可以在Python中组合使用吗?

这些调用函数的函数可以在Python中组合使用吗?,python,python-2.7,Python,Python 2.7,我正在开发一个游戏,我在Player()类中创建了一个函数,该函数为游戏中的每个其他玩家调用另一个函数(按顺序)。然而,我不知道是否有可能将它推广到我在游戏中使用的各种不同的函数中,每个函数都有不同数量的参数 我已将其转换为两个函数,但需要至少扩展到每隔一个播放器3的: def every_other_player0(self, func): i = self.self_index() j = i + 1 while j % len(players) != i:

我正在开发一个游戏,我在
Player()
类中创建了一个函数,该函数为游戏中的每个其他玩家调用另一个函数(按顺序)。然而,我不知道是否有可能将它推广到我在游戏中使用的各种不同的函数中,每个函数都有不同数量的参数

我已将其转换为两个函数,但需要至少扩展到每隔一个播放器3的

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
对象的列表,我在回合顺序中使用它


有没有办法把这些统一起来

听起来您想使用压缩参数列表:

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
请注意,您计划通过
func
参数(例如
draw\u card()
get\u card()
)传递给
every\u other\u Player()
)的
Player方法可以保持不变,并且非常高兴地不知道您正在打包/解包参数


例如,请参见此。

经过一些研究和反复试验,才发现
*args
**kwargs
不必出现在任何地方,除了
每个其他玩家()。我想我必须想出一种方法在函数中引用它们,该函数将调用
每一个其他玩家()
。我的示例调用现在完全相同,只是函数名标准化了。很抱歉没有说清楚。我更新了我的答案,并发表了一份声明。