为什么azure sdk for python返回对象
我最近开始研究Azure的SDK,不明白为什么每个方法(由我测试)都返回一个对象,而不是更“人性化”的东西,即列表或字典 i、 e: 这似乎效率很低,无法打印另一种方法的返回值为什么azure sdk for python返回对象,python,azure,Python,Azure,我最近开始研究Azure的SDK,不明白为什么每个方法(由我测试)都返回一个对象,而不是更“人性化”的东西,即列表或字典 i、 e: 这似乎效率很低,无法打印另一种方法的返回值 有人能告诉我们为什么“对象列表”比“列表”更好吗?为什么不返回json之类的东西呢?简短回答:从任何实例调用as_dict()即可获得对象的dict视图 详细回答:您得到的对象不仅仅是围绕初始JSON的简单包装器。它由处理以下内容的解析生成: 多态性 类型化文字(日期时间、枚举等) XML/JSON。根据端点的内容类型
有人能告诉我们为什么“对象列表”比“列表”更好吗?为什么不返回json之类的东西呢?简短回答:从任何实例调用
as_dict()
即可获得对象的dict视图
详细回答:您得到的对象不仅仅是围绕初始JSON的简单包装器。它由处理以下内容的解析生成:
- 多态性
- 类型化文字(日期时间、枚举等)
- XML/JSON。根据端点的内容类型,无论使用何种初始媒体,对象都是相同的
验证
在构建模型时验证模型是否正确(即使用实时验证构建web表单)
然而,作为消费者,Python用户和您一样喜欢dict,这就是as_dict()
方法的目的。此方法甚至采用回调(访问者模式)来允许动态更改从该方法获得的dict序列化
(我在微软Azure SDK Python团队工作)
编辑:在
list
操作的情况下,您会得到一个Python迭代器,它免费为您处理分页。你甚至不知道什么时候取第二页。对于内存消耗,当您将其包装到列表()
中时,您将立即加载内存中的所有内容。如果在compute\u client.virtual\u machines.list\u all()中为vm使用,则内存中一次只能有一个页面,不能有更多页面。如果您只需要几个对象,那么如果您有很多虚拟机可以利用迭代器(无论是使用for
循环还是next()
和StopIteration
异常)感谢您给出了为什么使用对象的答案。关于您的只需调用为_dict()
,我需要从某处导入它还是需要将一个新方法定义为_dict()
?该方法位于所有返回的对象上:用于compute\u client.virtual\u machines中的vm。list\u all():print(vm.as\u dict())
。详细信息:
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>]
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)