Python 将列表传递为具有不完整列表项/缺少列表项的输入参数的优雅方式

Python 将列表传递为具有不完整列表项/缺少列表项的输入参数的优雅方式,python,list,function,parameters,default,Python,List,Function,Parameters,Default,我正在编写一个程序(见下文),用户可以在其中设置参数x[0]和x[1]。有时用户没有设置x[1],因为它并不总是需要(使用#x[1]=2进行测试)。如果没有设置x[1],我希望函数使用默认的b=5作为值。 当测试时,正如预期的那样,当调用function1时,它会给我一个错误,表示缺少x[1]。我试过多次使用“=None”等,但无法让它识别x[1]不存在,并使用b=5作为默认值 有人知道一种优雅的pythonian方法来实现这一点吗?(我想有一个简单的方法让我忘记了,或者作为初学者,我到现在还不

我正在编写一个程序(见下文),用户可以在其中设置参数x[0]和x[1]。有时用户没有设置x[1],因为它并不总是需要(使用#x[1]=2进行测试)。如果没有设置x[1],我希望函数使用默认的b=5作为值。 当测试时,正如预期的那样,当调用function1时,它会给我一个错误,表示缺少x[1]。我试过多次使用“=None”等,但无法让它识别x[1]不存在,并使用b=5作为默认值

有人知道一种优雅的pythonian方法来实现这一点吗?(我想有一个简单的方法让我忘记了,或者作为初学者,我到现在还不知道:)

谢谢,托比

def function1(a, b=5):
    print(a)
    print(b)

x={}
x[0]=1
#x[1]=2

function1(x[0],x[1])

您的函数定义可以保持不变:

def function1(a, b=5):
    print(a)
    print(b)
您调用函数的方式需要更改

对于位置参数,不要使用dict
{}
,请使用列表
[]

x = [1, 2]
function1(*x)     # prints 1 & 2

x = [1]
function1(*x)     # prints 1 & 5
对于命名参数,请使用dict(但随后必须像函数那样调用值
a
b
):


在函数调用中使用时,
*
运算符将列表解压,而
***
运算符将DICT解压到函数的参数中。

谢谢您的回复!这对我帮助很大!如果我的函数有3个输入变量,但用户只定义了Var1和Var3,中间的变量(Var2)丢失了,我将如何处理这种情况?@canedha在这种情况下,您需要使用基于命名参数的方法。位置参数不能有“洞”。如何使用命名参数调用函数?它们不是必须按正确的顺序排列吗?你是否有一个很好的链接来解释这一点谢谢你的帮助,非常感谢@我已经在回答中解释过了,也许你想再读一遍?我想你可以通过一个实验很快发现顺序是否重要。好的,我会试试:)顺便说一句,我不是懒得测试东西,我问这个问题的原因是我的时间非常有限,因为我的孩子太小。再次感谢你的帮助!真的很感激:)
x = {"a": 1, "b": 2}
function1(**x)     # prints 1 & 2

x = {"a": 1}
function1(**x)     # prints 1 & 5