2016-05-22 58 views
0

當使用默認參數時,我在Python 2.7中收到意外的行爲。而不是使用調用者傳入的值,一個參數將被默認值覆蓋。請看下面的功能:Python中的默認參數不一致

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傳過來的字符串第一次調用,如「已關閉的」。根據預期,vm_status的內部函數等於"poweredOff",但是當我將該值傳遞給vcenter_connect時,它將被默認參數None覆蓋。我在vcenter_connect中使用其他默認參數,但它們按預期工作,也就是說,它們只在使用默認值時纔會傳入任何內容。

運行相關部分以測試字符串值給我:

inside vm_list vm_stauts is poweredOff 
inside vcenter_connect vm_stauts is None 

我在做什麼錯?

回答

2

您傳遞vm_statusvcenter_connect第五位置參數,但該功能的第五位置參數爲source_vm,所以vm_status得到它的None默認。

相反,你必須告訴它的關鍵字參數你是第4名位置的人後發送:

vmlist = vcenter_connect(server, user, password, vcenter_request, vm_status=vm_status) 
+0

謝謝!這就是訣竅。這對我來說是一個學習的步驟,因爲我不太習慣關鍵字參數。 –