Python 这些代码块之间有什么不同?

Python 这些代码块之间有什么不同?,python,Python,我想使用socket在Python中制作一个游戏,我想让我的服务器检查是否有5个客户端在监听服务器,如果有,开始游戏 但我不知道如何做到这一点,有两种不同的方式来做我想做的事情,但我想知道的是,在性能或其他方面是否有不同?它也一样吗 while True: self.conn, addr = server.accept() self.players.append(self.conn) if len(self.players) == 5: # self.st

我想使用socket在Python中制作一个游戏,我想让我的服务器检查是否有5个客户端在监听服务器,如果有,开始游戏

但我不知道如何做到这一点,有两种不同的方式来做我想做的事情,但我想知道的是,在性能或其他方面是否有不同?它也一样吗

while True:
    self.conn, addr = server.accept()
    self.players.append(self.conn)
    if len(self.players) == 5:
        # self.start_game()

内存、性能或其他方面有什么不同吗?

您想要第二个版本

第一个循环将永远循环,因为
开始\u游戏
可能不会重置 一张空的球员名单

虽然这是真的,但没有必要。 这将是表示循环条件的更清晰的方式:

while len(self.players) < 5:
    self.conn, addr = server.accept()
    self.players.append(self.conn)
while len(self.players)<5:
self.conn,addr=server.accept()
self.players.append(self.conn)
这表明您打算从0开始计算长度。。4并且仍然运行身体。 一旦长度达到所需的值5, 不再需要等待进一步的连接。 关于这个问题,没有无限循环的模糊性
“如果已经有六个玩家了怎么办?”

第一个代码块将永远运行,即使满足了该条件,因为循环的条件始终是
真的

如果满足该条件,
断开
的第二个块将退出循环,从而防止循环永远运行

无论self.start_game()做什么,您的
while
循环将无限运行,因为该行不会改变导致循环继续运行的条件

代码清理建议:
while len(self.players)<5:
self.conn,addr=server.accept()
self.players.append(self.conn)

这将防止循环在满足条件后再次运行。

区别在于第一种情况。该方案永远不会结束。如果start_游戏结束,程序将重新开始并添加玩家。在第二种情况下,python程序将在start_game()结束时结束。

第一个代码块是一个无限循环。如果
self.players
的长度为5,则第二个代码块将退出循环。@Ch3steR但调用函数时它将停止,对吗?不,它不会停止。它启动self.start_game()
一次
self.start_game()
结束循环,再次恢复,它将处于无限循环
,而不是len(self.players)==5:
。我认为这样更好,因为我只需要5名玩家。
而不是len(self.players)==5
实际上更糟糕,因为如果有一些奇怪的bug导致玩家的
len
更多,循环将无限再次运行。。。
while len(self.players) < 5:
    self.conn, addr = server.accept()
    self.players.append(self.conn)
while len(self.players) < 5:
    self.conn, addr = server.accept()
    self.players.append(self.conn)