Python只接收来自元组的一个变量

时间:2017-10-31 19:37:27

标签: python python-2.7 sockets select

rlist, wlist, xlist = select.select([Server] + open_client_sockets, [], [])

我理解上面的代码将可读文件插入到读取列表中,将可写入文件插入到wlist中,将特殊文件插入到xlist中。但是,如果我只想收到rlist怎么办?我不希望python创建wlist和xlist变量。

有可能是rlist, [], [] = select.select([Server] + open_client_sockets, [],[])吗?

3 个答案:

答案 0 :(得分:2)

使用Python 3,您只需执行以下操作:

rlist, _, _ = select.select([Server] + open_client_sockets, [],[])

由于您使用的是Python 2,您可以通过以下方式实现相同目标:

_

以上称为解包,我们通常使用=Parameters!DimTiempoAnio.Value(0) 来丢弃我们不感兴趣的数据。

答案 1 :(得分:1)

(以下假设您拒绝使用像_这样的一次性名称,并且确实想要设置 rlist。)

  

我不希望python创建wlist和xlist变量。

然后不要让它:)

rlist = select.select([Server] + open_client_sockets, [], [])[0]

您可以立即索引select.select返回的匿名三元组,从而永远不会将返回值的其余部分绑定到任何名称。

对此的标准反对意见是其可读性差;你看到一个名称和被调用函数的赋值,并且很容易假设rlist将是预期的三元组。 [0]可能会在通话结束时丢失。

一种解决方法是使用辅助函数预先移动“索引”:

from operator import itemgetter

rlist = itemgetter(0)(select.select([Server] + open_client_sockets, [], []))

然而,这更不可读,而且不是itemgetter的预期用例。

或者,只需添加第二行代码

rlist = select.select([Server] + open_client_sockets, [], [])
rlist = rlist[0]

延迟select.select返回的其他两个对象的垃圾收集。

答案 2 :(得分:0)

您可以将下划线用于您不关心的元组成员

rlist, _, _ = select.select([Server] + open_client_sockets, [], [])