4

私は現在持っています:

tmp = myfunc()
mydict[mykey] = tmp
return tmp

..少し長すぎるようです。JavaScriptでは、次のことができます:

return (mydict[mykey] = myfunc()) 

上記のPythonコードはそれを行うための受け入れられた方法ですか、それとも他に何かありますか?

編集:私は次の可能性を認識しています:

mydict[mykey] = myfunc()
return mydict[mykey]

..しかし、キールックアップを 2 回実行したくありません。そうでもなければ

4

3 に答える 3

12
tmp = mydict[mykey] = myfunc()
return tmp
于 2012-07-03T02:19:14.507 に答える
4

コード行を減らしたい場合は、これを行うことができます。

mydict[mykey] = myfunc()
return mydict[mykey]

ただし、代入は Python の式ではないため、javascript バージョンを実行することはできません。


編集:キーが辞書にないことがわかっている場合は、次のことができます。

return mydict.setdefault(mykey, myfunc())

setdefaultキーがディクショナリにない場合、キーを 2 番目の値に設定するルックアップ関数です。


ヘルパー関数を書くこともできます:

def set_and_return(d, k, v):
    d[k] = v 
    return v

次に、他のどこでも、次のことができます。

return set_and_return(mydict, mykey, myfunc())
于 2012-07-03T02:11:20.943 に答える
2

意見はさまざまですが、これが私の 0.02 ドルです。

  1. デフォルトの辞書は使用しないでください。私があなたのコードを読んでいる場合、あなたが何を知っているか、辞書にキーがないことを私は知らないかもしれません。誰かが後でコードを更新し、その暗黙の仮定に違反すると、コードが壊れる可能性があります。
  2. 「set_and_return」関数は使用しないでください。あなたのコードは賢いかもしれませんが、読みにくいです。より多くの行をたどるのが難しくなり、関数ルックアップのコストは辞書ルックアップと同じになります。
  3. @gnibbler素敵な「コード行数が少ない」ソリューションがありますが、私はそれをお勧めしませんし、多くのpythonソースを読んでも、その構文はめったに見ません(他のどこよりも関数の開始時に多くなります)

javascript でそれがどのように行われるかを評価しますが、それを行うための受け入れられた方法については、私はあなたの元の形式に投票し、読みやすく理解しやすく、他のどのソリューションよりも遅くも効率的でもありません。

tmp = myfunc()
mydict[mykey] = tmp
return tmp
于 2012-07-03T02:44:26.767 に答える