我正在嘗試使用lambdas,以更好地理解它們在遇到此行爲時的工作方式。我想我會讓本身在Python 2.7中破碎的lambda?
>>> 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
代碼講我的職能跑「解散」,這是什麼就出來了:
>>> 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
唯一的區別是LOAD_FAST和LOAD_GLOBAL
之間爲什麼func1中的'False'得到評估?
在一個側面說明,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