次のコードは悪い習慣ですか?pythonはループの後でループ変数を再利用することを正式にサポートしていますか?
for i in some_values:
do_whatever(i)
do_more_things(i)
どういうわけか、それはforループ内のブロックの範囲に残るべき変数i
のように私には感じています。しかし、Python 2.7ではループの後で再利用できます。
pythonは正式にその機能をサポートしていますか、またはその言語を悪用していますか?
次のコードは悪い習慣ですか?pythonはループの後でループ変数を再利用することを正式にサポートしていますか?
for i in some_values:
do_whatever(i)
do_more_things(i)
どういうわけか、それはforループ内のブロックの範囲に残るべき変数i
のように私には感じています。しかし、Python 2.7ではループの後で再利用できます。
pythonは正式にその機能をサポートしていますか、またはその言語を悪用していますか?
はい、それは公式です:これらのことは、単に後に消えることはできません
for some_list[blah] in...
for some_object.foo in...
for a[:n] in ...:
など:for
後target listは単なる変数よりもはるかに多いこと
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
> The target list is not deleted when the loop is finished
http://docs.python.org/reference/compound_stmts.html#for
注意ループ。
これは機能ではありません。あなたが書いたように、変数はスコープ内にとどまります。それは通常のインタプリタの動作です。
Hmm、私はこれを否定しました。「これは機能ではありません」が一番上の答えと直接矛盾しているようですが、今質問を再読します。「私はループスコープだけが続く」という意味ではありません。私はあなたの言葉遣いが不明で、私が最初に持っていた解釈はより自然なもの(そして間違っている)であったと思うので、そこに下垂を残すつもりです。 –
Pythonは、CやJavaなどの言語から来ている場合は、スコープには少し特別な感じがすることができます。以前の答えによると、コードは絶対的に有効ですが、私はそれに対して推奨します。それは特に読めるコードを作成せず、さらにsome_values
が空であると判明した場合、コードの最後の行で例外が発生します。
あなたの質問への答えは - はい、正式にはサポートされていますが、ほとんどの場合、推奨戦略ではありません。
@petrと同じように、不自然に聞こえます。それが自然であるか、またはあなたがそれを使用しなければならないことが許されているからではありません。
それはbreak
ユースケースとロジックには適用されないかもしれないが、私はむしろ、このようなものを持っている:
for i in some_values:
do_whatever(i)
else:
do_more_things(i)
しかし、これはまだsome_values
が空と評価された場合NameError
を上げるが、明確に聞こえます。内側の範囲の明確な可読性を与えるものではありませんが、字下げはそれを示唆するかもしれません。
しかし、他の人が言っているように、特定の営業担当者の質問に答えるには、はい、合法です。
あなたは、いくつかの条件に一致する項目のためのリストをスキャンし、この技術を使用することができます。それが使用されているので、これはOKかもしれないよう
for item in iter:
if interesting(item):
break
else:
raise ValueError('iter is boring.')
handle(item)
なるほど...は思わ[ここ](http://stackoverflow.com/question/2138873/cleanest-way-to-get-last-item-from-python-iterator) – jamylak
次のコードでループ変数の最後の値にアクセスすることから利益を得るかなりの数のユースケースがあります –