web-dev-qa-db-ja.com

Python複数の変数を同じ初期値に初期化する

これらの質問を経験しましたが、

  1. Pythonが複数の変数を同じ値に割り当てますか?リストの動作
    タプルに関しては、変数は文字列、整数、または辞書にすることができます
  2. 複数の変数を同時に宣言するよりエレガントな方法
    質問には私が聞きたいことがありますが、受け入れられる答えは非常に複雑です

私が達成しようとしていることは、

この変数を宣言していますが、この宣言をできるだけ少ないコード行に減らしたいと思います。

details = None
product_base = None
product_identity = None
category_string = None
store_id = None
image_hash = None
image_link_mask = None
results = None
abort = False
data = {}

最も簡単で保守しやすいものは何ですか?

14
Rivadiz

他の回答にも同意しますが、ここで重要なポイントを説明したいと思います。

なしオブジェクトはシングルトンオブジェクトです。 Noneオブジェクトを変数に何回割り当てるか、同じオブジェクトが使用されます。そう

x = None
y = None

等しい

x = y = None

しかし、Pythonの他のオブジェクトで同じことをすべきではありません。例えば、

x = {}  # each time a dict object is created
y = {}

等しくない

x = y = {}  # same dict object assigned to x ,y. We should not do this.
28
Shan

まず第一に、これをしないことをお勧めします。それは判読できず、非Pythonicです。ただし、次のようにして行数を減らすことができます。

details, product_base, product_identity, category_string, store_id, image_hash, image_link_mask, results = [None] * 8
abort = False
data = {}
21
Aske Doerge

details, producy_base, product_identity, category_string, store_id, image_hash, image_link_mask, results = None, None, None, None, None, None, None, None; abort = False; data = {}

それが私です。

9
DasFranck

これに役立つ1行のラムダ関数を使用しています。

nones = lambda n: [None for _ in range(n)]
v, w, x, y, z = nones(5)

ラムダはこれと同じものです。

def nones(n):
    return [None for _ in range(n)]
3
jerblack

これは質問に直接答えませんが、関連しています-空のクラスのインスタンスを使用して同様の属性をグループ化するため、initそれらをすべてリストする方法。

class Empty:
    pass

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.w = Empty()          # widgets
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.w.entry = tk.Entry(self, bg="orange", fg="black", font=FONT)

SimpleNamespaceと空のクラス定義の違いは何ですか?

0
Stan