Python中的默认参数不一致
在Python2.7中使用默认参数时,我遇到了意外的行为。一个参数被默认值覆盖,而不是使用调用方传入的值。考虑以下功能:Python中的默认参数不一致,python,python-2.7,Python,Python 2.7,在Python2.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
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\u列表
首先调用vm\u状态
作为字符串传入,例如“poweredOff”。在这个函数中,vm\u status
与预期的“poweredOff”相等,但是当我将值传递给vcenter\u connect
时,它会被默认参数None
覆盖。我在vcenter\u connect
中使用了其他默认参数,但它们按预期工作,也就是说,它们仅在未传入任何内容时使用默认值
运行相关部分来测试字符串值可以得到以下结果:
inside vm_list vm_stauts is poweredOff
inside vcenter_connect vm_stauts is None
我做错了什么?您将
vm\u status
作为第五个位置参数传递给vcenter\u connect
,但该函数的第五个位置参数是source\u vm
,因此vm\u status
将获得其默认值None
相反,您必须告诉它在前4个位置参数之后发送的关键字参数:
vmlist = vcenter_connect(server, user, password, vcenter_request, vm_status=vm_status)
您将
vm\u status
作为第五个位置参数传递给vcenter\u connect
,但该函数的第五个位置参数是source\u vm
,因此vm\u status
将获得其默认值None
相反,您必须告诉它在前4个位置参数之后发送的关键字参数:
vmlist = vcenter_connect(server, user, password, vcenter_request, vm_status=vm_status)
非常感谢。这就是诀窍。这对我来说是一个学习步骤,因为我不太习惯关键字参数。谢谢!这就是诀窍。这对我来说是一个学习步骤,因为我不太习惯使用关键字参数。