2017-04-07 20 views
0

私はウェブ全体を見てきましたが、私の質問に対する答えを見つけることができませんでした。私はいくつかのpythonコードを理解しようとするとこのようになりますクラス宣言に出くわしています:Pythonの構文について混乱しています

s_list = []  
last_name = "" 

def __init__(self, last_name, curr_date, difference): 
    self.last_name = last_name 
    self.s_list = {curr_date:difference} 
    self.d_list = [] 
    self.d_list.append(curr_date) 

中括弧の内側に何が起こっていますか?これは辞書を初期化していますか? nはn_dictは、クラスに関する情報が含まれている辞書であることと、n_dictに追加するために使用される一時的な辞書です

n = n_dict[last_name] 
n.d_list.append(curr_date) 
n.s_list[curr_date] = difference 

:その後、メインのファイルで、それはこのように使用されます。

なぜ{:}表記が使用されていますか?これは他の方法がありますか?

ご回答いただきありがとうございます。

+3

https://docs.python.org/2/tutorial/datastructures.html#dictionaries –

+1

はい、 '{curr_date:difference}'は辞書を初期化します。 'dict((curr_date、difference))'と書くこともできます。 – timgeb

+1

公正であるためには、 's_list'は辞書の名前が非常に貧弱です。これはPythonにはうってつけですが、次の開発者が何が起こっているのかを理解することが難しくなります。 –

答えて

1

{curr_date:difference}が匿名dictionary.Insteadを作成し、名前を持つ辞書を作成することができます。

dict_name={} 
dict_name[curr_date]= difference 
self.s_list=dict_name 

また、あなたもdict()を使用して辞書を作成することができます。 self.s_list=dict(curr_date=difference)

他のいくつかの方法がありますPythonで辞書を作成する!

+5

"匿名辞書"ではなく "辞書リテラル"。 –

+0

ありがとう!あなたの声明は正しいです! – nick

+0

'dict'だけではなく' dict_name'です。また、「名前付き辞書」。このようには動作しません: 'AttributeError: 'dict'オブジェクトには属性 'name'がありません。 dictオブジェクトで変数を初期化したばかりです。この辞書オブジェクトの名前が –

0

紛らわしいコードを説明していない答えにちょうど賛辞を言います。 実際、コードはかなり混乱しています。これには、グローバリゼーションとローカライズされた変数の概念が含まれ

# This is the global list variable 
s_list = []  

# this is the global 
last_name = "" 

def __init__(self, last_name, curr_date, difference): 
    # Everything define here is localised and will be used first 
    # pass value from given to last_name (not using above global last_name) 
    self.last_name = last_name 

    # This localised assignment make self.s_list a dictionary 
    self.s_list = {curr_date:difference} 
    # create another list 
    self.d_list = [] 
    self.d_list.append(curr_date) 

IMHO、例では、ローカル変数の対世界、そして一緒に悪い命名例とについて教え指すようにチュートリアルのいくつかの並べ替えです。

関連する問題