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

我想编写一个通用函数,它接受两个输入变量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 
def my_func(var1=None, var2=None):
    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)
[None, 1, 2, 3]

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

回答

而不是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)

然而,正如用户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)

输出:

[1, 2, 3]


以上是如果没有在函数中传递默认参数,将None转换为空列表的大多数Pythonic方法是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>