如果没有在函数中传递默认参数,将None转换为空列表的大多数Pythonic方法是什么?
我想编写一个通用函数,它接受两个输入变量var1,var2并返回两者的串联。
每个变量都有默认值None,可以是单个元素或一个list.
预期结果应该是一个列表(即使两个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
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]
THE END
二维码