我想覆盖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函数使用一个新名称,例如round_int之类的。

请注意,另一件事是您的代码将返回float类型的舍入数字,对于所有其他类型,它将返回None,我不确定这是否是有意的,但是我想您会希望返回其他类型的number(至少int吗?)。

关于python - 如何覆盖默认的Python函数,例如round()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32822046/

10-12 22:16