2017-03-31 89 views
2

我試圖創建一個lambda函數,將全面傳遞到它的值,以小數位的數量也指定舍入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函數,我不明白爲什麼它不會工作。

我試着在括號包圍無濟於事

+2

我很確定你使用/ overrode'round',這是表達式中除了lambda以外唯一可調用的。使用'print(type(round))'來查明。 –

+2

爲什麼你首先使用'lambda',而不是隻寫'def c(x):...'? – chepner

+0

此外,函數將在* *調用時使用全局'dp'的值,而不是函數被定義*時的'dp'值。 – chepner

回答

1

好像你的陰影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

2

那是,如果你不小心覆蓋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

你必須定義拉姆達功能之前定義DP的價值。 然後只有它的作品。

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

Here is the screenshot.

如果你想定義拉姆達功能後定義DP的值,那麼你可以傳遞兩個值的拉姆達功能。

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