要复制:
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)。但这提供了很少的解释方式,并且可以更好地了解发生这种情况的原因。
答案 0 :(得分:1)
简单:.example()
方法避免显示策略中最简单的示例,因为该示例通常很简单。诚然,这对st.booleans().example()
没什么用,但这就是为什么!
对于您的评论,由于我们的唯一性检测受到限制,lists(...).example()
不断产生空白列表-有关更多详细信息,请参见问题1864、1982和PR 1961。我们有一个好的方法会尽快修复它。