赞
踩
这是 “Python 工匠”系列的第 5 篇文章。
毫无疑问,函数是 Python 语言里最重要的概念之一。在编程时,我们将真实世界里的大问题分解为小问题,然后通过一个个函数交出答案。函数即是重复代码的克星,也是对抗代码复杂度的最佳武器。
如同大部分故事都会有结局,绝大多数函数也都是以返回结果作为结束。函数返回结果的手法,决定了调用它时的体验。所以,了解如何优雅的让函数返回结果,是编写好函数的必备知识。
Python
函数通过调用 return
语句来返回结果。使用 returnvalue
可以返回单个值,用 returnvalue1
,value2
则能让函数同时返回多个值。
如果一个函数体内没有任何 return
语句,那么这个函数的返回值默认为 None
。除了通过 return
语句返回内容,在函数内还可以使用抛出异常(raise Exception)的方式来“返回结果”。
接下来,我将列举一些与函数返回相关的常用编程建议。
Python 语言非常灵活,我们能用它轻松完成一些在其他语言里很难做到的事情。比如:让一个函数同时返回不同类型的结果。从而实现一种看起来非常实用的“多功能函数”。
就像下面这样:
当我们需要获取单个用户时,就传递 user_id
参数,否则就不传参数拿到所有活跃用户列表。一切都由一个函数 get_users
来搞定。这样的设计似乎很合理。
然而在函数的世界里,以编写具备“多功能”的瑞士军刀型函数为荣不是一件好事。这是因为好的函数一定是 “单一职责(Single responsibility)” 的。单一职责意味着一个函数只做好一件事,目的明确。这样的函数也更不容易在未来因为需求变更而被修改。
而返回多种类型的函数一定是违反“单一职责”原则的,好的函数应该总是提供稳定的返回值,把调用方的处理成本降到最低。像上面的例子,我们应该编写两个独立的函数 get_user_by_id(user_id)
、 get_active_users()
来替代。
假设这么一个场景,在你的代码里有一个参数很多的函数 A,适用性很强。而另一个函数 B 则是完全通过调用 A 来完成工作,是一种类似快捷方式的存在。
比方在这个例子里, double
函数就是完全通过 multiply
来完成计算的:
对于上面这种场景,我们可以使用 functools<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。