尝试创建内联python对象的语法无效

时间:2017-03-21 22:53:42

标签: python python-2.7

我正在尝试创建一个使用lambda函数的小型内联对象,但我一直在为此行获取一个SyntaxError。据我所知,语法是正确的

  mock_popen.return_value = type('obj', (object,), {'communicate' : lambda :'hello','world'})

更新

如果其他人试图创建这样的模块对象...... 不要。下面的代码是解决问题的一种更清洁,更优雅的方式。

    mock_popen = MagicMock()
    mock_popen.return_value = mock_popen
    mock_popen.communicate.return_value = ('hello','world')

2 个答案:

答案 0 :(得分:2)

问题是最后一个表达式中的两个冒号; Python解析器不解析lambda冒号,后跟逗号分隔列表。关于是否是参数列表逗号或字典逗号,存在视觉上的模糊性。

将两个参数放在括号中,你应该没问题:

{'communicate' : lambda :('hello','world')}

输出(更改您的作业,因为ID未定义):

>>> type('obj', (object,), {'communicate' : lambda :('hello','world')})
<class '__main__.obj'>

答案 1 :(得分:1)

不完全。

>>> lambda: 'hello', 'world'
(<function <lambda> at 0x7fc13d86e758>, 'world')
>>> lambda: ('hello', 'world')
<function <lambda> at 0x7fc13d86e7d0>

注意输入和输出的细微差别。