如何在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
。唯一的区别是变量数量的容器,前者提供一个参数字典,后者提供一个参数元组。如果您只是要按顺序迭代它们并更新某些数据结构,元组可能正是您所需要的。