[英]How to override default python functions like round()?
我想覆蓋python的默認round()函數,因為我必須將round()函數的結果轉換為整數。 默認情況下,round()返回float中的值。 下面給出的代碼是返回錯誤消息。
RuntimeError:調用Python對象時超出了最大遞歸深度。
def round(number):
if type(number) is float: return int(round(number))
return None
與您現有的代碼的問題是,你已經覆蓋后的內置round()
方法,當你調用round()
自己的內round()
你是遞歸調用自己的功能,而不是內置的round
功能。
對於Python 3.x,您可以使用builtins
模塊訪問round()
內置函數 -
import builtins
def round(number):
if type(number) is float: return int(builtins.round(number))
return None
對於Python 2.x,它將是__builtin__
模塊 -
import __builtin__
def round(number):
if type(number) is float: return int(__builtin__.round(number))
return None
雖然我真的建議不要這樣做,而是為你的圓函數使用一個新名稱,也許像round_int
那樣。
請注意,另一件事是你的代碼將返回float
類型的舍入數字,對於所有其他類型,它將返回None
,我不確定這是否是故意的,但我猜你會想要返回number
為其他類型(ATLEAST int
?)。
正如已經指出的那樣,round指的是你的函數不是內置函數,因為你已經遮蔽了函數,而python看起來在本地,封閉,全局范圍內 ,最后內置的那個順序它看到圓形指的是你的函數所以你的函數本質上一直調用自己,直到你達到遞歸限制。
我會避免陰影圓函數,但更簡單的方法是try/except
向傳入的數字添加.5並捕獲TypeError:
def round(number):
try:
return int(number + .5)
except TypeError:
return None
如果你要檢查類型,你應該使用issinstance
,你可以將它與numbers.Number
結合起來檢查任何數字類型:
from numbers import Number
def round(number):
if isinstance(number, Number):
return int(number+.5)
return None
如果您只想檢查浮點類型:
def round(number):
if isinstance(number, float):
return int(number+.5)
return None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.