【问题标题】:python function redefinepython函数重新定义
【发布时间】:2023-03-12 04:05:01
【问题描述】:

我想做这样的事情:

f = lambda x: None

x = [f]

def f(n):
    return n

print x[0](2)

预期结果是2,但实际上是None

我知道可以使用类来解决,但是没有它们也可以吗?

【问题讨论】:

  • 不,不是没有再做一次x[0] = fthis previous answer of mine 是否阐明了为什么这不起作用?
  • 好吧,@MartijnPieters 以前的答案很好(一如既往),只是不明白什么是严肃的用例,以你的例子为例。

标签: python function redefinition


【解决方案1】:

在这里,您正在创建一个匿名函数并将其添加到列表中。现在有两个引用指向 lambda。尽管您定义了另一个同名 f 的函数,但这不会影响列表中的引用,因为它指向 lambda。

你想在这里达到什么目的?

【讨论】:

    【解决方案2】:

    您在列表 x 中存储对函数的引用而不是其名称。

    你可以做类似的事情

    f = lambda x: None
    x = ['f']
    def f(n):
        return n
    
    print globals()[x[0]](2)
    

    但这有点“糟糕”。也许您可以解释一下您为什么要这样做,我们可以为您找到更好的方法。

    【讨论】:

      【解决方案3】:

      您可以将 f 设置为全局变量:

      全局函数
      f = λx: x+1

      x = f

      x(1)

      输出:2

      f = λx: x+2

      x = f

      x(1)

      输出:3

      【讨论】:

        【解决方案4】:

        嗯,这很简单(:。函数和其他任何东西一样都是一个对象。那么做什么

        x = [f]
        

        x[0] = f
        

        在你重新定义 f 之后?

        【讨论】:

          猜你喜欢
          • 2011-09-18
          • 1970-01-01
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 2021-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多