python - 将列表传递为具有不完整列表/缺失列表条目的输入参数的优雅方式
问题描述
我正在编写一个程序(见下文),用户可以在其中设置参数 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 {}
,使用 list []
:
x = [1, 2]
function1(*x) # prints 1 & 2
x = [1]
function1(*x) # prints 1 & 5
对于命名参数,请使用 dict (但您必须调用值a
and b
,就像函数一样):
x = {"a": 1, "b": 2}
function1(**x) # prints 1 & 2
x = {"a": 1}
function1(**x) # prints 1 & 5
在函数调用中使用时,*
运算符解包列表,**
运算符将字典解包到函数的参数中。
推荐阅读
- android - 使用 selenium 在 Android 上打开 ChromeBrowser
- javascript - return 语句是否返回匿名对象?
- java - 使用流和原始类型进行 Java 类型推断
- php - Symfony 自定义身份验证提供程序在请求重叠时注销
- javascript - 使用 Graphql 并做出反应,我无法从默认导出访问功能
- string - 你可以用字符串替换一些东西吗?
- scala - 队列的两种实现中速度差异的解释
- c - C链表removeLast使用指针
- javascript - 这是 url 编码的正确方法/此服务器是否正确处理解码?
- java - BufferedReader readLine 未使用 HttpURLConnection 到达流的末尾