传递列表以作为具有不完整 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
对于命名参数,请使用字典(但随后您必须像函数一样调用值 a
和 b
):
x = {"a": 1, "b": 2}
function1(**x) # prints 1 & 2
x = {"a": 1}
function1(**x) # prints 1 & 5
在函数调用中使用时,*
运算符将列表解包,**
运算符将字典解包到函数的参数中。
我正在编写一个程序(见下文),用户可以在其中设置参数 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
对于命名参数,请使用字典(但随后您必须像函数一样调用值 a
和 b
):
x = {"a": 1, "b": 2}
function1(**x) # prints 1 & 2
x = {"a": 1}
function1(**x) # prints 1 & 5
在函数调用中使用时,*
运算符将列表解包,**
运算符将字典解包到函数的参数中。