Sha*_*Han 0 python function list default-arguments nonetype
我想编写一个通用函数,它接受两个输入变量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
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值?
而不是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)