python - 如何避免在 python 中编写两个重复函数 f(*list) 和 f(list=[])

标签 python

我想编写一个函数来处理[列表参数]和[几个单独的参数]

例如:合并几个字符串。 我如何编写单个函数(至少是相同的名称,如 C++ 中的重载)

def merge_1(*list):
    return ''.join(list)

def merge_2(list):
    return ''.join(list)

print(merge_1('a','b')) #get 'ab'
print(merge_2(['a','b'])) #also get 'ab'

最佳答案

要获得与 C++ 重载等效的效果,请将 merge 定义为接受任意数量的参数并检查它们:

def merge(*args):
    if len(args) == 1:
        return ''.join(args[0])
    else:
        return ''.join(args)

但是,这样做不是很Pythonic。 Python 函数可以自由利用它们可以用单个或多个参数灵活调用的事实。

例如,如果您选择使 merge 成为一个单参数函数,则可以使用 [...] 语法,merge([str1, str2, str3])。同样,如果您选择使 merge 成为一个多参数函数,它仍然可以通过使用 * 语法的预制列表来调用,例如合并(*list_of_strings)merge 是否接受单个或多个参数由您决定,并且可以根据更常见的用例来选择。您的来电者很容易适应这两种情况。

关于python - 如何避免在 python 中编写两个重复函数 f(*list) 和 f(list=[]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410958/

相关文章:

python - 从给定日期计算下一个和第三个工作日

python - 如何组合 python 列表并根据第一个元素在列表中创建列表?

python - 如果某些值是整数范围,而其他值是纯整数,如何对 pandas DataFrame 进行分组?

python - 在哪里可以找到 Python3 中的 WidgetRedirector?

Python modbus 通信使用 ModbusTcpClient 库在三菱 PLC 上读取单词

python - 两行 Python 代码导致 3 个执行 block

python - ImportError:使用 manage.py 时没有名为 django.core.management 的模块

python - 添加字符串列表中的数字

python - 无法使用自己的 url 配置 apprtc.appspot

python - python 中的 Zip 键值对