什么是python中的非纯函数?

2024-06-09 00:37:46 发布

您现在位置:Python中文网/ 问答频道 /正文

作为定义,我知道

non-pure functions have some input (their arguments) and return some output (the result of applying them) [...] and in addition [...] can also generate side effects, which make some change to the state of interpreter or computer.

(引自Building Abstractions with Functions (pdf))。

例如:print(2)函数除了作为副作用打印函数(不是python解释器)本身打印值之外,不返回任何内容(None)。

我的问题是:

在上面的定义中,我不理解“改变解释器或计算机的状态”的含义,这是什么意思?


Tags: andoftheinputoutputreturn定义pure
2条回答

如果函数满足两个重要的额外属性,我们将其称为pure函数:

  1. 只受输入影响的行为。 -如果函数代码依赖于主命名空间中未作为参数传入的变量(使其成为本地变量),则通常会失败。
  2. 对程序其余部分的影响只能通过其输出(返回值)来实现。

任何影响局部变量状态以外的任何状态的函数都是非纯函数。

更改全局是非纯的,例如:

some_list = []

def foo(bar):
    some_list.append(bar)

foo('baz')

函数foo改变了some_list的状态;因此它是非纯的。一个纯粹的版本是:

def foo(bar, lst):
    return lst + [bar]

some_list = []
now_list = foo('baz', some_list)

这里foo只通过接受输入参数并生成输出值来影响状态。原始的some_list对象也没有改变,而是返回了一个新对象。

纯函数还必须生成仅依赖于输入的输出;基于外部状态生成输入的函数也不是纯函数。time.time()不是纯的,它返回一个基于时钟状态的值,该时钟不是函数的输入。

相关问题 更多 >