在Python中,assert
是一个语句,而不是函数。这是一个深思熟虑的决定吗?将assert
作为语句(和保留字)而不是函数有什么好处?
根据thedocs,将assert expression1, expression2
展开为
if __debug__:
if not expression1: raise AssertionError(expression2)
文档还说“当编译时请求优化时,当前的代码生成器不会为assert语句发出代码。”在不知道细节的情况下,似乎需要特殊情况才能实现这一点。但是,一个特殊情况也可以用来优化对assert()
函数的调用。在
如果assert
是一个函数,则可以编写:
但是由于assert
是一个语句,元组的计算结果总是True
,并且
你得到了
SyntaxWarning: assertion is always true, perhaps remove parentheses?
正确的写法是
assert some_long_condition, \
"explanation"
可以说是不那么漂亮。在
python和其他语言(特别是C)中的
assert
的一个奇妙之处在于,您可以通过添加正确的#define
(在我使用过的任何编译器的命令行上可选地)或优化标志(-O
)来删除它们来优化代码。如果assert
变成了一个函数,那么这个特性将不可能添加到python中,因为直到运行时才知道您是否拥有内置的assert
函数或同名的用户定义函数。在还要注意,在python中,函数调用相当昂贵。用代码
if __debug__: ...
替换inline可能比执行函数调用要高效得多,如果在性能关键的例程中放入assert
语句,这可能会很有意义。在除了其他答案(有点离题),还有一个提示。为了避免使用反斜杠,可以在圆括号内使用隐式行连接。;—)
而不是:
你可以写:
^{pr2}$相关问题 更多 >
编程相关推荐