是的,正如埃文所说,不要打支票。试着使用这个值:def myintfunction(value):
""" Please pass an integer """
return 2 + value
那没有打字机。好多了!让我们看看当我尝试时会发生什么:>>> myintfunction(5)
7
这很有效,因为它是一个整数。嗯。让我们试试文字。>>> myintfunction('text')
Traceback (most recent call last):
File "", line 1, in
File "", line 3, in myintfunction
TypeError: unsupported operand type(s) for +: 'int' and 'str'
它显示了一个错误,TypeError,这就是它应该做的。如果打电话的人想知道,那是可能的。
如果你打字检查你会怎么做?显示错误对吗?所以你不必打字检查,因为错误已经自动出现了。
另外,由于您没有进行类型检查,因此可以使用其他类型的功能:
浮动:>>> print myintfunction(2.2)
4.2
复数:>>> print myintfunction(5j)
(2+5j)
小数:>>> import decimal
>>> myintfunction(decimal.Decimal('15'))
Decimal("17")
甚至完全可以任意添加数字的对象!>>> class MyAdderClass(object):
... def __radd__(self, value):
... print 'got some value: ', value
... return 25
...
>>> m = MyAdderClass()
>>> print myintfunction(m)
got some value: 2
25
所以你通过打字很明显什么也得不到。损失惨重。
更新:
既然您已经编辑了这个问题,现在很明显,您的应用程序调用了一些只有int才有意义的上游例程。
既然如此,我仍然认为应该将参数作为已接收的参数传递给上游函数。上游函数将正确处理它,例如,如果需要,将引发错误。我非常怀疑,如果你给IPs一个float,它处理IPs的函数会有奇怪的行为。如果你能告诉我们图书馆的名字,我们可以帮你查一下。
但是。。。如果上游函数的行为不正确,如果你给它一个浮点数(我仍然非常怀疑),就会杀死一些孩子,那么只要调用它上的int():def myintfunction(value):
""" Please pass an integer """
return upstreamfunction(int(value))
你仍然没有打字,所以你得到了不打字的最大好处。
即使如此,如果您真的想输入check,尽管它会降低应用程序的可读性和性能,但绝对没有任何好处,请使用assert来完成它。assert isinstance(...)
assert type() is xxxx
这样我们就可以关闭asserts,并通过调用它来从程序中删除这个特性python -OO program.py