Return 验证函数中的语句
Return statements in validation functions
我在浏览 https://github.com/python/cpython/blob/master/Lib/datetime.py 时偶然发现了一些类型检查函数(我简化了它们,原来是 _check_int_field)
def foo(year, month, day):
year = check_int(year)
month = check_int(month)
day = check_int(day)
check_int returns 输入的值(如果它是整数) - 如果不是,则引发 ValueError。让我缩短他们使用的功能:
def check_int(value):
if isinstance(value, int):
return value
if not isinstance(value, int):
raise TypeError('integer argument expected, got %s' % type(value))
我的问题是:return 语句背后的含义是什么?当然,您可以将其实现为
def check_int(value):
if not isinstance(value, int):
raise TypeError('integer argument expected, got %s' % value)
这会将 foo 函数更改为(您不必定义变量,而只需使用 foo 参数)
def foo(year, month, day):
check_int(year)
check_int(month)
check_int(day)
如果输入类型错误,这将引发 TypeError - 如果输入类型错误,则只需继续使用函数参数,而无需定义任何变量。那么为什么他们 return 输入变量,如果他们不修改它,而只是检查它呢?
总的来说,我同意纯验证函数也可以是 void
,即 return 什么都没有,如果需要则引发异常。
然而,在这种特殊情况下,_check_int_field
函数实际上是这样使用的:
year = _check_int_field(year)
这是有道理的,因为在 _check_int_field
他们这样做:
try:
value = value.__int__()
except AttributeError:
pass
else:
if not isinstance(value, int):
raise TypeError('__int__ returned non-int (type %s)' %
type(value).__name__)
return value
所以这个函数实际上做的不仅仅是验证。在这种情况下,函数 return 值是有意义的。
我在浏览 https://github.com/python/cpython/blob/master/Lib/datetime.py 时偶然发现了一些类型检查函数(我简化了它们,原来是 _check_int_field)
def foo(year, month, day):
year = check_int(year)
month = check_int(month)
day = check_int(day)
check_int returns 输入的值(如果它是整数) - 如果不是,则引发 ValueError。让我缩短他们使用的功能:
def check_int(value):
if isinstance(value, int):
return value
if not isinstance(value, int):
raise TypeError('integer argument expected, got %s' % type(value))
我的问题是:return 语句背后的含义是什么?当然,您可以将其实现为
def check_int(value):
if not isinstance(value, int):
raise TypeError('integer argument expected, got %s' % value)
这会将 foo 函数更改为(您不必定义变量,而只需使用 foo 参数)
def foo(year, month, day):
check_int(year)
check_int(month)
check_int(day)
如果输入类型错误,这将引发 TypeError - 如果输入类型错误,则只需继续使用函数参数,而无需定义任何变量。那么为什么他们 return 输入变量,如果他们不修改它,而只是检查它呢?
总的来说,我同意纯验证函数也可以是 void
,即 return 什么都没有,如果需要则引发异常。
然而,在这种特殊情况下,_check_int_field
函数实际上是这样使用的:
year = _check_int_field(year)
这是有道理的,因为在 _check_int_field
他们这样做:
try:
value = value.__int__()
except AttributeError:
pass
else:
if not isinstance(value, int):
raise TypeError('__int__ returned non-int (type %s)' %
type(value).__name__)
return value
所以这个函数实际上做的不仅仅是验证。在这种情况下,函数 return 值是有意义的。