如何判断(或编写)无副作用的python函数?

pi

答案等于的定义side effects

到目前为止,我还没有找到确切的答案。python文档说:Functional style discourages functions with side effects that modify internal state or make other changes that aren’t visible in the function’s return value.

什么是modify internal statemake other changes that aren’t visible...

将变量绑定到对象(仅绑定而不修改)是否没有副作用?a=1a=[1,2,3]a,b=1,2

这是4个功能。它们都没有副作用吗?为什么?

注意,假设参数n必须是一个int对象。

def purefunc1(n):
    def getn(n):
        return [1,2,3,4,5][:n-1],[1,2,3,4,5][:n]
    def addn(fir,sec,thd):
        return fir+sec+thd
    return addn(getn(n)[0],['HEY'],getn(n)[1])

def purefunc2(n):
    def getn(n):
        #bind
        arr=[1,2,3,4,5]
        return arr[:n-1],arr[:n]
    def addn(fir=[],sec=[],thd=[]):
        return fir+sec+thd
    #bind
    arg1,arg3=getn(n)
    return addn(arg1,['HEY'],arg3)

def purefunc3(n):
    arr=[1,2,3,4,5]
    def getn(n):
        #closure 'arr'
        return arr[:n-1],arr[:n]
    def addn(fir=[],sec=[],thd=[]):
        return fir+sec+thd
    #bind
    arg1,arg3=getn(n)
    return addn(arg1,['HEY'],arg3)

def purefunc4(n):
    def arr():
        return [1,2,3,4,5]
    def getn(n):
        #closure
        return arr()[:n-1],arr()[:n]
    def addn(fir=[],sec=[],thd=[]):
        return fir+sec+thd
    #bind
    arg1,arg3=getn(n)
    return addn(arg1,['HEY'],arg3)

print (purefunc1(3))
print (purefunc2(3))
print (purefunc3(3))
print (purefunc4(3))

我的猜测:purefunc1没有副作用。但是我不知道下面的purefunc *。

输出为:

[1, 2, 'HEY', 1, 2, 3]
[1, 2, 'HEY', 1, 2, 3]
[1, 2, 'HEY', 1, 2, 3]
[1, 2, 'HEY', 1, 2, 3]    

如果您问为什么存在这样的奇数函数,答案就是为了方便。实际功能很复杂。但是如果您有兴趣,可以单击此处查看该功能ieval是否没有副作用。

谢谢大家。

超本能

Python的有关函数式编程的文档中,有一小段。我将在下面引用(强调我的意思):

以函数式风格编写的Python程序通常不会避免所有I / O或所有分配的极端情况取而代之的是,它们将提供功能正常的界面,但会在内部使用非功能性功能。例如,函数的实现仍将使用对局部变量的赋值,但不会修改全局变量或具有其他副作用。

换句话说,从外表上思考。函数是否正在修改某些全局变量,类变量?它会操纵任何状态吗?如果否,则其为根据以上文档,内部可以将函数分配给局部变量,但重要的是该函数不应修改任何面向外部的状态。


什么是修改内部状态并进行其他不可见的更改...?

看下面的例子。global_list每次调用时,我们都在修改non_pure_add1_func(..)

global_list = []

def non_pure_add1_func(x):
    global_list.append(x)
    return x+1

虽然,上面的功能可能是幂等的,但它并不纯净。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在函数式编程中如何避免副作用

来自分类Dev

如何应对这种副作用?

来自分类Dev

Scala中的“副作用词法关闭”与函数

来自分类Dev

如何处理Applicative的副作用?

来自分类Dev

phpDocumentor如何指定副作用?

来自分类Dev

正确设置可观察序列的从属谓词而无副作用的功能方法是什么?

来自分类Dev

如何通过副作用实现变量增量?

来自分类Dev

调用python Mock时如何运行函数(以获得副作用)?

来自分类Dev

将返回Option的副作用函数转换为迭代器

来自分类Dev

为什么Redux减速器必须无副作用?

来自分类Dev

如何记录Java副作用

来自分类Dev

pytest我如何模拟依赖于其父调用参数的函数调用的副作用

来自分类Dev

Pytest:设置具有无副作用的函数的模拟

来自分类Dev

可迭代,无副作用类型注释

来自分类Dev

如果我需要更新2个依赖变量,React挂钩如何仅执行一次副作用函数

来自分类Dev

复制构造函数的奇怪副作用

来自分类Dev

Python unittest.mock Google存储-如何实现异常。未找到副作用

来自分类Dev

如何清除“意外副作用”

来自分类Dev

以通用方式向函数添加副作用

来自分类Dev

如何在纯函数式编程中产生副作用?

来自分类Dev

如何判断(或如何编写)没有副作用的python函数?

来自分类Dev

如何处理Applicative的副作用?

来自分类Dev

函数式编程的副作用(球拍)

来自分类Dev

如何编写正确作用于列表的函数?

来自分类Dev

if里面奇怪的无副作用声明的含义

来自分类Dev

在/etc/apt/sources.list中保留一个backport条目是一个好主意吗?要进行更新,尤其是升级?无副作用?

来自分类Dev

为什么在编写一个不返回任何内容且没有副作用的函数时,C 编译器不会给出警告?

来自分类Dev

Python - 如何判断输入变量是否在函数中重复?

来自分类Dev

如何测试返回某些内容并具有副作用的函数?

Related 相关文章

  1. 1

    在函数式编程中如何避免副作用

  2. 2

    如何应对这种副作用?

  3. 3

    Scala中的“副作用词法关闭”与函数

  4. 4

    如何处理Applicative的副作用?

  5. 5

    phpDocumentor如何指定副作用?

  6. 6

    正确设置可观察序列的从属谓词而无副作用的功能方法是什么?

  7. 7

    如何通过副作用实现变量增量?

  8. 8

    调用python Mock时如何运行函数(以获得副作用)?

  9. 9

    将返回Option的副作用函数转换为迭代器

  10. 10

    为什么Redux减速器必须无副作用?

  11. 11

    如何记录Java副作用

  12. 12

    pytest我如何模拟依赖于其父调用参数的函数调用的副作用

  13. 13

    Pytest:设置具有无副作用的函数的模拟

  14. 14

    可迭代,无副作用类型注释

  15. 15

    如果我需要更新2个依赖变量,React挂钩如何仅执行一次副作用函数

  16. 16

    复制构造函数的奇怪副作用

  17. 17

    Python unittest.mock Google存储-如何实现异常。未找到副作用

  18. 18

    如何清除“意外副作用”

  19. 19

    以通用方式向函数添加副作用

  20. 20

    如何在纯函数式编程中产生副作用?

  21. 21

    如何判断(或如何编写)没有副作用的python函数?

  22. 22

    如何处理Applicative的副作用?

  23. 23

    函数式编程的副作用(球拍)

  24. 24

    如何编写正确作用于列表的函数?

  25. 25

    if里面奇怪的无副作用声明的含义

  26. 26

    在/etc/apt/sources.list中保留一个backport条目是一个好主意吗?要进行更新,尤其是升级?无副作用?

  27. 27

    为什么在编写一个不返回任何内容且没有副作用的函数时,C 编译器不会给出警告?

  28. 28

    Python - 如何判断输入变量是否在函数中重复?

  29. 29

    如何测试返回某些内容并具有副作用的函数?

热门标签

归档