[英]Python Docstring - two different types of arguments of a function
[英]How to support two types of function arguments in python
我想设计一个函数f(x)
其输入可以是
在第二种情况下, f(x)
应返回相应结果的列表。
我正在考虑将其设计如下。
def f(x):
if isinstance(x, list):
return [f(y) for y in x]
# some calculation
# from x to result
return result
这是一个很好的设计吗? 这样做的规范方法是什么?
不,这不是好设计。
设计函数只采用一种数据类型。 如果调用者只有一个项目,那么在调用之前将它们包装在列表中是微不足道的。
result = f([list x])
或者,让函数只接受一个值,调用者可以轻松地将该函数应用于列表:
result = map(f, [x, y, z])
当他们有一个列表时,他们可以轻松映射该函数(示例):
def f(x):
return x + 1 #calcuation
lst = map(f, [1, 2, 3])
print(lst) # [2, 3, 4]
并记住:该功能应该做一件事,做得好:)
我会避免它。 我最大的问题是,有时你会返回一个列表,有时你会返回一个对象。 我让它在列表或对象上工作,然后让用户处理包装对象,在列表解析中调用函数。
如果你确实需要让它同时工作,我认为你最好使用:
def func(obj):
if not isinstance(obj, list):
obj = [obj]
# continue
这样你总是会返回一个列表。
实际上,实施可能是有效的(但有改进的余地)。 问题是你正在创造一个暧昧和意想不到的行为。 最好的方法是有两个不同的函数f(x)
和f_on_list()
或类似的东西,其中第二个将第一个应用于列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.