【问题标题】:Enforcing side effects in python在 python 中强制执行副作用
【发布时间】:2012-05-09 04:36:33
【问题描述】:

是否有一种工具可以让您将函数/方法注释为“纯”,然后分析代码以测试所述函数/方法是否无副作用?

【问题讨论】:

    标签: python functional-programming code-analysis


    【解决方案1】:

    在 Python 世界中,这个问题没有多大意义,因为对象对函数调用中发生的事情有很大的发言权。

    例如,如何判断以下函数是否为纯函数?

    def f(x):
       return x + 1
    

    答案取决于 x 是什么:

    >>> class A(int):
            def __add__(self, other):
                global s
                s += 1
                return int.__add__(self, other)
    
    >>> def f(x):
            return x + 1
    
    >>> s = 0
    >>> f(A(1))
    2
    >>> s
    1
    

    虽然函数 f 看起来很纯粹,但对 x 的加法操作具有增加 s 的副作用。

    【讨论】:

    • 可以做的是检查f是否是纯的假设type(x) == int。由于 Python 是动态类型的,因此您必须手动添加类型注释。
    猜你喜欢
    • 2018-07-16
    • 2013-11-01
    • 2023-03-11
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2012-04-16
    相关资源
    最近更新 更多