【问题标题】:Python: How can I call a function that has another function as argument?Python:如何调用具有另一个函数作为参数的函数?
【发布时间】:2018-02-28 15:20:55
【问题描述】:

我有:

beta  = 0.95
alpha = 0.3
delta = 0.1

def k_bar(alpha, beta, delta):
    return ((1 / beta - 1 + delta) / alpha) ** (1 / (alpha - 1))
def c_bar(alpha, delta, k_bar):
    return k_bar ** alpha  - delta * k_bar

当我打电话时

k_bar(alpha, beta, delta)

我得到“2.63”。但 但是当我打电话时

c_bar(alpha, delta, k_bar) 

我得到“TypeError: unsupported operand type(s) for ** or pow(): 'function' and 'float'”

但是,我希望得到结果,并让函数作为参数在这种特定情况下工作。

我希望某人。可以帮帮我!

干杯,托比亚斯

【问题讨论】:

  • 您期望c_bar(alpha, delta, k_bar) 会返回什么?为什么?
  • k_bar 是一个函数 - 当您将一个函数与一个浮点数相乘时,您期望结果是什么?
  • 我希望 c_bar 有 1.0733311148204927,因为我在全局范围内定义了变量,并且我希望将 k_bar 调用的结果作为参数自动提交给 c_bar
  • 看起来您正在寻找c_bar(alpha, delta, k_bar(alpha, beta, delta)),但我看不出在任何情况下这是多么可取..
  • 所以你想要c_bar(alpha, delta, k_bar(alpha, beta, delta))?

标签: python function arguments call


【解决方案1】:

我怀疑你真正想要做的是有c_bar 调用 k_bar,像这样:

def k_bar(alpha, beta, delta):
    return ((1 / beta - 1 + delta) / alpha) ** (1 / (alpha - 1))

def c_bar(alpha, beta, delta):
    k = k_bar(alpha, beta, delta)
    return k ** alpha  - delta * k

你可以像调用k_bar一样调用它:

c = c_bar(alpha, beta, delta)

此调用将自动为您调用k_bar。


正如 ACascarino 正确指出的那样,您应该注意,您定义为函数参数的 alpha, beta, delta 与您在顶部定义的全局变量不同。在函数内部,alpha 将引用函数参数。

【讨论】:

  • 我想这是你第三次在我完成之前几秒钟发布答案!一如既往的好工作。我要为提问者添加的唯一内容是 全局变量 和 局部变量 之间存在区别;仅仅因为你说过一个函数接受名为alpha、beta和delta的参数,并不意味着它会使用同名的全局变量!
  • 您好,谢谢您的回答。在您的情况下,我将如何调用该函数以像 k_bar 一样查看结果: 编辑:即 k_bar(alpha, beta, delta) 编辑 2:也许我错误地使用了“调用”...我只是想要一个简单命令查看 c_bar 的结果仅提供 alpha、beta、delta 编辑 3:啊抱歉,它有效!我的坏,谢谢!!!
【解决方案2】:

我认为你对什么是函数有一些疑问。

根据你的cmets,你想做的事:

 k_bar = ((1 / beta - 1 + delta) / alpha) ** (1 / (alpha - 1))

这不是函数。

[初学者的一个小技巧,永远不要为两个不同的东西使用相同的变量名(比如 tour alpha,k_bar)。我让你更难找到错误:你期望在一个地方,但它在另一个地方]。

如果你发送一个函数作为参数,很好,但它仍然是一个函数,所以它需要参数:

def c_bar(alpha, delta, k_bar):
    return k_bar(alpha, beta, delta) ** alpha  - delta * k_bar(alpha, beta, delta)

注意:增量未在 c_bar 中定义。

【讨论】:

    【解决方案3】:

    只需调用:

    c_bar(alpha, delta, k_bar(alpha, beta, delta))

    这样你将k_bar的返回值传递给c_bar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2022-01-01
      • 2016-08-21
      • 2022-01-11
      • 2023-03-25
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多