传递列表以作为具有不完整 list/missing 列表条目的输入参数的优雅方式

Elegant way for passing list to function as input arguments with incomplete list/missing list entries

我正在编写一个程序(见下文),用户可以在其中设置参数 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)

您调用函数的方式需要改变。

对于位置参数,不要使用字典 {},使用列表 []:

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

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

对于命名参数,请使用字典(但随后您必须像函数一样调用值 ab):

x = {"a": 1, "b": 2}
function1(**x)     # prints 1 & 2

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

在函数调用中使用时,* 运算符将列表解包,** 运算符将字典解包到函数的参数中。