相关疑难解决方法(0)

python的设计:为什么断言声明而不是函数?

在Python中,assert是一个语句,而不是一个函数.这是一个刻意的决定吗?assert成为一个声明(和保留字)而不是一个函数有什么好处吗?

根据 文件,assert expression1, expression2扩大到

if __debug__:
    if not expression1: raise AssertionError(expression2)
Run Code Online (Sandbox Code Playgroud)

文档还说"当编译时请求优化时,当前代码生成器不会为assert语句发出代码." 在不知道细节的情况下,似乎需要一个特殊情况才能实现这一目标.但是,一个特殊情况也可用于优化对assert()函数的调用.

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

assert(some_long_condition,
       "explanation")
Run Code Online (Sandbox Code Playgroud)

但因为assert是一个声明,元组总是评估True,你得到

SyntaxWarning: assertion is always true, perhaps remove parentheses?
Run Code Online (Sandbox Code Playgroud)

写它的正确方法是

assert some_long_condition, \
       "explanation"
Run Code Online (Sandbox Code Playgroud)

这可能不那么漂亮了.

python assert language-design

54
推荐指数
4
解决办法
4049
查看次数

标签 统计

assert ×1

language-design ×1

python ×1