2013-07-27 1 views
4

이 파이썬 코드 here을 찾았습니다.'데이터가 아닌 경우 : 중단'은 무엇을 의미합니까?

18 번 줄의 의미는 무엇입니까? if not data: break은 무엇을 의미합니까? 예, 다음 루프에서 나누기 경우받은 data이 비어있는 경우

#!/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

downvotes에 대한 이유가 무엇입니까? 나는 그것이 합법적 인 질문이라고 생각한다. +1 –

+0

'데이터가 아닌 경우 :', '데이터가없는 경우 :'가 아닙니다. – sepp2k

+0

Downvotes는 포스터가 문제에 대한 해답을 이해하기에 충분한 명확성으로 문제를 설명하지 않았다는 사실에 기인합니다. 나는 그것이 일관된 질문을 편집했다. stackoverflow에 대한 질문은 다음 지침을 따라야합니다 : (http://sscce.org/) (짧게, 자기 포함, 올바른 컴파일 가능, 예) –

답변

4

은 그냥 확인합니다. 빈 문자열을 확인하는 것과 같습니다. data = conn.recv(BUFFER_SIZE)는 빈 문자열을 제공하는 경우

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

while 루프가 종료됩니다.

0

이것은 연결에서 데이터를 수신 한 가장 최근의 시도가 데이터를 반환하지 않은 경우 더 많은 데이터를 수신하려고 시도하는 루프에서 벗어 났음을 의미합니다.

while 1: 
    while block 

이 항상 true로 평가되는 조건 while 루프입니다 참조하십시오. 그러므로, 이것은 매 반복마다 while block을 평가할 무한 루프입니다.

우리의 경우를 제외하고 while blockbreak입니다. 그 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이 true로 평가되고 if 본문이 실행됩니다. 이 경우에는 우리가 논의한 break 문을 사용하여 루프를 중단하고 데이터 수신을 중단합니다. if 조건이 false로 평가되면 수신 된 데이터 다음에 "received data:" 메시지가 콘솔에 인쇄됩니다. 마지막으로 데이터가 다른 끝점으로 다시 에코됩니다.

0

데이터가 비어 있거나 null이거나 동등한 경우, while 루프가 종료됩니다.

관련 문제