我正在尝试创建一个使用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')
答案 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>
注意输入和输出的细微差别。