《Think Python》第16章学习笔记

16.1 Time

16.2 纯函数(Pure functions)

纯函数不会对传入的参数(实参)做任何修改。

16.3 修改器(Modifiers)

与纯函数相反,修改器将会修改作为参数的对象。

一般而言,只要是合理的情况下,推荐使用纯函数,只有修改器有令人信服的优势时才使用修改器。这样的编程方式可以称为函数式编程风格(functional programming style)

16.4 原型 vs. 方案(Prototyping versus planning)

16.5 调试(Debugging)

某些必须为真的条件,比如某个变量的值必须大于 0,这样的要求称之为不变式(invariants)

在函数的开头,你应该检查传入的参数(实参)以保证它们是有效的,如果是无效的,可以使用 raise 语句抛出异常:

def valid_time(t):
if t.second < 0 or t.minute < 0 or t.hour < 0:
return False
if t.second >= 60 or t.minute >= 60 or t.hour >= 24:
return False
return True def add_time(t1, t2):
if not valid_time(t1) or not valid_time(t2):
raise ValueError("Invalid Time object!!!")
seconds = time_to_int(t1) + time_to_int(t2)
return int_to_time(seconds)

或者,也可以使用 assert 语句来检查已知的不变式,如果不变式的值为 False,则会抛出异常:

def add_time(t1, t2):
assert valid_time(t1) and valid_time(t2)
seconds = time_to_int(t1) + time_to_int(t2)
return int_to_time(seconds)

assert 语句非常有用,因为它区分了处理正常条件的代码和检查错误的代码。

最新文章

  1. 各种报错各种坑 webpack让我在学习的过程中一度想要放弃
  2. Debian7.7 wheezy 中源码安装emacs24
  3. MyEclipse自动提示
  4. hdu1248
  5. TCP三次握手中,为什么需要第三次握手?
  6. rxjava切换线程避免重复代码
  7. 怎么让 Lua 5.3.4 支持中文变量名和中文函数名
  8. 2018蓝桥杯 省赛B题(明码)
  9. unity3d-物理引擎
  10. TCP/IP协议、HTTP协议
  11. 宏(define)与常量(const)
  12. windows下vim中文乱码处理
  13. 第207天:HTTP协议头字段详解大全
  14. 【Pollard-rho算法】【DFS】poj2429 GCD &amp; LCM Inverse
  15. mysql内存参数整理和条调优以及内存统计
  16. Spark中RDD的常用操作(Python)
  17. Linux中Kibana部署
  18. vi编辑图
  19. Eloquent ORM模型中添加自定义值
  20. 【译】理解Spring MVC Model Attribute 和 Session Attribute

热门文章

  1. [Elixir005] 查看指定数据的详细信息 i helper
  2. win server 2012 R2 你需要先安装 对应于 KB2919355 的更新
  3. 学习React前端框架,报错 &#39;render&#39; is not defined no-undef
  4. linux 配置msyql
  5. 【题解】 洛谷P2340 奶牛会展
  6. 201621123023《Java程序设计》第10周学习总结
  7. 546. Remove Boxes
  8. Net Manager测试连接测试没有成功,用户权限问题,以管理员身份运行后测试成功
  9. NOI2019省选模拟赛 第五场
  10. iOS没你想的那么安全?