【问题标题】:Rounding lambda function舍入 lambda 函数
【发布时间】:2017-03-31 11:49:14
【问题描述】:

我正在尝试创建一个 lambda 函数,该函数将对传递给它的值进行四舍五入,同时还指定了小数位数

我做了以下

c = lambda x: round(x, dp)

dp 已经被指定了

但是,尝试调用它会出现以下错误

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'int' object is not callable

当我输入时

c(23.2323332345435)

我可能半睡半醒,但我很确定这就是创建简单 lambda 函数的方式,但我不明白为什么它不起作用。

我试过用括号包裹起来无济于事

【问题讨论】:

  • 我很确定你使用/覆盖了round,这是除了 lambda 之外唯一可以调用的表达式。使用print(type(round)) 找出答案。
  • 你为什么首先使用lambda,而不是写def c(x): ...
  • 此外,该函数将在调用时使用全局dp的值,而不是在定义函数时使用dp的值.

标签: python python-3.x lambda


【解决方案1】:

如果您在定义 lambda 之前或之后不小心覆盖了 round,就会发生这种情况:

>>> c = lambda x: round(x, 5)
>>> c(34.44)
34.44
>>> round=12
>>> c(34.44)
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
  File "<interactive input>", line 1, in <lambda>
TypeError: 'int' object is not callable
>>> 

【讨论】:

    【解决方案2】:

    您必须在定义 lambda 函数之前定义 dp 的值。 那么只有它起作用了。

        dp=5
        c=lambda x,dp: round(x,dp)
        print c(56.3453453453432)
    

    如果你想在定义 lambda 函数后定义 dp 的值,那么你可以将两个值传递给 lambda 函数。

        c=lambda x,dp: round(x,dp)
        dp=5
        print c(56.3453453453432,dp) 
    

    【讨论】:

      【解决方案3】:

      您似乎对round 进行了跟踪。

      >>> c = lambda x: round(x)
      >>> c(13.4)
      13
      >>> round = 5
      >>> c = lambda x: round(x)
      >>> c(13.4)
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "<stdin>", line 1, in <lambda>
      TypeError: 'int' object is not callable
      

      检查您的代码,查找您为对象指定名称round 的任何位置。找到后,将其替换为其他名称。你可以阅读更多关于阴影here的信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 2021-07-27
        • 2014-06-10
        • 1970-01-01
        • 2022-11-17
        相关资源
        最近更新 更多