怎样写一个更好的Python函数?
然而,这并不料味着函数不能影响非局部变量或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代码时所做的那种)中,它们是全部函数中最安详的函数。 它们也很轻易被测试和维护,乃至比只是幂等函数更重要的是,测试它们根基上可以和执行它们一样快。 测试自己很简朴:没稀有据库毗连或其他外部资源举办模仿,也不必要安装代码,之后也没有什么必要整理的。 明晰地说,幂等性和纯函数只是一种祈望,不是必须的。也就是说,因为甜头许多,我们也许会但愿只编写纯函数或幂等函数,但这不实际。 重要的是,我们要故意识开始写代码来断绝副浸染和外部依靠性。这会使得我们编写的每一行代码都更轻易被测试。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |