【发布时间】:2010-12-27 02:47:15
【问题描述】:
我对 Python 还是很陌生,我正在努力适应它的动态类型。有时我有一个函数或一个类,它需要一个特定类型的参数,但可能会得到另一个对其强制的类型的值。例如,它可能期望float,但会收到一个整数或小数。或者它可能期望一个字符串,而是接收一个定义__str__ 特殊方法的对象。
将参数强制为正确类型(及其原因)的最佳做法是什么?我是在函数/类中还是在调用者中执行此操作?如果在调用者中,我是否也在函数中检查它?例如。
备选方案 1:
def myfunc(takes_float):
myval = float(takes_float)
myfunc(5)
备选方案 2:
def myfunc(takes_float):
myval = takes_float
myfunc(float(5))
备选方案 3:
def myfunc(takes_float):
assert isinstance(takes_float, float)
myval = takes_float
myfunc(float(5))
我已经阅读了this answer 和this one,他们说在 Python 中检查类型是“不好的”,但我不想浪费时间去追踪非常简单的错误,这些错误会立即被静态类型语言的编译器。
【问题讨论】:
-
不要这样使用
assert。断言用于记录在运行时不可能发生的条件,而不是用于验证输入。 -
是的,除非有错误,否则不可能发生。在备选方案 3 中,调用者必须转换值,这将是一个错误。
标签: python dynamic-typing