0

以下の関数があるとします。

def f(x):
    """
    Turns x into a set.

    >>> given_x = ['a', 'b', 'c', 'd', 'e', 'f']
    >>> f(given_x)
    {'a', 'b', 'c', 'd', 'e', 'f'}

    """

    return set(x)

doctest を実行すると、(通常) 次のような結果になります。

Failure
**********************************************************************
File "/home/black/Dev/exp_2.py", line 6, in f
Failed example:
    f(given_x)
Expected:
    {'a', 'b', 'c', 'd', 'e', 'f'}
Got:
    {'d', 'e', 'f', 'c', 'a', 'b'}

関数が期待どおりに動作するため、明らかにこの失敗は発生するべきではありませんでしたが、結果が順序付けされていないために発生しました。


私の実際の関数の出力は、これよりもはるかに複雑になる可能性があります。内部に辞書、セット、リストを含む辞書である可能性があります。

一般的な解決策が必要です (ある場合)。sort()提示された例だけでは、実際の問題は解決しません。

質問:
順不同の出力が関係している場合に、doctest が (誤って) 失敗するのを防ぐにはどうすればよいですか?

4

2 に答える 2

0

Python セットの順序は保証されていないため、信頼することはできません。

私はあなたが信頼できるものを持っていることを強制します:

>>> given_x = ['z','a', 'a', 'b', 'c', 'd', 'e', 'f']
>>> type(f(given_x))
<type 'dict'>
>>> sorted(list(f(given(x))) 
['a', 'b', 'c', 'd', 'e', 'f','z']

期待されるタイプであること、実際にセットの「一意性」を実行したこと、および結果が期待どおりであることをテストします

于 2015-09-16T11:25:44.493 に答える