如何在python中将可选参数传递到函数中?
我有一个函数,我想传递两个可选参数。我已经通读了一遍,但不知怎么的,我还是没能让它起作用 我错过了什么 我有类似的东西如何在python中将可选参数传递到函数中?,python,parameters,return,optional,Python,Parameters,Return,Optional,我有一个函数,我想传递两个可选参数。我已经通读了一遍,但不知怎么的,我还是没能让它起作用 我错过了什么 我有类似的东西 def json_response_message(status, message, option_key, option_value): data = { 'status': status, 'message': message, } if option_key: data[option_key] = o
def json_response_message(status, message, option_key, option_value):
data = {
'status': status,
'message': message,
}
if option_key:
data[option_key] = option_value
return JsonResponse(data)
最后两个参数我希望它是可选的
我已经在那里看到了,通过这样做是可以做到的
def json_response_message(status, message, option_key='', option_value=''):
但我真的不想这样做,我看到有一种方法可以传递
*args和**kwargs
,但它无法让它工作
我只是停留在放置可选参数上,但不确定如何调用和使用它们。我通读了一些帖子,它“很容易通过使用for循环来完成和调用”
,但不知怎么的,它对我来说就是不起作用
def json_response_message(status, message, *args, **kwargs):
data = {
'status': status,
'message': message,
}
return JsonResponse(data)
我想在我的数据返回中添加额外的参数,例如
user = {
'facebook': 'fb',
'instagram': 'ig'
}
return json_response_message(True, 'found', 'user', user)
{'user':'jim','status':True,'message':'found'}
{'user':'jim','status':True,'message':'found'}
我想你想要这样的东西:
def json_response_message(status, message, options=()):
data = {
'status': status,
'message': message,
}
# assuming options is now just a dictionary or a sequence of key-value pairs
data.update(options)
return data
您可以这样使用它:
user = {
'facebook': 'fb',
'instagram': 'ig'
}
print(json_response_message(True, 'found', user))
我想你想要这样的东西:
def json_response_message(status, message, options=()):
data = {
'status': status,
'message': message,
}
# assuming options is now just a dictionary or a sequence of key-value pairs
data.update(options)
return data
您可以这样使用它:
user = {
'facebook': 'fb',
'instagram': 'ig'
}
print(json_response_message(True, 'found', user))
“但我真的不想这样做”-为什么不呢?这两个选项中哪一个是您的预期输出<代码>{'status':状态,'message':消息,'user':{'facebook':'fb','instagram':'ig'}或
{'status':状态,'message':消息,'facebook':'fb','instagram':'ig'}
(即,您希望将可选参数作为字典附加到响应中,还是希望返回平面结构,但通过可选函数args添加多个键值对)?“但我真的不想这样做”-为什么不?这两个参数中的哪一个是您预期的输出?{'status':status,'message':message,'user':{'facebook':'fb','instagram':'ig'}
或{'status':status,'message':message,'facebook':'fb','instagram':'ig'}
(即,您希望将可选参数作为字典附加到响应中,还是希望返回平面结构,但通过可选函数args添加多个键值对)?这是一个比我的答案更好的答案,我建议用这个。这太棒了,只是我脑海中浮现了一些东西。有没有可能的方法放入多个字典?比如有两个/三个或更多选项?@Dora是的,你可以有你想要的任意多个可选参数。option1=(),option2=(),…
我猜是我的系统出了问题,它给了我错误,但重新启动后它工作得很好。但是如果我越来越喜欢它,有没有更好的方法。我一直在阅读关于**kwargs
的文章,这似乎很有帮助,但不知何故我无法在这种情况下使用它though@Dora您可以使用**kwargs
,但我会坚持使用args。唯一的区别是变量数量的容器,前者给你一个参数字典,后者给你一个参数元组。如果你只是想按顺序迭代它们并更新一些数据结构,元组可能正是你所需要的是一个比我的答案更好的答案,我建议用这个。这太棒了,只是我脑海中浮现了一些东西。有没有可能的方法放入多个字典?比如有两个/三个或更多选项?@Dora是的,你可以有你想要的任意多个可选参数。option1=(),option2=(),…
我猜是我的系统出了问题,它给了我错误,但重新启动后它工作得很好。但是如果我越来越喜欢它,有没有更好的方法。我一直在阅读关于**kwargs
的文章,这似乎很有帮助,但不知何故我无法在这种情况下使用它though@Dora您可以使用**kwargs
,但我会坚持使用可能的*args
。唯一的区别是变量数量的容器,前者提供一个参数字典,后者提供一个参数元组。如果您只是要按顺序迭代它们并更新某些数据结构,元组可能正是您所需要的。