2017-05-16 5 views
0

これらの2つのコードブロックが同じことをしないのはなぜですか?Pythonで変数をNoneにインスタンシエート

category = None 
prodid_brand = None 
prod_type = None 
prod_application = None 
prod_handletype = None 
prod_series = None 

私のコードを以下のように「クリーンアップ」したいのですが、上記のコードと同じではありません。

column_list = [category, prodid_brand, prod_type, prod_application, 
       prod_handletype, prod_series] 

for col in column_list: 
    col = None 

また、コードの先頭ブロック以外のすべての変数をインスタンス化するための「クリーン」な方法があります。

+0

"ただし、上記のコードと同じように動作しません。 *どのように?* – TemporalWolf

+4

私はそれがまったく問題ないと思うので、あなたは 'NameError'sでいっぱいのリストを持っています。 https://nedbatchelder.com/text/names.htmlを読んでください。なぜあなたは彼らが同じことをやろうと思ったのかは明らかではありません。 – jonrsharpe

+0

'category = prodid_brand = prod_type = prod_application = prod_handletype = prod_series = None' – RobertB

答えて

3

に複数の変数を割り当てることができます

category = prodid_brand = prod_type = None 
prod_application = prod_handletype = prod_series = None 
+0

あなたはリストのインデックスを変更していません。リストは変更されません。リスト要素を知らない変数 'col'を変更するだけです。 – kindall

+0

@kindall良い点があります。もっと正確に答えを更新しました。 – CaptainPlanet

5

あなたが好きな割り当てをチェーンすることができます:あなたは他の回答がよりきれいに/効率的にすべての変数を設定するための素晴らしい方法です同じオブジェクト

var1 = var2 = None 
2

なし。しかし

、この質問に答えるために:

なぜコードのこれら2つのブロックが同じことをしませんの?

の理由は、あなたの最初の行

column_list = [category, prodid_brand, prod_type, prod_application, 
       prod_handletype, prod_series] 

あなたが実際にこれらの変数のそれぞれに等しい、リスト内の各インデックスで変数を設定していると、あります。だから、その後、次の行

for col in column_list: 
    col = None 

あなただけのこれらのリストインデックスのそれぞれの変数を変更し、(column_list[0] = Noneに相当)なしにそれらを設定することとなどcolumn_list[0] = categorycolumn_list[1] = prodid_brand

なぜ、初期変数(category,prodid_brandなど)も設定されていないため、代わりに6つのNone値のリストが表示されます。

0

あなたの質問「なぜこれら2つのコードブロックが同じことをしないのですか?「コードの

あなたの最初のブロックは、変数にNoneを割り当てることはありません - あなたのために変数colに値を割り当てる - コードの

あなたの第二のブロックは、それがリストcolumn_listを反復処理として変数を生成しているそれらを初期化する別名ループは、実際にcol作るあなたがループ内で変数を割り当てる場合

(別名、それが元のリストにそれを割り当てていない)Noneにだけそのループに評価しない -

column_list = [category, prodid_brand, prod_type, prod_application, 
      prod_handletype, prod_series] 

for index,value in enumerate(column_list): 
    column_list[index] = None 

が、これはあなたのリストを与えるInfactはされますなしの

column_list = [None,None,None,None,None,None]
ない
column_list = [category=None, prodid_brand=None, prod_type=None, prod_application=None, prod_handletype=None, prod_series=None]

は、多分あなたはより良いリストより辞書によって提供されるだろうように見えます。

関連する問題