2013-04-24 1 views
-1

아래의 파이썬에서 간단한 조건문을 이해하는 데 어려움이 있습니다.간단한 파이썬 조건문 바로 가기 구문

def number(number): 
    return number or number == 3 

print number("") 

이 바로 가기 구문의 의미는 무엇입니까? 그것은 다음과 같은가요?

첫 번째는 False와 후자를 인쇄하지 않습니다. None은 구문이 유효하지 않음을 의미합니다.

+1

반환 값에 차이가있는 경우 분명히 동일하지 않습니다. – glglgl

+0

숫자 == 3 논리에서 의미가 없습니다. – thavan

+0

첫 번째 함수는 True 또는 False를 반환합니다. 두 번째 함수는 숫자 또는 없음을 반환합니다. – emigue

답변

1

number의 값이 True 인 경우 (따라서 0 또는 None이 아님)이 함수는 숫자를 반환합니다. 수를 False에 가치가있는 경우 (이 3 인 경우, 다른 False 그래서 True)

, 함수가 항상 반환 거짓 후자의 뜻으로

number == 3를 반환합니다 (number == 3 경우, 함수는 반환 것 이 0 또는 없음이 아니라면 그렇지 않으면 False를 반환합니다 수를 반환하는

return number or False
: 첫 번째 경우 3), 아래로 단축 될 수있다.

4

조건문은이 경우 비트가 없습니다 (단, equals/integer/boolean 값을 number으로 덮어 쓰는 것과 같은 아주 이상한 경우는 제외).

은 기본적으로 당신이 바로 지금하고있는 것은 다음과 같이이다 : 그것은 도움이 될 것 인 and이있을 것

def number(number): 
    if number: 
     return number 
    else: 
     return number == 3 

경우, 지금은 무의미.

또는 같은 유용 할 수는 :

return spam or eggs 

스팸은 스팸을 반환합니다 null가 아닌 경우, 그렇지 않으면 계란을 반환합니다. BTW

그림 : 그것은 일반적으로 AttributeError을 줄 것 spam.eggs 부분을 실행하지 않을 None을 것 spam 경우 때문에 number and number == 3 or 5

def number(number): 
    if number and number == 3: 
     return 3 
    else: 
     return 5 

spam and spam.eggs 일의

>>> for number in range(5):      
...  print 'number', number, number or number == 3 
number 0 False 
number 1 1 
number 2 2 
number 3 3 
number 4 4 

롱 버전에 유용합니다 .

+0

'return number and number == 3'의 긴 손에 해당하는 것은 무엇입니까? – Reno

+0

@Reno : 내가 추가했습니다 :) – Wolph

1

이것은 파이썬이 표현식과 객체를 평가하는 방법과 관련이 있습니다.

첫 번째 예 : 파이썬

당신은 빈 문자열 ""에 보내,이 훨씬 빈리스트 ([])처럼 False입니다.

def number(number): 
    # so this will now be (False) or (number == 3) but since the first 
    # expression was False it will not evaluate the number comparison and thusly 
    # return False 
    return number or number == 3 

print number("") 

두 번째 예는 그렇지 않습니다. 숫자가 True 인 것으로 명시되면 명시적인 if이 표시됩니다. 비어 있지 않거나 숫자가 3과 같으면 다음 블록을 입력하고 리턴하십시오.

하지만 우리가 배운 빈 문자열은 False를 반환하므로 if를 전달하고 Python 함수 None의 기본값을 반환합니다.

def number(number): 
    if number or number == 3: 
     return number 
    #default says return None here. 

print number("") 
2

두 경우의 관련 표현은 number or number == 3이다.

파이썬은이 표현을 두 부분으로 나눕니다. (number) or (number == 3) 먼저 개별 부분을 평가 한 다음 or으로 결과를 평가합니다.

그래서 우리는 (False로 취급) ""or"" == 3을 (이 False- 평가)이있다. 이 "" or False이됩니다. 두식이 모두 False -y이므로이 전체 식은 False으로 평가됩니다.

첫 번째 함수에서는 표현식의 값인 False을 반환합니다. 두 번째 함수에서 참인 경우에만 표현식의 값을 반환합니다. 거짓이라면 아무 것도 반환하지 않습니다.

파이썬에서 아무 것도 반환하지 않는 함수는 기본적으로 None을 반환합니다.

+0

당신은 낚시를하는 남자에게 가르쳤습니다. – Reno