2014-10-09 4 views
-3

모든 것이 잘 수행되면 1을 반환하고 오류가 있으면 0을 반환하는 함수를 만들었습니다. 이제 각 함수를 정의 된 순서로 실행하고 반환 값을 확인해야합니다. 그 중 하나가 0을 반환하면, 후속 기능을 호출하지 않고 즉시 재부팅해야합니다. 여러 개의 if 조건에 대해 하나 더

나는 여러 if의를 사용하는 것이 아니라 하나의 else로 : 내가 원하는처럼

if function_1(): 
    if function_2(): 
     if function_3(): 
      print "Everything went well" 
else: 
    reboot() 

그러나 그것은 작동하지 않습니다 나는 else 부분은 바로 이러한 조건 중 하나라도 후에 실행하는 데 실패 할, 그리고 지금 function_1이 실패한 경우에만 실행됩니다.

+0

이 기능 내부 예외를 발생 :

functions = [function_1, function_2, function_3] if all(f() for f in functions): print("all good") else: print("oh no!") 

... 우리는이 출력을 얻을 ; 그것은 모든 방법으로 전파 할 것이고, 바깥 쪽 레벨에서 그것을 잡으면 재부팅을 결정할 수 있습니다. – Evert

+8

모든 기능을 항상 실행 하시겠습니까? 아니면 실패 할 경우 즉시 재부팅 하시겠습니까? – aruisdante

+0

왜 [[tag : linux]'가 있습니까? 파이썬에서 재부팅하는 법도 알고 싶습니까? –

답변

7

두 가지 방법이 있습니다.

1). 하나의 if 문을 사용하고 and 조건을 함께 사용할 수 있습니다. 이렇게하면 "단락 (short circuiting)"동작이 발생합니다. 첫 번째 동작이 실패 할 때까지 기능을 계속 수행 한 다음 나머지 동작은 실행되지 않습니다.

if function_1() and function_2() and function_3(): 
    print "Everythings went well" 
else: 
    Reboot 

2) 모든 실행하려는 경우가 더 복잡 :

successful = True 

successful = successful and function_1() 
successful = successful and function_2() 
successful = successful and function_2() 

if successful: 
    print "Everythings went well" 
else: 
    Reboot 
+3

함수의 단락 동작을 실패했지만 각 함수가 호출되어야하는 경우가 아니라면이 방법이 유용합니다. – aruisdante

+2

왜 이것이 다운 보트를 얻었는지 확실하지 않습니다.이 솔루션은 OP와 동일하지만 바로 가기와 관련이 있습니다. –

+1

그건 분명히 내가하는 일입니다. 왜 downvote 모르겠어요. –

2

당신은 목록을 만들 수있다하지만, 여기에 방법이 있습니다 : 다음

functions = [function_1(), function_2(), function_3()] 

을 확인 모두 :

if all(functions): 
    print 'OK' 
else: 
    Reboot 

이렇게하면 모든 기능을 설정하고 (이것이 요구 사항이라고 가정) 모든 것이 사실인지 확인합니다.

In [1]: functions = [True, True, True] 

In [2]: all(functions) 
Out[2]: True 

를 또는 하나가 실패 할 경우 :

가정의 모든 기능을 통과

In [3]: functions = [True, True, False] 

In [4]: all(functions) 
Out[4]: False 
+0

왜 첫 번째 두 개를 호출하고 세 번째를 호출하지 않습니까? 튜플을 빌드 할 때 함수를 호출하면 결과 또는 이전 함수에 관계없이 모두 실행됩니다. 그렇지 않다면, 당신은 그들에게 전화하기 위해 좀 더 많은 작업이 필요합니다. –

+0

@WilliamPursell 으악 - 오타! 건배 GreenAsJade –

+0

@Cyber ​​아니요,하지만 모두 실행하고 결과를 목록에 저장합니다 (이럴 경우) –

4

그것은 가능한 한 빨리 당신이 else 절에 직접 점프 (원하는 단락 동작을 취득 가능 귀하의 함수 중 어느 하나도 all()을 사용하여 더 컴팩트 한 방법으로 False을 반환합니다.

d emonstration 목적 : 지금

def function_1(): 
    print("first") 
    return True 

def function_2(): 
    print("second") 
    return False 

def function_3(): 
    print("third") 
    return True 

...이 코드 : 오류가 있다면

first 
second 
oh no! 
관련 문제