【问题标题】:Python map and lambda combination gives errorPython map 和 lambda 组合给出错误
【发布时间】:2019-09-24 15:34:14
【问题描述】:

我正在尝试以下工作代码

from pyVmomi import vim
mapping = []
propertyDict = {'ipv4': '192.168.2.2/24'}
for k in propertyDict:
    v = propertyDict[k]
    mapping.append(vim.KeyValue(key=k, value=v))

ma​​plambda 如下

mapping.append(map(lambda k: vim.KeyValue(key=k,value=propertyDict[k]), propertyDict))

但在 For "propertyMapping" 预期类型 vim.KeyValue,但得到列表时出现错误,当我在 ma​​pping 值中使用它时下面的函数

if mapping:
    spec_params = vim.OvfManager.CreateImportSpecParams(entityName=vmname,
                                                         propertyMapping=mapping)

【问题讨论】:

    标签: python lambda pyvmomi


    【解决方案1】:

    map 函数返回具有多个值的迭代器,而不是单个值。

    你应该替换:

    mapping.append(map(lambda k: vim.KeyValue(key=k,value=propertyDict[k]), propertyDict))
    

    作者:

    mapping.extend(map(lambda k: vim.KeyValue(key=k,value=propertyDict[k]), propertyDict))
    

    此外,map 在 python 中很少使用。我们更喜欢列表推导。 我建议:

    mapping.extend(vim.KeyValue(key=k, value=v) for k,v in propertyDict.items())
    

    【讨论】:

    • 在正确的位置使用map 并没有什么大问题(您已经有一个现有的、理想的内置功能,可以完全满足您的需求)。但是如果你需要lambda 来使用map,是的,你应该使用列表推导式(渴望,如 Py2 map)或生成器表达式(懒惰,如 Py3 map)。
    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多