Python中的默认参数不一致

时间:2016-05-22 23:26:42

标签: python python-2.7

使用默认参数时,我在Python 2.7中遇到了意外行为。一个参数被默认值覆盖,而不是使用调用者传入的值。请考虑以下功能:

def vm_list(domain, username, server, verbose, cluster, datacenter, name,
            regex, template_only, detailed_list, vm_status):

    print 'inside vm_list vm_stauts is', vm_status
    vcenter_request = "get_registered_vms"
    vmlist = vcenter_connect(server, user, password, vcenter_request, vm_status)

def vcenter_connect(server, user, password, request,
                    source_vm=None, target_vm=None,
                    res_pool=None, num=1, vm_status=None):

    print 'inside vcenter_connect vm_stauts is', vm_status

vm_list首先调用vm_status作为字符串传入,例如" poweredOff"。在此函数vm_status内部等于"poweredOff",但是当我将值传递给vcenter_connect时,它会被默认参数None覆盖。我在vcenter_connect中使用其他默认参数,但它们按预期工作,也就是说,它们仅在没有传入任何内容时使用默认值。

运行相关部分来测试字符串值可以得到:

inside vm_list vm_stauts is poweredOff
inside vcenter_connect vm_stauts is None

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您将vm_status作为第5个位置参数传递给vcenter_connect,但该函数的第5个位置参数为source_vm,因此vm_status的默认值为{{1} }}

相反,您必须告诉它在前4个位置之后发送的关键字参数:

None