-6

関数がゼロ以外を返すまで(つまり、失敗したとき)、sync各行を呼び出し続ける必要があります。file.txt現在、以下のことを行う予定です。

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

2 に答える 2

3
with open(...) as fp: any(sync(line) for line in fp)
于 2013-01-01T03:40:03.983 に答える
3

まあ、ほぼ1行で( itertoolsモジュールのインポートを許可した場合):

[ 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
于 2013-01-01T03:42:32.283 に答える