Python 从函数体内部调用时正确分配的值,在pytest运行时失败
这里有一个简单的代码:Python 从函数体内部调用时正确分配的值,在pytest运行时失败,python,pytest,Python,Pytest,这里有一个简单的代码: 从集合导入订单数据 温度=[10,20,35,50] 手感='冷-暖-热极端'.split() 范围=拉链(温度、手感) def get_feel(温度): od=OrderedDict() 对于范围(0,10)内的i: od[i]=无 对于列表中的(作用域): 对于范围(s[0],121)内的i: od[i]=s[1] 返回od.get(温度) 在return子句之前运行打印输出,如: od.items()中的o的: 打印(o) 结果: (0, None) (1,
从集合导入订单数据
温度=[10,20,35,50]
手感='冷-暖-热极端'.split()
范围=拉链(温度、手感)
def get_feel(温度):
od=OrderedDict()
对于范围(0,10)内的i:
od[i]=无
对于列表中的(作用域):
对于范围(s[0],121)内的i:
od[i]=s[1]
返回od.get(温度)
在return
子句之前运行打印输出,如:
od.items()中的o的:
打印(o)
结果:
(0, None)
(1, None)
(2, None)
(3, None)
(4, None)
(5, None)
(6, None)
(7, None)
(8, None)
(9, None)
(10, 'cold')
(11, 'cold')
(12, 'cold')
[...]
另外,在return
子句之前调用od[temperature]
也会给出正确的输出
但是,pytest
run报告以下错误:
导入pytest
从feel import获得感觉
@pytest.mark.parametize(“输入参数,预期返回”[
(0,无),
(九,无),,
(10"冷"),,
(34,'温暖'),
(35,“热”)
])
def test_get_feel(输入参数,预期返回):
断言获取感觉(输入参数)=预期返回
错误:
input_argument = 10, expected_return = 'cold'
[...]
def test_get_feel(input_argument, expected_return):
> assert get_feel(input_argument) == expected_return
E AssertionError: assert None == 'cold'
[...]
该代码到底有什么问题?问题在于代码的结构方式。特别是线路
scopes = zip(temperatures, feels)
在全球范围内。第一次调用get_feel
时,od
中的所有键都设置正确(尝试将第一次测试更改为(10,'cold')
或任何其他正确值,您会看到)。但是,在任何后续调用中,作用域
生成器在第一次函数调用期间已经耗尽。因此,只有键0-10
才有值。将该行移动到get_feel的第一行,即
def get_feel(temperature):
scopes = zip(temperatures, feels)
od = OrderedDict()
工作,但很糟糕。真正的问题是,由于
od
始终包含相同的值,因此应该创建一次并通过新参数传递,或者,为了时间的利益,可以只在全局范围内创建。问题在于代码的结构方式。特别是线路
scopes = zip(temperatures, feels)
在全球范围内。第一次调用get_feel
时,od
中的所有键都设置正确(尝试将第一次测试更改为(10,'cold')
或任何其他正确值,您会看到)。但是,在任何后续调用中,作用域
生成器在第一次函数调用期间已经耗尽。因此,只有键0-10
才有值。将该行移动到get_feel的第一行,即
def get_feel(temperature):
scopes = zip(temperatures, feels)
od = OrderedDict()
工作,但很糟糕。真正的问题是,由于od
始终包含相同的值,因此应该创建一次并通过新参数传递,或者,为了节省时间,可以只在全局范围内创建