在python中创建套接字数组{list}
继续下面链接中提到的问题 是否可以像python一样创建套接字数组在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中创建这样
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)
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))