파이썬의 While 루프에 할당?
방금이 코드를 발견했습니다.
while 1:
line = data.readline()
if not line:
break
#...
그리고 생각은, 거기에 있어야 에 무한 루프를 사용하는 것보다,이 작업을 수행 할 수있는 더 좋은 방법 break
.
그래서 나는 시도했다.
while line = data.readline():
#...
그리고 분명히 오류가 있습니다.
break
그 상황에서를 사용하지 않는 방법이 있습니까?
편집하다:
이상적으로는 readline
두 번 말하지 않는 것이 좋습니다 . IMHO, 반복은 a보다 더 나쁩니다 break
. 특히 문장이 복잡한 경우 더욱 그렇습니다.
나중에 더 많은 줄을 읽는 것과 같이 데이터에 대해 더 멋진 일을하지 않는 경우에는 항상 다음이 있습니다.
for line in data:
... do stuff ...
이것을 시도해보십시오. open('filename')
for line in iter(data.readline, b''):
이게별로 좋지는 않지만 제가 보통하는 방식입니다. Python은 다른 언어 (예 : Java)와 같이 변수 할당시 값을 반환하지 않습니다.
line = data.readline()
while line:
# ... do stuff ...
line = data.readline()
처럼,
for line in data:
# ...
? 그것은 data
객체의 readline 의미론의 의미에 따라 크게 달라집니다 . 경우 data
A는 file
객체가, 그 일 것입니다.
시작 Python 3.8
및 할당 표현식 (PEP 572) ( :=
연산자) 의 도입으로 , 이제 data.readline()
while 루프 의 조건 값 ( )을 변수 ( line
) 로 캡처하여 루프 본문 내에서 재사용 할 수 있습니다.
while line := data.readline():
do_smthg(line)
for line in data:
... process line somehow....
를 file
사용하는 대신 에서 각 줄을 반복 합니다 while
. 내 경험 (Python)에서 파일을 읽는 작업에 대한 훨씬 더 일반적인 관용구입니다.
사실, data
파일 일 필요는없고 단지 반복자를 제공 할뿐입니다.
다음과 같이 할 수 있습니다.
line = 1
while line:
line = data.readline()
data
파일 인 경우 다른 답변에서 언급했듯이 사용 for line in file
하면 정상적으로 작동합니다. 데이터가 파일이 아니고 임의의 데이터 읽기 개체 인 경우 반복자, 구현 __iter__
및 next
메서드 로 구현해야 합니다.
이 next
메서드는 판독 값에 더 많은 데이터가 있는지 확인하고 그렇지 않은 경우 StopIteration
. 이렇게하면 for line in data
관용구를 계속 사용할 수 있습니다 .
Python 문서 의 FAQ 에 따르면 구문을 사용하여 입력을 반복 for
하거나 무한 while True
루프를 실행하고 break
문을 사용 하여 종료하는 것이 선호되고 관용적 인 반복 방법입니다.
(예 data
:) 대신 반복자를 반환하는 함수가있는 경우 다음 을 수행 할 수 있습니다.readline
data.iterate
for line in data.iterate():
#...
참조 URL : https://stackoverflow.com/questions/6631128/assignment-in-while-loop-in-python
'developer tip' 카테고리의 다른 글
서버 전략에서 데이터를 캐시하기위한 클라이언트 (iOS)의 핵심 데이터 (0) | 2020.12.24 |
---|---|
C ++ cout이 과학적 표기법을 사용하지 않도록하는 방법 (0) | 2020.12.24 |
JCheckbox-ActionListener 및 ItemListener? (0) | 2020.12.24 |
Azure 저장소 테이블과 SQL (0) | 2020.12.24 |
PHP const 배열 (0) | 2020.12.24 |