“如果不是数据:休息”是什么意思?

时间:2013-07-27 14:19:04

标签: python

我找到了这个Python代码here

我不明白第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 个答案:

答案 0 :(得分:4)

它只是检查收到的data是否为空,如果是,则它会突然退出循环。就像检查空字符串一样。

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

如果data = conn.recv(BUFFER_SIZE)给出一个空字符串,则while循环终止。

答案 1 :(得分:0)

这意味着如果最近接收连接数据的尝试没有返回任何数据,则跳出尝试接收更多数据的循环。

while 1:
    while block

是一个while循环,其条件始终求值为true。因此,这是一个无限循环,它将在每次迭代时评估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

此块表示接收最多conn个字节的连接BUFFER_SIZE上的数据。如果没有收到数据,not data计算结果为true,我们执行if正文。在这种情况下,它是我们一直在讨论的break语句,因此我们突破循环并停止接收数据。如果if条件的计算结果为false,则会将接收到的数据后面的消息"received data:"打印到控制台。最后,数据回显到另一个端点。

答案 2 :(得分:0)

这意味着如果数据为空,为null或等效,则while循环将终止。