【发布时间】:2020-02-05 18:28:31
【问题描述】:
如果 Python 函数根据提供的参数返回不同的类型,这是一种好的代码风格吗?
def foo(bar):
if bar is None:
return None
elif bar == 1:
return 1*1
else:
return [b*b for b in bar]
foo 如果 bar 为 None,则返回 None
foo如果bar == 1返回1
foo 如果 bar 是元组/整数列表,则返回 int 列表
例子:
>> foo(None)
None
>> foo(1)
1
>> foo(1, 2, 3, 4)
[1, 4, 9, 16]
返回None 或int 应该没问题,但是否可以根据函数参数返回int 或ints 列表?您可能会争辩说这没问题,因为用户知道期望哪些返回类型并且不需要类型检查(在这种情况下我会说它不正确),但有人可能会争辩说最好将函数拆分为两个函数,一个期望 int 并返回 int,另一个期望 int 列表并返回 ints 列表。
【问题讨论】:
-
那么
foo(2)或foo('asd')呢?您需要处理更多案件,这取决于您的做法。 -
这完全取决于用例 - 例如,
json.loads(x)根据x的值返回不同的类型。 -
在我看来,如果你记录它就可以了
-
@Guy:我知道这个例子并不完整,需要更多的检查来处理不同的输入。我想保持这个例子简短。
-
简短回答:不。长答案:不。尽可能返回最受限制的类型。这样想:你将如何使用打字模块输入这个函数?类型可以是
Any或Union。这通常是麻烦的征兆。有例外,但它们非常具体。
标签: python python-3.x