碼的方法,就像數學,遵循「做的東西,括號內第一個」漂亮的標準convension,例如,如果你這樣做:
x = sin(1+5)
你會以爲,1+5
發生第一,然後做sin(6)
其中6
是內部操作1+5
的結果。完全相同的原理這裏:
Work.find(Play.strip().split()[0])
首先內表達Play.strip().split()[0]
被評估,然後操作Work.find
被稱爲與內表達作爲參數的結果。
又一次的內部操作從左稱爲向右很像數學,所以
Play.strip().split()[0]
會首先做Play.strip()
然後對這個結果做r.split()
然後的結果做r[0]
(其中r
是最後一部分的結果)
請注意,如果你真的想絕對difinitive答案然後dis
彙編代碼:
>>> import dis
>>> dis.dis(compile("Work.find(Play.strip().split()[0])","<example>","eval"))
1 0 LOAD_NAME 0 (Work)
3 LOAD_ATTR 1 (find)
6 LOAD_NAME 2 (Play)
9 LOAD_ATTR 3 (strip)
12 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
15 LOAD_ATTR 4 (split)
18 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
21 LOAD_CONST 0 (0)
24 BINARY_SUBSCR
25 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
28 RETURN_VALUE
好吧,也許會更混亂,然後有幫助...
但是你可以看到,前兩個CALL_FUNCTION
沒有參數,所以你可以扣除.strip()
然後.split()
被稱爲最後CALL_FUNCTION
這是與一個位置呼叫是Work.Play(<expression>)
。
非常感謝你 – lufee