피곤하거나 특정 사용자 한도에 도달 할 때까지 실행하려는 루프가 있습니다. 나는보기에는 좋지 않은 구조를 가지고 있지만 그것을 표현하는보다 우아한 방법을 찾을 수는 없다. 거기있어?조건부로 묶인 루프를 표현하는 좀 더 파이썬 적 방법?
def ello_bruce(limit=None):
for i in xrange(10**5):
if predicate(i):
if not limit is None:
limit -= 1
if limit <= 0:
break
def predicate(i):
# lengthy computation
return True
거룩한 중첩! 더 좋은 방법이 있어야합니다. 작업 예제의 경우, 일반적으로 유한하지만 알 수없는 길이의 반복자가 있고 (때로는 술어가 False를 반환하는) xrange
이 사용됩니다.
최소한 루프 앞에 한계가 없음이 있는지 확인하고 조건이 참일 때마다 확인하지 않고 리턴하십시오. 그렇다고해서 훨씬 더 파이썬적일 수는 없지만 루프에서 불필요한 계산을 많이 줄일 수 있습니다. –
그는 실제 행동을 여기에 놓는 것을 잊어 버렸지 만, 나는 limit = None이 "무언가를하지 말라"가 아니라 "무제한"을 의미한다고 생각합니다. –
여기에서 만들 수있는 가장 간단한 정리는 'if not predicate (i) : continue' 조건을 뒤집어서 여분의 중첩 레벨에 블록의 전체 나머지를 두는 것을 피하는 것입니다. 이것은 많은 코드에 적용되므로 일반적으로 배우는 것이 좋습니다. –