나는이 동작에 부딪쳤을 때 어떻게 작동하는지 더 잘 이해하기 위해 람다 (lambda)로 뭔가를 시도하고있었습니다. 나는 내가 기능에 '창피'를 실행 한 코드 자체파이썬 2.7에서 깨진 람다?
>>> import sys
>>> sys.version
'2.7.3 (default, Sep 26 2013, 20:03:06) \n[GCC 4.6.3]'
>>> a = 5; b = 7
>>> func1 = lambda True: a if True else b
>>> func1(True)
5
>>> func1(False) # <== why?
7
>>> func2 = lambda x: a if True else b
>>> func2(True)
5
>>> func2(False)
5
을 대변하게됩니다 추측이 나온 것입니다 : 유일한 차이점은 LOAD_FAST와 LOAD_GLOBAL
사이>>> import dis
>>> dis.dis(func1)
1 0 LOAD_FAST 0 (True)
3 POP_JUMP_IF_FALSE 10
6 LOAD_GLOBAL 0 (a)
9 RETURN_VALUE
>> 10 LOAD_GLOBAL 1 (b)
13 RETURN_VALUE
>>> dis.dis(func2)
1 0 LOAD_GLOBAL 0 (True)
3 POP_JUMP_IF_FALSE 10
6 LOAD_GLOBAL 1 (a)
9 RETURN_VALUE
>> 10 LOAD_GLOBAL 2 (b)
13 RETURN_VALUE
func1의 '거짓'이 전혀 평가되지 않는 이유는 무엇입니까? 보조 노트에
, 3.3이 허용되지 않습니다>>> import sys
>>> sys.version
'3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)]'
>>> a = 5; b = 7
>>> func = lambda True: a if True else b
File "<stdin>", line 1
func = lambda True: a if True else b
^
SyntaxError: invalid syntax
예상되는 결과는 무엇입니까? – user2357112