Re: [問題]一個 遞迴的 return問題

看板Python作者 (嘟)時間8年前 (2016/04/08 10:34), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
有趣的問題。 從Python bytecode來看有細微的差別。 以下是用Python2.7跑的實驗。 結果是第一個寫法多了一些東西, 但我猜很難對效能產生大影響。 === 實驗一 import dis def f(i): if i == 0: return print(i) f(i-1) dis.dis(f) 實驗二 import dis def f(i): if i == 0: return print(i) return f(i-1) dis.dis(f) 結果一 4 0 LOAD_FAST 0 (i) 3 LOAD_CONST 1 (0) 6 COMPARE_OP 2 (==) 9 POP_JUMP_IF_FALSE 16 12 LOAD_CONST 0 (None) 15 RETURN_VALUE 5 >> 16 LOAD_FAST 0 (i) 19 PRINT_ITEM 20 PRINT_NEWLINE 6 21 LOAD_GLOBAL 0 (f) 24 LOAD_FAST 0 (i) 27 LOAD_CONST 2 (1) 30 BINARY_SUBTRACT 31 CALL_FUNCTION 1 34 POP_TOP 35 LOAD_CONST 0 (None) 38 RETURN_VALUE 結果二 4 0 LOAD_FAST 0 (i) 3 LOAD_CONST 1 (0) 6 COMPARE_OP 2 (==) 9 POP_JUMP_IF_FALSE 16 12 LOAD_CONST 0 (None) 15 RETURN_VALUE 5 >> 16 LOAD_FAST 0 (i) 19 PRINT_ITEM 20 PRINT_NEWLINE 6 21 LOAD_GLOBAL 0 (f) 24 LOAD_FAST 0 (i) 27 LOAD_CONST 2 (1) 30 BINARY_SUBTRACT 31 CALL_FUNCTION 1 34 RETURN_VALUE ※ 引述《sunnoset (skj)》之銘言: : f(10) : 和 : def f(i): : if i == 0: return : print(i) : return f(i-1)#加上return : f(10) : 執行結果一樣 : 10 : 9 : 8 : 7 : 6 : 5 : 4 : 3 : 2 : 1 : 但我好奇在背景是否有差別呢? : 謝謝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 70.114.251.20 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1460082875.A.53F.html

04/08 10:55, , 1F
因為沒return的情況 是當作return None
04/08 10:55, 1F

04/08 10:56, , 2F
誠實說 我不太理解為何要把這問題和遞迴併一起討論
04/08 10:56, 2F

04/09 01:20, , 3F
推byte code 順便推這個 http://pythonfasterway.cf/
04/09 01:20, 3F
文章代碼(AID): #1N1nYxK_ (Python)
文章代碼(AID): #1N1nYxK_ (Python)