![机械工程师Python编程:入门、实战与进阶](https://wfqqreader-1252317822.image.myqcloud.com/cover/439/51753439/b_51753439.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.1 纯函数
让我们快速复习一下Python函数的语法:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/47_01.jpg?sign=1734534095-ymQqXy3RVJnWDdkDECoL9DMPO9B1bULT-0-cf299cc1b60c31adb7864cb424cb166e)
函数的定义从关键字def开始,后面是函数的名称和括号内的输入参数。冒号(:)标记函数头的结束。函数的主体代码需要缩进一级。
在函数式编程范式中,函数与其数学定义相似:输入到输出的映射。一个函数是纯函数,当且仅当:
❍输入相同时,输出始终相同;
❍没有副作用。
当该函数修改函数体以外的数据,或者修改函数的输入时,就会产生副作用。纯函数永远不会修改其输入参数。例如,以下函数是纯函数:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/48_01.jpg?sign=1734534095-6BWhx5RxnduOmT2m6YeqVjWwcAAiPlcI-0-f6bc75af040dab384404e316704ade67)
给定相同的输入点p和q,输出的向量总是相同,并且在函数体之外的任何东西都没有被修改。相比之下,以下代码是make_vector的“不纯”版本:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/48_02.jpg?sign=1734534095-01PJMi13NZsynPtEmHsGFoH55ZR1Xn1Q-0-b6097cdfe4d88f70278c9196465f4ab0)
这个代码使用last_point的共享状态,该状态在每次调用make_vector时都会改变。这种改变是该函数的一个副作用。函数返回的向量依赖于last_point的共享状态,因此对相同的输入点,该函数不会返回相同的向量。