2014-10-16 2 views
3

는 예를 보자이 잘 문제없이 실행일부 짧은 형식의 조건문이 파이썬에서 작동하고 일부 형식은 작동하지 않는 이유는 무엇입니까?

a = "foo" if True else "bar" 

. 걸릴 :

print("foo") if True else print("bar") 

이 오류가 발생합니다.

첫 번째 연산자는 삼항 연산자처럼 작동한다고 가정합니다. 전체 길이에 의존하지 않고 두 번째 문을 작성하는 방법이 있나요 : 조건부 표현의 펄의

print("foo") if True 

답변

3
  1. 모든 경로에 가깝다

    if True: 
        print("foo") 
    else: 
        print("bar") 
    

    뭔가, 평가 가능해야합니다.

  2. 파이썬 2.7에서, print is a statement은 기능이 아닙니다. 따라서 표현식으로 평가할 수 없습니다.

print 문은 점 2를 위반하므로 사용할 수 없습니다. 하지만 파이썬 3.x를 print is a function에서

print "foo" if True else "bar" 

을 수행 할 수 있습니다, 그래서 당신은 질문에서 언급 한대로 쓸 수

print 이후
print("foo") if True else print("bar") 

파이썬 3.x의에서 함수의 결과입니다 함수 호출은 함수 호출 표현식의 평가 결과가됩니다. 이것을 확인할 수 있습니다.

print(print("foo") if True else print("bar")) 
# foo 
# None 

기능이 명시 적으로 아무것도 반환하지 않습니다. 따라서 기본적으로 None을 반환합니다. print("foo")을 평가 한 결과는 None입니다.

+0

나는'continue'와 같은 것들을 문장으로 생각합니까? foo.startswith ("#")' –

+1

@TitoCandelli : [documentation] (https : //docs.python)에있는 문장 목록을 볼 수 있습니다. .org/2/reference/index.html). – BrenBarn

+1

@TitoCandelli 예,'continue','break' 및'pass'도 마찬가지입니다. 명령문은 실행할 수는 있지만 평가할 수는 없습니다. – thefourtheye