【问题标题】:Pass function negative as n argument将函数负数作为 n 参数传递
【发布时间】:2019-04-01 11:57:25
【问题描述】:

在 Python 中,我可以将一个函数作为参数传递给另一个函数,即:

inspect.getmembers(random, callable)

它将为我提供random 变量的所有可调用成员。而callable 是一个传递来执行检查的函数(只有满足检查的变量成员才会被返回)。

我的特殊问题是如何获取所有不可调用的参数,更广泛地说,有没有办法将函数的“反向”作为参数传递?

我试过这个:

inspect.getmembers(random, !callable)
inspect.getmembers(random, not callable)

第一个是语法错误,而第二个不起作用。

作为一种解决方法,我定义了自己的函数:

def uncallable(object)
    return not callable(object)

这样就可以了:

inspect.getmembers(random, uncallable)

但我想知道是否有更简单的解决方案。

【问题讨论】:

  • “比写那个函数更简单”?你需要多少个谓词? (不完全是修辞;值得考虑一下。)
  • 您可以使用匿名函数:inspect.getmembers(random, lambda x: not callable(x))

标签: python python-3.x python-3.6 metaprogramming


【解决方案1】:

只需使用 lambda:

inspect.getmembers(random, lambda x: not callable(x))

【讨论】:

    【解决方案2】:

    只需编写不可调用的包装器。

    据我所知,没有一种语言允许您期望的那种高级函数算术。

    没有办法让这样的概念普遍适用。

    这些函数的结果是什么:?

    ! len
    len + len
    len + ! len
    

    所以我们剩下的是显式编写的高阶函数,akka 函数将函数作为参数并返回类似这样的其他函数

    def negate(func):
        def wrapped(*args, **kwargs):
            return not func(*args, **kwargs)
        return wrapped
    
    uncallable = negate(callable)
    

    这些与 python 装饰器的模式相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2021-04-13
      • 2023-04-02
      • 2013-01-27
      • 1970-01-01
      相关资源
      最近更新 更多