2016-10-01 9 views
0
for i in range(10): 
    s = 5 
    for j in range(10): 
     s = min(s) 

上記のコードは、IntelliJの2行目の警告としてこの質問のタイトルを示しています。"再宣言された上記の使用法を除いて定義済み"

CFGではネストされたループのために、おそらく2つの連続した書き込み(間に読み込みなし)がsにあるため、警告が表示されることは間違いありません。今まで私は警告を無視していましたが、安全な側になるためには私の仮説の確認を求めています。

+0

。 IDEはこれを行う理由がないことを指摘しています –

+0

これは合理的な仮定のようです。 's = 5'の後に' for'ループを実行するので、そのコードは冗長です。空のリストのようなものを列挙していた場合は、sを初期化するための正当な理由があります(それでも 'else'節が良いでしょう)が、ここではありません。 – tdelaney

答えて

0

あなたの仮説はほぼ正しいです。名前sは、囲まれたループで値が使用されたり変更されたりしていない整数にバインドされていましたが、入れ子にされたループ内で別の値(でもエラー)にリバウンドされます。最初の割り当ては外側のforループの繰り返しでは変更されないことに注意してください。

IDEの警告は、sが変更されていないため、ループ内の最初の割り当てが不要であることを示しています。割り当ては、同様に、より良い冗長結合および再バインドを防止しますforループの外に置かれている可能性があります:

s = 5 
for i in range(10): 
    ... 
0

それはそれは言うことです。 あなたはそれを使用したり定義したりせずに何かを作り直します。私にとって のように、例:

def car(e): 
    color = "blue" 
    print(color) 

def car(r): 

実行

エラーは、私が機能を再定義し、私の知る限り、私はそれが何かをしなかったことを行うことはできません。 私はこの機能を使用していましたが、私がそれを再定義していたことを認識していませんでした。あなたはそれを使用したことがないながらS` `に値を代入保つ

補正

def car(e): 
    color = "blue" 
    print(color) 

car(e) 
関連する問題