2

次のコードで異なる結果が得られる理由がわかりません。

from datetime import datetime

def foo():
    return {datetime.now() : True}

a = {}
a.update(foo())
a.update(foo())
a.update(foo())

と:

a = {}
for i in xrange(3):
    a.update(foo())

前者aでは 3 つの要素で終了しますが、後者ではa(最後の反復から) 1 つの要素だけで終了します。

4

2 に答える 2

5

あなたの運だけです。2 番目のコードは 1 ミリ秒 (または OS によってはマイクロ秒) で実行される可能性が高く、3 つの同一の日時を指定します。試行を続けると、最終的に 2 つの要素になる可能性があります。運に依存するコードを書かないでください。

于 2013-03-12T15:31:40.230 に答える
3

foo最終的に得られる要素の数は、の粒度内でPythonへの呼び出しがいくつ実行されるかによって異なりますdatetime.now()

これをインタラクティブコンソールで実行している場合、プロンプトで実行されるステートメント間で、コンソールはハウスキーピング(たとえば、>>>プロンプトの表示)を実行します。これにより、次のステートメントが大幅に遅延しますが、forループの場合、ループ全体が実行されます。コンソールが何かをする前に。

于 2013-03-12T15:32:14.240 に答える