0
デフォルトの引数を使用するとPython 2.7で予期しない動作が発生します。呼び出し元が渡した値を使用する代わりに、デフォルトで1つの引数がオーバーライドされています。次の関数を考えてみましょう: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
に他のデフォルト引数を使用していますが、それらは期待通りに働いている
文字列値をテストするためにrelevent部品を実行すると、私は、この与えます
inside vm_list vm_stauts is poweredOff
inside vcenter_connect vm_stauts is None
私は間違っていますか?
ありがとうございました!それはトリックです。これは、私がキーワードパラメータにあまり慣れていないので、私の学習ステップです。 –