Iは、次のコードを持っている。後者は生成しながら、奇妙な挙動
[sl for sl in [1,[2,3],4,5]]
さらに:iが(出力換算)等価であると考え
[e for e in [sl] for sl in [1,[2,3],4,5]]
:
[1,[2,3],4,5]
旧リターン:
[5, 5, 5, 5]
は、私はそれが必要だと思います入れ子になったfor-statements
の評価方法と何か関係があります。
ここでも同様のケースが見つかったが、匿名関数が使用されているため、この動作の原因は異なるはずです。
明らかに、私には何かがありません。私は見ません。
はパトリックが指摘したように、2 for
の順序が間違っているとsl
が前に定義されていない限り、実行すべきではありません任意の明確化
UPDATE
いただきありがとうございます。私は通訳の例を実行し、[sl for sl in [1,[2,3],4,5]]
がglobals()
で、リストの最後の値にsl
セットを残して最初に実行された今では、これが評価されるかを理解するために素晴らしいことだので、私はここで自分自身をだまさ
[5, 5, 5, 5]
であるためには、
[e for e in [sl] for sl in [1,[2,3],4,5]]
があります。
まあいや、それは実際にはそのラインだと私は例を実行しています通訳の中で。しかし、はい、あなたは本当に正しいです!以前は[1、[2,3]、4,5]でslを実行していたはずなので、 'sl'は' globals() 'のリストの最後の値に設定されたままです。それは逆の 'のためになぜ働いたのかも説明します。しかし、 'sl'をグローバル変数で' 5'に設定すると、[1、[2,3]、4,5]]のslの[e for e]の挙動をどのように説明できますか? –
私は、ローカルの 'for'の左端がグローバル変数を正しく上書きすることを理解しています。私はちょうど 'sl'が既に設定されているときに私のソリューションがどのように評価されるのか理解したいと思っています –
@holak私の編集をご覧ください(コメントに収まるように大きくなっています)。それでも助けなければ、もっとお気軽にお尋ねください。 –