Python高级特性 断言 assert

Posted by 橙叶 on Mon, Jul 8, 2019

如果觉得自己并不聪明到轻松理解技术书上的内容(尤其是译本),可以在读完一本进阶书籍后,练习一段时间,然后再找另一本相关的书或者其它权威的资料,再读,直至自己的理解与权威的说法一致,写出的代码足够Pythonic同时又不会滥用特性。

练习是非常非常重要的,手头上要时刻有未完成的项目,坚持使用。其它语言亦是如此。

断言 assert

断言即assert语句,语句右边是两个表达式,第一个表达式的结果应当是一个布尔值,即这个表达式是一个判断操作;第二个表达式是可选的,用于指明错误内容。

assert 表达式1 [,表达式2]

当表达式1为假(如果表达式1的返回值不是布尔值,会调用它的bool()获得布尔值),就会中断程序并引发AssertionError:

>> assert False, "There's a bug"
Traceback (most recent call last):
   File "", line 1, in 
AssertionError: There's a bug         

Python对assert的处理,可以用以下代码来概括。

if __debug__:
   if not 表达式1:
      raise AssertionError(表达式2)

使用断言是寻找Bug的最佳方法。单纯地依靠错误上浮来寻找Bug所在有时并不高效。

但是断言并不能用来过滤数据,因为断言语句是可以被禁用的。在上一个代码块中就能反应出这一点:需要满足__debug__ == True。

在Python中使用断言时要注意的一个重点是,若在命令行中使用-O和-OO标识,或修改CPython中的PYTHONOPTIMIZE环境变量,都会全局禁用断言。3(《深入理解Python特性》)

所以,断言应当是面向开发人员的。

断言的用法相当简单,但是并不常见,我还是习惯通过错误找Bug,在实在是疑难杂症时也许会使用assert。

函数式编程

任意翻开某一本Python入门书的前几页,你可以看到这样的介绍:“Python万物皆对象”,鉴于此,Python可以胜任函数式编程。对Python来说,函数不过是可调用对象,任何实现了__call__方法的对象都可以当作函数来使用,函数的双括号则视为运算符。

<未完成>



comments powered by Disqus