2016-05-19 4 views
0

簡単な質問 - 私は pythonの複数の割り当て可読性

は、私が独立して設定された2つの変数を持っているとしましょう...グーグル経由で何かを見つけるように見えることはできません。 これらは同じ値を持つ必要があります。現在、これらの2つの変数は、新しい機能に統合されています。

まず、同じものであることを確認します。 そして、コードをもっとはっきりさせるために、3つの変数(id)を2つの値(id_1、id_2)に設定したいと思います。

id_1=5 
id_2=5 

# ensure id_1==id_2 
assert id_1 == id_2 

id=id_1 # option 1 
id=id_2 # option 2 
id=id_1=id_2 # option 3 

これを行うには正しい 'ピジョンソニック'な方法は何ですか。 最も読みやすいものは何ですか?または、これを達成するためのより良い方法があります(そして> 2初期変数へのスケール)?以前私は使用しました(オプション#1)。

+0

おそらく2つの初期変数のうちの1つを使用しています。 – user2357112

+0

エラーが同じでない場合はエラーをスローしたいのですか、または一方が他方の値を持つように設定するだけですか? –

+0

私はそれらが同じであることを要求しています。 assertステートメントはそれを保証します(そして終了します)。だから私はそれらが同じであることを保証したいと思います。もしそうなら、新しい変数を他の2つの値に設定してください。 – Bryan

答えて

1
def f(*args): 
    if args[1:] == args[:-1]: #test all args passed are equal 
     id = args[0] #set your 'id' to the first value 
    else: 
     return None # just as an example 
    # do things ... 
    return id 

>>> f(1,2,3,4) 
None 
>>> f(1,1,1,1) 
1 
+0

はい、これは便利ですが、回答には私が求めている質問の例も含まれています。この行 'id = args [0]'。仮定は、すべての値が同じであるとみなされた後に行われ、idを他の変数の1つに等しく設定するだけです。私の質問は、可読性を最大限にしようとしているときに、このタイプのロジックを処理するより良い方法があるかどうかです。 – Bryan

+0

これは私の答えです。これが私のやり方です。 – beoliver

+1

@Bryan Imhoこれは可読性を最大限にする方法です – gboffi

0

私はどうなる:

try: 
    id = id1 if id1==id2 else int('') 
except ValueError as e: 
    #fix it or 
    raise ValueError('id1 and id2 are different.') from e 

と複数の値のために:

try: 
    id = args[0] if len(set(args))==1 else int('') 
except ValueError as e: 
    #fix it or 
    raise ValueError('id1 and id2 are different.') from e 

私は通常、デバッグ目的のために主張するので、try文を保ちます。

0

私はあなたが本当に必要のない変数の束ではなく、リストを取ると定義したいと思いますが、anyを使ってそれらがすべて一致することを確認してください。それはまた名前なので、idが本当に変数のための偉大な名ではありません

id, *rest = list_of_values # this is Python 3 syntax, on earlier versions use something 
          # like `id, rest = list_of_values[0], list_of_values[1:]` 
assert(all(id == other_id for other_id in rest)) 

# do stuff here with `id` 

注こと:あなたは他のすべてに対して、最初のものをチェックし、他のすべての値に対してすべての値をチェックする必要はありません。 (あなたのコードはその名前がシャドウされるので、あなたのコードは使えません)。 idが特定の種類のオブジェクトを表す場合は、その目的がより明確であるように、foo_idのような名前を使用することがあります。

関連する問題