在函数中未传递默认参数的情况下,将None转换为空列表的最python方式是什么?

在函数中未传递默认参数的情况下,将None转换为空列表的最python方式是什么?,python,list,function,nonetype,default-arguments,Python,List,Function,Nonetype,Default Arguments,我想写一个通用函数,它接受两个输入变量var1和var2,并返回这两个变量的串联 每个变量都有默认值None,可以是单个元素或列表 预期的输出应该是一个列表,即使var1和var2都为None,它也应该返回一个空列表[] 以下是我的职责: def my_func(var1=None, var2=None): if not isinstance(var1, list): var1 = [var1] if not isinstance(var2, list):

我想写一个通用函数,它接受两个输入变量var1和var2,并返回这两个变量的串联

每个变量都有默认值None,可以是单个元素或列表

预期的输出应该是一个列表,即使var1和var2都为None,它也应该返回一个空列表[]

以下是我的职责:

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_funcvar2=[1,2,3] >>>printlst [无、1、2、3] 我想去

[1, 2, 3] 是否有任何方法可以将函数中的None转换为[],而不更改默认None值?

您可以使用[]作为每个变量的默认参数,而不是None

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

添加到@solif.py answer,以防您希望保留None值,因此默认值不是可变对象,然后运行简单测试,如下所示:

def my_func(var1=None, var2=None):
    if not var1:
        var1 = []
    if not var2:
        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)
关于函数参数的可变或不可变检查 编辑:

在进一步检查代码之后,实际上可以只更改if not isinstancevar1的列表行,如下所示:

def my_func(var1=None, var2=None):

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

    return var1 + var2


lst = my_func(var2=[1, 2, 3])
print(lst)
其他解决方案 注@Cid answer仅在等于无时才基本上更改参数var1或var2,因此可以执行以下操作:

输出


以下是我将从列表中删除所有“无”的方法:

def my_funcvar1=无,var2=无: lst=[] c=0 如果不是isinstancevar1,请列出: var1=[var1] 如果不是isinstancevar2,请列出: var2=[var2] lst=var1+var2 对于lst中的i: 如果i==无: lst.popc c+=1 返回lst lst=我的函数2=[1,2,3] printlst_ 我使用for循环迭代列表中的每个项。如果项==None,代码将删除它。

您可以首先检查变量1和2是否为None

这将涵盖许多情况,例如:

print(my_func(var2=[1, 2, 3]))
print(my_func(var1=None,var2=[1, 2, 3]))
print(my_func(var1=0,var2=[1, 2, 3]))
print(my_func(var1=False,var2=[1, 2, 3]))
print(my_func(var1='',var2=[1, 2, 3]))

我不认为这是…我的意思是它确实起作用,并给出所需的输出,不是吗?它确实起作用,但不是在问什么,检查另一个答案,你应该理解他在问什么
def my_func(var1=None, var2=None):

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


lst = my_func(var1=False, var2=[1, 2, 3])
print(my_func(var2=[1, 2, 3]))
print(my_func(var1=None,var2=[1, 2, 3]))
print(my_func(var1=0,var2=[1, 2, 3]))
print(my_func(var1=False,var2=[1, 2, 3]))
print(my_func(var1='',var2=[1, 2, 3]))
[1, 2, 3]                                                                                                                                                                                                                                       
[1, 2, 3]                                                                                                                                                                                                                                       
[0, 1, 2, 3]                                                                                                                                                                                                                                    
[False, 1, 2, 3]                                                                                                                                                                                                                                
['', 1, 2, 3]
def my_func(var1=None, var2=None):
    var1 = var1 if var1 is not None else []
    var2 = var2 if var2 is not None else []
    if not isinstance(var1, list):
        var1 = [var1]
    if not isinstance(var2, list):
        var2 = [var2]

    return var1 + var2
print(my_func(var2=[1, 2, 3]))
print(my_func(var1=None,var2=[1, 2, 3]))
print(my_func(var1=0,var2=[1, 2, 3]))
print(my_func(var1=False,var2=[1, 2, 3]))
print(my_func(var1='',var2=[1, 2, 3]))
[1, 2, 3]                                                                                                                                                                                                                                       
[1, 2, 3]                                                                                                                                                                                                                                       
[0, 1, 2, 3]                                                                                                                                                                                                                                    
[False, 1, 2, 3]                                                                                                                                                                                                                                
['', 1, 2, 3]