booleans()。example()始终返回True

时间:2019-05-14 02:39:56

标签: python python-hypothesis

要复制:

In [1]: from hypothesis import strategies as st

In [2]: bool_st = st.booleans()

In [3]: all(bool_st.example() for _ in range(1000))
Out[3]: True

为什么st.booleans().example()总是返回True?我的理解是,example方法应返回策略可以输出的示例,并且在某种程度上是随机的。

相关地,st.sampled_from(...)似乎永远不会返回可迭代的第一项:

In [1]: from hypothesis import strategies as st

In [2]: from collections import Counter

In [3]: samp_st = st.sampled_from(list(range(10)))

In [4]: examples = [samp_st.example() for _ in range(1000)]

In [5]: cnt = Counter(examples)

In [6]: cnt.most_common()
Out[6]: [(1, 512), (2, 282), (3, 119), (4, 55), (5, 22), (6, 5), (7, 4), (8, 1)]

那么这是怎么回事?

我知道example方法文档指出该方法“不应太当真”(请参见here)。但这提供了很少的解释方式,并且可以更好地了解发生这种情况的原因。

1 个答案:

答案 0 :(得分:1)

简单:.example()方法避免显示策略中最简单的示例,因为该示例通常很简单。诚然,这对st.booleans().example()没什么用,但这就是为什么!

对于您的评论,由于我们的唯一性检测受到限制,lists(...).example()不断产生空白列表-有关更多详细信息,请参见问题1864、1982和PR 1961。我们有一个好的方法会尽快修复它。

You can find the code for .example() here.