如何将可选参数传递给python中的函数?

时间:2017-04-14 23:33:04

标签: 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] = option_value
    return JsonResponse(data)

我希望它是最后两个参数是可选的。

我已经看到它可以通过

来完成
def json_response_message(status, message, option_key='', option_value=''):

但我并不是真的想这样做,并且发现有一种方法可以通过*args and **kwargs,但它无法让它工作。

我只是坚持使用可选参数但不确定如何调用和使用它们。我读了一些帖子及其帖子。很容易完成并使用for loop打电话,但不知何故它只是没有为我工作

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)

2 个答案:

答案 0 :(得分:2)

你想要这样的东西,我想:

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))

答案 1 :(得分:0)

def json_response_message(status, message, *args):

    #input validation
    assert len(args) == 0 or len(args) == 2

    # add required params to data
    data = {
    'status': status,
    'message': message,
    }

    # add optional params to data if provided
    if args:
      option_key = args[0]
      option_value = args[1]
      data[option_key] = option_value      

    return data

print(json_response_message(True, 'found', 'user', user))
  

{'user':'jim','status':True,'message':'found'}