我正在尝试写当前执行函数的名称。但它不能正常工作。
当我将'print inspect.stack()[0][3]'
放在def func()
之后,它可以正常工作,但当我尝试将此命令放在if之后时,它什么都不打印。
import inspect
debug = True
def debug():
print inspect.stack()[0][3]
if debug==True:
print "test"
print inspect.stack()[0][3]
debug()
返回'debug'
,但应该返回
'debug'\n'test'\n'debug'
问题出在哪里?
答案 0 :(得分:1)
定义函数时:
def debug():
您正在从全局范围中删除对先前创建的变量debug
的最后一个引用。您将debug
变量从包含True
的布尔值重新定义为函数引用。因此不满足条件debug==True
(因为debug
现在是一个函数,而不是布尔值)。因此只有第一个print
语句有效(参见an illustrative demo)。
这将按预期工作,例如:
import inspect
debug = True
def f():
print inspect.stack()[0][3]
if debug==True:
print "test"
print inspect.stack()[0][3]
f()
这是Python中常见的错误,尤其是习惯于其他语言的人,其中函数名称以特殊方式处理。在Python中它们不是 - 在定义函数之后,您可以将其名称用作任何其他变量。这有很多优点,但有时可能会让人感到困惑。
答案 1 :(得分:0)
在python 3和high中你需要使用print()if。如果您没有()
,它将成为语法错误并且不会打印任何内容