2014-12-24 29 views
-2

我正在使用NetSec的一本書中的一些代碼,但有一行我無法弄清楚。我對Python 3非常瞭解,但不是2,這正是本書所特有的。在聲明一個變量時,Python 2.X中的逗號是做什麼的?

的代碼是:

client,addr = server.accept() 

坦率地說,到底是什麼意思?該項目的整個代碼是在這裏:

import socket 
import threading 

ip = "192.168.0.155" 
port = 9999 
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

server.bind((ip, port)) 

server.listen(5) 

print "* Listening on %s:%d" %(ip,port) 

def handle_client(client_socket): 

    request = client_socket.recv(1024) 
    print "* Received %s" % request 
client,addr = server.accept() 
    client_socket.send("Received: %s" % request) 


client,addr = server.accept() 
    client_socket.send("Received: %s" % request) 
    client_socket.close() 
    for each in request: 
     print each 

while True: 
    client,addr = server.accept() 
    print "* Received connection from %s:%d" % (addr[0], addr[1]) 
    client_handler = threading.Thread(target=handle_client, args=(client,)) 
    client_handler.start() 

回答

2

這就是所謂的序列拆封server.accept()返回一個元組(socket, address),它解壓縮爲兩個變量clientaddr。在docs

這相當於

temp= server.accept() 
client= temp[0] 
addr= temp[1] 

更多信息。

+0

Thanks,@Rawing!節日快樂,快樂的編碼。 –

+0

另外,「client」後面的逗號是做什麼的: –

+0

client_handler = threading.Thread(target = handle_client,args =(client,)) –

1

server.accept()返回一個tuple,並且該元組的值分別被分配給client和addr。 一個簡單的例子:

> x,y = (1,2) 
> print(x) 
1 
> print(y) 
2 

這是Python中很常見的成語,我不認爲這是在Python 3


編輯 任何不同關於在後面的逗號.. .args =(client,))
see here:Python tuple trailing comma syntax rule

相關問題