使用默认参数时,我在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
我做错了什么?
答案 0 :(得分:2)
您将vm_status
作为第5个位置参数传递给vcenter_connect
,但该函数的第5个位置参数为source_vm
,因此vm_status
的默认值为{{1} }}
相反,您必须告诉它在前4个位置之后发送的关键字参数:
None