これらの質問を経験しましたが、
- Pythonが複数の変数を同じ値に割り当てますか?リストの動作
タプルに関しては、変数は文字列、整数、または辞書にすることができます- 複数の変数を同時に宣言するよりエレガントな方法
質問には私が聞きたいことがありますが、受け入れられる答えは非常に複雑です
私が達成しようとしていることは、
この変数を宣言していますが、この宣言をできるだけ少ないコード行に減らしたいと思います。
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 = {}
最も簡単で保守しやすいものは何ですか?
他の回答にも同意しますが、ここで重要なポイントを説明したいと思います。
なしオブジェクトはシングルトンオブジェクトです。 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.
まず第一に、これをしないことをお勧めします。それは判読できず、非Pythonicです。ただし、次のようにして行数を減らすことができます。
details, product_base, product_identity, category_string, store_id, image_hash, image_link_mask, results = [None] * 8
abort = False
data = {}
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 = {}
それが私です。
これに役立つ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)]
これは質問に直接答えませんが、関連しています-空のクラスのインスタンスを使用して同様の属性をグループ化するため、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)