繁体   English   中英

如何在python中支持两种类型的函数参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM