如果没有在函数中传递默认参数,将 None 转换为空列表的大多数 Pythonic 方法是什么?

Sha*_*Han 0 python function list default-arguments nonetype

我想编写一个通用函数,它接受两个输入变量var1var2并返回两者的串联。

每个变量都有默认值None,可以是单个元素或一个list.

预期结果应该是一个列表(即使两个var1var2None,它应该返回一个空列表[])。

下面是我的功能:

def my_func(var1=None, var2=None):
    if not isinstance(var1, list):
        var1 = [var1]
    if not isinstance(var2, list):
        var2 = [var2]
    return var1 + var2 
Run Code Online (Sandbox Code Playgroud)

当我只输入一个变量时,我得到以下信息:

def my_func(var1=None, var2=None):
    if not isinstance(var1, list):
        var1 = [var1]
    if not isinstance(var2, list):
        var2 = [var2]
    return var1 + var2 
Run Code Online (Sandbox Code Playgroud)

我想得到

>>> lst = my_func(var2=[1, 2, 3])
>>> print(lst)
[None, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在函数中转换None[]而无需更改默认None

hit*_*ter 6

而不是None您可以[]用作每个var.

def my_func(var1 = [], var2 = []):
    if not isinstance(var1, list):
        var1 = [var1]
    if not isinstance(var2, list):
        var2 = [var2]
    return var1 + var2 
        
lst = my_func(var2=[1, 2, 3])
print(lst)
Run Code Online (Sandbox Code Playgroud)

然而,正如用户mkrieger1在评论中建议的那样,这可能是一个坏主意,如这个问题“最小惊讶”和可变默认参数中所见,因此您可以这样做:

def my_func(var1 = None, var2 = None):
    var1 = [] if var1 is None else var1
    var2 = [] if var2 is None else var2

    if not isinstance(var1, list):
        var1 = [var1]
    if not isinstance(var2, list):
        var2 = [var2]
    return var1 + var2 

    
lst = my_func(var2=[1, 2, 3])
print(lst)
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)