2013-01-01 3 views
-6

file.txt의 각 줄에 대해 sync을 계속 호출해야 함수가 0이 아닌 값 (즉, 실패 할 때까지)을 유지해야합니다. 현재 다음을 수행 할 계획입니다.파일의 각 행에 함수를 호출하는 한 줄기

for line in file("file.txt"): 
     change=int(line) 
     cp_success=sync(change) #check the return value of function sync 
     if cp_success!=0 : 
      break    #Try using a break statement 

더 좋은 방법이 있나요?

+4

'goto' 문장? 정말? – inspectorG4dget

+4

왜 한 줄짜리 어쨌든? –

+0

은 파이썬에서 goto가없는 것처럼 보입니다 ... – user1927233

답변

3

음, 거의 (당신이 나를 itertools module 가져올 수있는 경우) 한 줄에/파일 오 승

[ x for x in itertools.takewhile(
    lambda line: sync(line) == 0, # <- predicate 
    open("file.txt")) ]    # <- iterable 

예 :

>>> import itertools 
>>> def sync(n): 
... if n == 3: return -1 # error 
... return 0 

>>> lines = [1, 2, 3, 4, 5, 6] 
>>> [ x for x in itertools.takewhile(lambda x: sync(x) == 0, lines) ] 
[1, 2] 

하지만 당신이 정말로해야 모호하지 사물, 그렇다면 왜 아닙니다 :

with open("file") as fh: 
    for line in fh: 
     if not sync(int(line)) == 0: 
      break 
3
with open(...) as fp: any(sync(line) for line in fp) 
+0

@Ignacio - 모든 기능을 설명 할 수 있습니까? 위의? "sync"함수의 반환 값을 확인하는 방법은 무엇입니까? – user1927233

+0

@ user1927233 : http://docs.python.org/2/library/functions.html#any –

+0

@ IgnacioVazquez-Abrams : 코드가하는 일을 이해합니다. 그러나 나는 궁금합니다. 이것이 OP가 무엇을 원하는지 믿는 데있어 어떤 과정이 필요하다고 생각하십니까? 나는 그것이 그가 원하는 것임을 확인/부인할 수는 없지만 그의 코드가 내 머리 속에서 "계산"하지 않기 때문에 대답 할 수 없었다. 그래서 나는이 결론에 어떻게 도달했는지 궁금합니다 (그것은/않습니다/OP를 돕는 것처럼 보입니다). – inspectorG4dget

관련 문제