2013-07-27 156 views
4

我發現這個Python代碼here'if not data:break'是什麼意思?

我不明白第18行的if not data: break是什麼意思。

#!/usr/bin/env python 

import socket 

TCP_IP = '127.0.0.1' 
TCP_PORT = 5005 
BUFFER_SIZE = 20 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((TCP_IP, TCP_PORT)) 
s.listen(1) 

conn, addr = s.accept() 
print 'Connection address:', addr 
while 1: 
    data = conn.recv(BUFFER_SIZE) 
    if not data: break 
    print "received data:", data 
    conn.send(data) # echo 
    conn.close() 
+3

降價的任何理由?我認爲這是一個合理的問題。 +1 –

+0

它是'如果不是數據:',而不是'如果沒有數據:'。 – sepp2k

+0

Downvotes是因爲海報沒有足夠清晰地描述問題來理解所述問題的答案。我編輯了這個問題,因此它是連貫的。關於stackoverflow的問題應該遵循以下指導原則:(http://sscce.org/)(短的,自包含的,正確的可編譯的,例子) –

回答

4

它只是檢查是否收到data是空的,如果是的話,就跳出循環的。很像檢查一個空字符串。

>>> not "" 
True 
>>> bool("") 
False 

如果data = conn.recv(BUFFER_SIZE)給出了一個空字符串,則while循環被終止。

0

這意味着如果最近在連接上接收數據的嘗試沒有返回任何數據,則跳出試圖接收更多數據的循環。

while 1: 
    while block 

是與結果始終爲true的條件while循環。因此,這是一個無限循環,將在每次迭代中評估while block

除我們的情況外,while block中有一個break。如果這個break被擊中,它會跳出循環。讓我們看一下while block

data = conn.recv(BUFFER_SIZE) 
    if not data: 
     break 
    print "received data:", data 
    conn.send(data) # echo 

此塊是說收到讀書最多BUFFER_SIZE字節連接conn上的數據。如果沒有收到數據,not data評估爲真,我們執行if正文。在這種情況下,我們一直在討論break聲明,所以我們跳出循環並停止接收數據。如果if條件的計算結果爲false,則將收到的數據後面的消息"received data:"打印到控制檯。最後,數據被回送到另一個端點。

0

這意味着如果數據是空的,null或等效的,while循環將終止。