gpt4 book ai didi

python - 为什么 azure-sdk-for-python 返回对象

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:29 24 4
gpt4 key购买 nike

我最近开始研究 Azure SDK,但无法弄清楚为什么每个方法(由我测试)返回一个对象,而不是更“人类”友好的东西,即列表或字典。

即:

list(compute_client.virtual_machines.list_all())
[<azure.mgmt.compute.compute.v2017_03_30.models.virtual_machine.VirtualMachine object at 0x7f637f93c190>, <azure.mgmt.compute.compute.v2017_03_30.models.virtual_machine.VirtualMachine object at 0x7f637f93c750>, <azure.mgmt.compute.compute.v2017_03_30.models.virtual_machine.VirtualMachine object at 0x7f637f93cad0>, <azure.mgmt.compute.compute.v2017_03_30.models.virtual_machine.VirtualMachine object at 0x7f637f93ced0>]

返回似乎难以交互的对象有什么好处,即我需要查找每个方法来查找返回值等来处理列表,然后构建字典,这似乎需要更多工作需要。

我在 Microsoft blogs / githubs 之一中找到了此方法:

def print_item(group):
"""Print a ResourceGroup instance."""
print("\tName: {}".format(group.name))
print("\tId: {}".format(group.id))
print("\tLocation: {}".format(group.location))
print("\tTags: {}".format(group.tags))
print_properties(group.properties)

在我看来,这似乎效率很低,无法打印另一个方法的返回值。

有人可以建议为什么“对象列表”比“列表”更好,为什么不返回像 json 这样的东西。

最佳答案

简短回答:从任何实例只需调用 as_dict() 即可获取对象的字典 View 。

长答案:您获得的对象不仅仅是初始 JSON 的简单包装。它是由 OpenAPI 生成的解析负责:

  • 多态性
  • 键入的文字(日期时间、枚举等)
  • XML/JSON。无论使用何种初始媒体,该对象都是相同的,具体取决于端点的内容类型。

该对象本身包含多种方法,使其比简单的字典更复杂,例如 validate 来验证构建模型是否正确(即构建具有实时验证的 Web 表单)。

但是,作为消费者,Python 用户和您一样喜欢 dict,这就是 as_dict() 方法的目的。此方法甚至采用回调(访问者模式)来允许动态更改从此方法获得的字典序列化。

(我在 MS 的 Azure SDK Python 团队工作)

编辑:对于 list 操作,您将获得一个 Python 迭代器,它可以免费为您处理分页。您甚至不知道何时获取第二页。对于内存消耗,当您将其包装到 list() 中时,您会立即将所有内容加载到内存中。如果您在compute_client.virtual_machines.list_all()中使用for vm,那么内存中一次只有一页,而不是更多。如果您只需要几个对象,如果您有很多虚拟机可以利用迭代器(无论使用 for 循环或 next()StopIteration 异常)

关于python - 为什么 azure-sdk-for-python 返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51138004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com