我想覆盖python的默认round()函数,因为我必须将round()函数的结果转换为整数。默认情况下,round()以float形式返回值。 下面给出的代码是返回错误消息。如何覆盖像round()这样的默认python函数?
RuntimeError:调用Python对象时超出最大递归深度。
def round(number):
if type(number) is float: return int(round(number))
return None
我想覆盖python的默认round()函数,因为我必须将round()函数的结果转换为整数。默认情况下,round()以float形式返回值。 下面给出的代码是返回错误消息。如何覆盖像round()这样的默认python函数?
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
(至少int
?)。
只接受浮点数是有意的。我想通过四舍五入将小数转换为整数。 –
谢谢@anand s kumar。 –
正如所指出的,圆是指你的函数不是内建的功能,你已经阴影的功能和蟒蛇看起来在地方,封闭,全球范围内最后建宏依次看到它圆指的是你的函数,所以你的函数基本上一直调用自己,直到你达到递归限制。
我会避免阴影轮函数的所有,但一个更简单的方法将是一个try/except
增加.5传入的数量和捕获一个类型错误:
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
*我会尽量避免阴影。那么为这些例子使用另一个名称会更加一致吗? – Wolf
@Wolf,我说*我会尽量避免对圆形函数进行遮蔽,除非...... *,如果你打算这样做。提供的代码可以让OP阴影轮不需要使用内置函数。 –
为什么不直接用一个单独的名称定义一个新函数? – CoryKramer
你有无限的递归,因为你正在调用你在if条件中声明的同一个round()函数 - 无限! – Ananth
他在int()之前调用round(数字)...'number'将始终是原始参数传递 – Ananth