我有一个Python函数,它接受一个数值参数,该参数必须是整数才能正常工作。在Python中,首选的验证方法是什么?
我的第一反应是这样做:
def isInteger(n):
return int(n) == n
但我忍不住想,这是一个昂贵的丑陋和3)受温柔的怜悯的机器epsilon。
Python是否提供了任何类型检查变量的本地方法?或者这被认为违反了语言的动态类型设计?
编辑:由于许多人问过这个问题,这个应用程序使用IPv4前缀,从纯文本文件中获取数据。如果任何输入被解析为浮点,则该记录应被视为格式错误并被忽略。
Tags:
这将检查
n
是否是Python int,并且仅是int。它不接受int
的子类。然而,类型检查并不适合“Python方式”。最好使用
n
作为int,如果它抛出异常,则捕获它并对其执行操作。如果您需要知道它是否是一个实际的int而不是int的子类(通常您不需要这样做):
这:
这不是一个好主意,因为跨类型比较可能是真的-特别是
int(3.0)==3.0
是的,正如埃文所说,不要打支票。试着使用这个值:
那没有打字机。好多了!让我们看看当我尝试时会发生什么:
这很有效,因为它是一个整数。嗯。让我们试试文字。
它显示了一个错误,TypeError,这就是它应该做的。如果打电话的人想知道,那是可能的。
如果你打字检查你会怎么做?显示错误对吗?所以你不必打字检查,因为错误已经自动出现了。
另外,由于您没有进行类型检查,因此可以使用其他类型的功能:
浮动:
复数:
小数:
甚至完全可以任意添加数字的对象!
所以你通过打字很明显什么也得不到。损失惨重。
更新:
既然您已经编辑了这个问题,现在很明显,您的应用程序调用了一些只有int才有意义的上游例程。
既然如此,我仍然认为应该将参数作为已接收的参数传递给上游函数。上游函数将正确处理它,例如,如果需要,将引发错误。我非常怀疑,如果你给IPs一个float,它处理IPs的函数会有奇怪的行为。如果你能告诉我们图书馆的名字,我们可以帮你查一下。
但是。。。如果上游函数的行为不正确,如果你给它一个浮点数(我仍然非常怀疑),就会杀死一些孩子,那么只要调用它上的
int()
:你仍然没有打字,所以你得到了不打字的最大好处。
即使如此,如果您真的想输入check,尽管它会降低应用程序的可读性和性能,但绝对没有任何好处,请使用
assert
来完成它。这样我们就可以关闭
assert
s,并通过调用它来从程序中删除这个<sarcasm>
特性相关问题 更多 >
编程相关推荐