developer tip

파이썬의 While 루프에 할당?

optionbox 2020. 12. 24. 23:37
반응형

파이썬의 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 의미론의 의미에 따라 크게 달라집니다 . 경우 dataA는 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:) 대신 반복자를 반환하는 함수가있는 경우 다음 수행 할 수 있습니다.readlinedata.iterate

for line in data.iterate():
    #...

참조 URL : https://stackoverflow.com/questions/6631128/assignment-in-while-loop-in-python

반응형