python教程—python的设计:为什么断言是一个语句而不是一个函数?-Python实用宝典

python教程—python的设计:为什么断言是一个语句而不是一个函数?

在Python中,assert是一个语句,而不是函数。这是一个深思熟虑的决定吗?将assert作为语句(和保留字)而不是函数有什么好处吗?

在Python中,assert是一个语句,而不是函数。这是一个深思熟虑的决定吗?将assert作为语句(和保留字)而不是函数有什么好处?

根据, assert expression1, expression2扩展到

    if __debug__: if not expression1: raise AssertionError(expression2)

文档还说,“当前的代码生成器在编译时请求优化时,不会为assert语句发出代码。”在不了解细节的情况下,似乎需要一个特殊的案例来实现这一点。但是,也可以使用特殊的情况来优化对assert()函数的调用。

如果assert是一个函数,可以这样写:

    assert(some_long_condition, "explanation")

但是因为assert是一个语句,所以元组的计算值总是True和
你得到

    SyntaxWarning: assertion is always true, perhaps remove parentheses?

正确的写法是

    assert some_long_condition, "explanation"

这可能不那么漂亮。

回答

将assert作为语句(和保留字)而不是函数有什么好处吗?

  1. 不能重新分配给用户函数,这意味着可以在编译时有效地禁用它,正如@mgilson指出的那样。
  2. 第二个可选参数的计算被推迟到断言失败时。对于函数和函数参数,这样做很不方便(需要传递一个lambda)。不延迟第二个参数的计算会带来额外的开销。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论