首页 > 解决方案 > 将列表传递为具有不完整列表/缺失列表条目的输入参数的优雅方式

问题描述

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

标签: pythonlistfunctionparametersdefault

解决方案


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

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

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

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

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

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

对于命名参数,请使用 dict (但您必须调用值aand b,就像函数一样):

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

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

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


推荐阅读