在python中使用关键字define定义函数_python等价于'define func()'或如何在python中注释掉函数调用...
盡管我認為這個問題是非常清楚和有效的(盡管有很多其他的回答),但簡短的回答是“Python不支持這個”。
除了preprocessor suggestion之外,唯一可能的解決方案是使用一些bytecode hacking。我甚至不會開始想象這在高級API中應該如何工作,但在低級API中,您可以想象檢查代碼對象的特定指令序列并重新編寫它們以消除它們。
例如,查看以下兩個函數:>>> def func():
... if debug: # analogous to if __debug__:
... foo
>>> dis.dis(func)
2 0 LOAD_GLOBAL 0 (debug)
3 JUMP_IF_FALSE 8 (to 14)
6 POP_TOP
3 7 LOAD_GLOBAL 1 (foo)
10 POP_TOP
11 JUMP_FORWARD 1 (to 15)
>> 14 POP_TOP
>> 15 LOAD_CONST 0 (None)
18 RETURN_VALUE
在這里,您可以掃描LOAD_GLOBAL的debug,并消除它和JUMP_IF_FALSE目標的所有內容。
這是一個更傳統的C-style debug()函數,它被預處理器很好地抹去了:>>> def func2():
... debug('bar', baz)
>>> dis.dis(func2)
2 0 LOAD_GLOBAL 0 (debug)
3 LOAD_CONST 1 ('bar')
6 LOAD_GLOBAL 1 (baz)
9 CALL_FUNCTION 2
12 POP_TOP
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
在這里,您將查找LOAD_GLOBAL的debug,并將所有內容擦除到相應的CALL_FUNCTION。
當然,除了最簡單的使用模式之外,這兩種描述都比實際需要的要簡單得多,但我認為這是可行的。如果沒人做過的話,會是一個可愛的項目。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在python中使用关键字define定义函数_python等价于'define func()'或如何在python中注释掉函数调用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打造无界体验!魅族Flyme 10无界生
- 下一篇: 20周年旗舰之作!魅族20系列正式发布