Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中创建套接字数组{list}_Python_Arrays_Sockets - Fatal编程技术网

在python中创建套接字数组{list}

在python中创建套接字数组{list},python,arrays,sockets,Python,Arrays,Sockets,继续下面链接中提到的问题 是否可以像python一样创建套接字数组 list=[socket0, socket1, socket2, socket3 ] for i in range(0,3): list[i]=socket.socket(socket.AF_INET, socket.SOCK_STREAM) list[i].connect((host,port[0])) 我尝试了这个,但是我得到了与我在链接中发布的相同的错误,没有属性recv 可以在python中创建这样

继续下面链接中提到的问题

是否可以像python一样创建套接字数组

list=[socket0, socket1, socket2, socket3 ]

for i in range(0,3):
    list[i]=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    list[i].connect((host,port[0]))
我尝试了这个,但是我得到了与我在链接中发布的相同的错误,没有属性recv


可以在python中创建这样的数组吗。我知道这在C语言中是可能的。

您不应该预先填充列表,而是动态创建它

有两种方法可以做到这一点:

  • “更好”的方式:

  • 下面的方法:

    sockets = []
    for i in range(3):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((host, port[0]))
        sockets.append(sock)
    
  • 尽管有额外的迭代,但第一个更好,因为它使用python的“最佳”功能之一来构建列表,并且更短、更可读。额外迭代的时间要求很低,甚至不存在

    但是,第二种方法没有什么不可取的地方,因此,如果您喜欢它,尽管它较长,请使用它。

    最快的方法:

    import socket
    sockets = list(map(lambda x: x.connect(('127.0.0.1', 80)), [socket.socket(socket.AF_INET, socket.SOCK_STREAM) for _ in range(3)]))
    
    列表理解比使用连续追加或列表[i]创建循环更快, map函数也可以

    更漂亮的方式(效率稍低):


    你的意思是不是
    list[i]=socket.socket…
    ?你可以创建一个包含任何你喜欢的对象的列表,甚至包括类(在python中也是对象)。从空列表开始,添加实例化的套接字对象。然而,从你的问题来看,我觉得你应该首先理解简单的编程概念。你能解释一下为什么列表理解方式更好吗?现在迭代两次。(别误会我的意思,我喜欢这个想法以及它的可读性,但OP似乎不是很有经验,所以也许可以解释一下它的优势所在)@enpenax两个选项都有
    connect
    call。这是一个网络IO操作,我怀疑它将持续足够长的时间,因此我们可以说,无论有多少循环,其他代码执行所花费的时间可以忽略不计。所以这一切都是关于可读性的。@enpenax仅仅迭代的成本不会太高,它会超过可读性。请注意,它大约有4个列表条目……正如我所说的,不要误解我的意思。我完全同意,但写“此解决方案优于”很容易,无需在帖子中给出理由:)现在我可以向上投票:P,但可能永远不会被标记为接受:/
    import socket
    sockets = list(map(lambda x: x.connect(('127.0.0.1', 80)), [socket.socket(socket.AF_INET, socket.SOCK_STREAM) for _ in range(3)]))
    
    import socket
    
    not_connected_sockets = [socket.socket(socket.AF_INET, socket.SOCK_STREAM) for _ in
        range(3)]
    
    sockets = list(map(lambda x: x.connect(('127.0.0.1',
        80)), not_connected_sockets))