在函数中未传递默认参数的情况下,将None转换为空列表的最python方式是什么?
我想写一个通用函数,它接受两个输入变量var1和var2,并返回这两个变量的串联 每个变量都有默认值None,可以是单个元素或列表 预期的输出应该是一个列表,即使var1和var2都为None,它也应该返回一个空列表[] 以下是我的职责:在函数中未传递默认参数的情况下,将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):
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]