加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

怎样写一个更好的Python函数?

发布时间:2018-10-18 01:08:17 所属栏目:大数据 来源:量子位
导读:Python固然好用,但用好真的很难。 尤其是函数部门,只要写欠好,后头的陆续串人城市遭殃。 看又看不懂,测试起来也贫困,维护又维护不动,真是让人头疼。 那怎么写好一个Python函数呢? 《Writing Idiomatic Python》一书的作者在Medium上颁发了一篇文章

然而,这并不料味着函数不能影响非局部变量或I / O流之类的工作。譬喻,假如上面add_three(number)的幂等版本在返回功效之前打印了功效,那么它如故被以为是幂等的,由于当它会见I / O流时,这个会见与从函数返回的值无关。

挪用print ( )只是一个副浸染:除了返回值之外,还与措施的其他部门或体系自己举办了一些交互。

让我们把我们的add_three(number)示例再向前推进一步。我们可以编写下面的代码片断来确定挪用add_three(number)的次数:

add_three_calls =

defadd_three(number):

"""Return *number* + 3."""

globaladd_three_calls

print(f'Returning')

add_three_calls +=1

returnnumber +3

defnum_calls():

"""Return the number of times *add_three* was called."""

returnadd_three_calls

我们此刻正在打印到节制台(一个副浸染)并修改一个非局部变量(另一个副浸染),可是因为这两者都不影响函数返回的值,它如故是幂等的。

纯函数没有副浸染。它不只不行使任何“外部数据”来计较值,除了计较和返回所述值之外,它与体系/措施的别的部门都没有交互。因此,固然我们新的add_three(number)界说如故是幂等的,但它不再是纯的。

纯函数没有日记语句或print ( )挪用。它们不行使数据库或互联网毗连。它们不会见或修改非局部变量。它们不挪用任何其他非纯函数。

简而言之,它们无法做到爱因斯坦所说的“远间隔鬼魂般的动作”(在计较机科学情形中)。它们不会以任何方法修改措施或体系的别的部门。

在呼吁式编程(编写Python代码时所做的那种)中,它们是全部函数中最安详的函数。

它们也很轻易被测试和维护,乃至比只是幂等函数更重要的是,测试它们根基上可以和执行它们一样快。

测试自己很简朴:没稀有据库毗连或其他外部资源举办模仿,也不必要安装代码,之后也没有什么必要整理的。

明晰地说,幂等性和纯函数只是一种祈望,不是必须的。也就是说,因为甜头许多,我们也许会但愿只编写纯函数或幂等函数,但这不实际。

重要的是,我们要故意识开始写代码来断绝副浸染和外部依靠性。这会使得我们编写的每一行代码都更轻易被测试。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读