একই সাথে একাধিক ভেরিয়েবল ঘোষণার আরও মার্জিত উপায়


140

"একই সময়ে" একাধিক ভেরিয়েবল ঘোষণা করার জন্য আমি করব:

a, b = True, False

তবে যদি আমাকে আরও অনেকগুলি ভেরিয়েবল ঘোষণা করতে হয় তবে এটি কম এবং কম মার্জিত হয়:

a, b, c, d, e, f, g, h, i, j = True, True, True, True, True, False, True ,True , True, True

এটি করার কি আরও ভাল / মার্জিত / সুবিধাজনক উপায় আছে?

এটি অবশ্যই খুব বেসিক, তবে আমি যদি ভেরিয়েবলগুলি সংরক্ষণ করার জন্য একটি তালিকা বা একটি টিপল ব্যবহার করি তবে কীভাবে আমার কাছে যেতে হবে যাতে আমি সহায়ক হব:

aList = [a,b]

বৈধ নয়, আমাকে করতে হবে:

a, b = True, True

বা আমি কী মিস করছি?


এই মানগুলি সংরক্ষণ করার জন্য একটি তালিকা ব্যবহার করবেন? একটি অভিধান? ক (নাম) টিপল?
জেফ মার্কাডো

@ ক্রিস: আমি সেখানে যাচ্ছিলাম। :)
জেফ মার্কাডো

@ জেফএম: সম্ভবত তবে আমি কীভাবে এটি করতে পারি তা মনে হয় না যে তালিকাতে অন্তর্ভুক্ত হওয়ার জন্য তাদের সংজ্ঞায়িত করতে হবে (আমি অবশ্যই ভুল হতে পারি)
ট্রাফা

3
@ ট্রাফা: আপনি যদি মান ঘোষণা করতে চলেছেন যে অনেকগুলি ভেরিয়েবল মান সংরক্ষণ করতে পারে তবে এটি ইতিমধ্যে একটি চিহ্ন যা আপনার অন্যান্য স্টোরেজ বিকল্পগুলি আইএমএইচও বিবেচনা করা উচিত।
জেফ মার্কাডো

1
@ ইউজার ৪70০37 I৯ - আমি এক ধরনের ধারণা নিয়েছিলাম যে নামগুলি কেবল উদাহরণ কোডের জন্য, এবং ট্রাফা তার নামগুলি আসল কোডটিতে ব্যবহার করছে না।
ক্রিস লুৎজ

উত্তর:


52

অন্যরা যেমন পরামর্শ দিয়েছে, তেমন সম্ভাবনা নেই যে 10 বুলিয়ান মান সহ বিভিন্ন স্থানীয় ভেরিয়েবলগুলি ব্যবহার করা আপনার রুটিন লেখার সর্বোত্তম উপায় (বিশেষত যদি তাদের সত্যিকারের এক-অক্ষরের নাম থাকে :)

আপনি যা করছেন তার উপর নির্ভর করে এর পরিবর্তে অভিধান ব্যবহার করা বোধগম্য হতে পারে। উদাহরণস্বরূপ, আপনি যদি এক-বর্ণের পতাকাগুলির জন্য বুলিয়ান প্রিসেট মান সেট করতে চান তবে আপনি এটি করতে পারেন:

>>> flags = dict.fromkeys(["a", "b", "c"], True)
>>> flags.update(dict.fromkeys(["d", "e"], False))
>>> print flags
{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

আপনি যদি পছন্দ করেন তবে আপনি এটি একক কার্যবিধির বিবৃতি দিয়েও করতে পারেন:

>>> flags = dict(dict.fromkeys(["a", "b", "c"], True),
...              **dict.fromkeys(["d", "e"], False))
>>> print flags
{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

দ্বিতীয় প্যারামিটারটি dictসম্পূর্ণরূপে এর জন্য ডিজাইন করা হয়নি: এটি আসলে আপনাকে কীওয়ার্ড আর্গুমেন্ট ব্যবহার করে অভিধানের পৃথক উপাদানগুলিকে ওভাররাইড করার অনুমতি দেওয়ার জন্য বোঝানো হয়েছিল d=False। উপরের কোডটি অভিব্যক্তিটির ফলাফলকে অকার্যকরভাবে যুক্ত কীওয়ার্ড আর্গুমেন্টগুলির** একটি সেট হিসাবে দেখায় যা ডাকা ফাংশনে পাস করা হয়। এটি অবশ্যই অভিধানগুলি তৈরি করার একটি নির্ভরযোগ্য উপায় এবং লোকেরা কমপক্ষে এই মূর্খতাটি স্বীকার করছে বলে মনে হয় তবে আমি সন্দেহ করি যে কেউ কেউ এটিকে আনপাইথোনিক হিসাবে বিবেচনা করতে পারে। </disclaimer>


তবুও অন্য একটি পদ্ধতির, যা সম্ভবত আপনি সবচেয়ে বেশি স্বজ্ঞাত হন যদি আপনি এই প্যাটার্নটি ঘন ঘন ব্যবহার করেন তবে তা হ'ল পতাকাটির নামগুলি (একক-অক্ষরের স্ট্রিং) ম্যাপযুক্ত পতাকা মান ( True, False) এর তালিকা হিসাবে আপনার ডেটাটিকে সংজ্ঞায়িত করা। এরপরে আপনি এই ডেটা সংজ্ঞাটিকে একটি উল্টানো অভিধানে রূপান্তর করুন যা পতাকা নামগুলির পতাকাঙ্কিত মানগুলিতে মানচিত্র করে। নেস্টেড তালিকা বোঝার সাথে এটি বেশ সংক্ষিপ্তভাবে করা যেতে পারে, তবে এখানে একটি খুব পঠনযোগ্য বাস্তবায়ন:

>>> def invert_dict(inverted_dict):
...     elements = inverted_dict.iteritems()
...     for flag_value, flag_names in elements:
...         for flag_name in flag_names:
...             yield flag_name, flag_value
... 
>>> flags = {True: ["a", "b", "c"], False: ["d", "e"]}
>>> flags = dict(invert_dict(flags))
>>> print flags
{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

ফাংশন invert_dictএকটি জেনারেটর ফাংশন । এটি উত্পন্ন করে বা ফলন দেয় - এর অর্থ এটি কী-মান জোড়ার বারবার মান দেয় । এই কী-মান জোড়গুলি হ'ল প্রাথমিক flagsঅভিধানের দুটি উপাদানের সামগ্রীর বিপরীত । তারা dictকনস্ট্রাক্টর খাওয়ানো হয় । এই ক্ষেত্রে dictকন্সট্রাকটর ভিন্নভাবে উপরে কারণ এটি একটি খাওয়ানো হচ্ছে তা থেকে কাজ করে পুনরুক্তিকারীর তার আর্গুমেন্ট হিসাবে একটি অভিধান বদলে।


@ ক্রিস লুটজের মন্তব্যে অঙ্কন: আপনি যদি সত্যই এটি একক-অক্ষর মানগুলির জন্য ব্যবহার করেন তবে আপনি বাস্তবে এটি করতে পারেন

>>> flags = {True: 'abc', False: 'de'}
>>> flags = dict(invert_dict(flags))
>>> print flags
{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

এটি কাজ করে কারণ পাইথন স্ট্রিংগুলি পুনরাবৃত্তিযোগ্য , যার অর্থ তারা মান দ্বারা মানের মাধ্যমে স্থানান্তরিত হতে পারে। স্ট্রিংয়ের ক্ষেত্রে মানগুলি স্ট্রিংয়ের স্বতন্ত্র অক্ষর। সুতরাং যখন এগুলিকে পুনরাবৃত্ত হিসাবে ব্যাখ্যা করা হয়, এই ক্ষেত্রে যেখানে এগুলি লুপের জন্য ব্যবহৃত হয় ['a', 'b', 'c']এবং 'abc'কার্যকরভাবে সমতুল্য হয়। অন্য উদাহরণটি হ'ল যখন সেগুলি কোনও ফাংশনে দেওয়া হবে যা পুনরাবৃত্ত হওয়ার মতো লাগে liketuple

আমি ব্যক্তিগতভাবে এটি করব না কারণ এটি স্বজ্ঞাতভাবে পড়েনি: যখন আমি একটি স্ট্রিং দেখি, তখন আমি আশা করি এটি তালিকা হিসাবে পরিবর্তে একক মান হিসাবে ব্যবহৃত হবে। সুতরাং আমি প্রথম লাইনটি দেখি এবং "ঠিক আছে, তাই সত্যিকারের পতাকা এবং একটি মিথ্যা পতাকা রয়েছে" বলে মনে করি। সুতরাং যদিও এটি একটি সম্ভাবনা, আমি মনে করি না এটি যাওয়ার উপায়। উল্টো দিকে, এটি পুনরাবৃত্তিযোগ্য এবং পুনরাবৃত্তকারীগুলির ধারণাটি আরও স্পষ্টভাবে ব্যাখ্যা করতে সহায়তা করতে পারে।


ফাংশনটি invert_dictএমনভাবে সংজ্ঞায়িত করা যাতে এটি একটি অভিধানটি রিটার্ন দেয় তবে এটি কোনও খারাপ ধারণা নয়; আমি বেশিরভাগই কেবল এটি করিনি কারণ এটি রুটিন কীভাবে কাজ করে তা ব্যাখ্যা করতে সত্যই সহায়তা করে না।


স্পষ্টতই পাইথন ২. dictionary এর অভিধান বোধগম্যতা রয়েছে যা এই ফাংশনটি বাস্তবায়নের জন্য অত্যন্ত সংক্ষিপ্ততর পথ তৈরি করবে। পাঠকের কাছে এটি অনুশীলন হিসাবে ছেড়ে গেছে, যেহেতু আমার কাছে পাইথন ২.7 ইনস্টল নেই :)

আপনি বরাবর বহুমুখী ইটারটুলস মডিউল থেকে কিছু ফাংশন একত্রিত করতে পারেন । তারা যেমন বলেছে, এটি করার একমাত্র উপায় ছাড়াও । অপেক্ষা করুন, পাইথনের লোকেরা এটি বলে না। ঠিক আছে, কিছু ক্ষেত্রে এটি সত্য। আমি অনুমান করতে পারি যে গুডো আমাদের অভিধান অভিধান উপলব্ধি করেছে যাতে এটি করার জন্য একটি সুস্পষ্ট উপায় থাকে।


1
নোটটি ['a', 'b', 'c']সংক্ষিপ্ত করা যেতে পারে list('abc'), যা def truth_values(trues, falses): d = dict.from_keys(list(trues), True); d.update(dict.from_keys(list(falses), False)); return dহিসাবে অনুপ্রাণিত করেvalues = truth_values("abc", "de")
ক্রিস লুৎজ

আপনাকে অনেক ধন্যবাদ ধন্যবাদ এটি একটি বিস্তৃত উত্তর বলে মনে হচ্ছে, আমি এটিকে ভাল চেহারা দেব এবং আপনি কী গদ্য দিয়ে যাচ্ছেন, আপনি যা বলছেন তা নিয়ে পরীক্ষা-নিরীক্ষা করব, যদিও এটি সত্য, এটি সম্ভবত প্রাকৃতিকভাবে আসে না তাই আমাকে করতে হবে কিছুটা পড়ুন এবং যতক্ষণ না আপনি পুরোপুরি আপনার কাছে যা বোঝাচ্ছেন তা না পাওয়া অবধি অবধি অজানাতে আমার অন্যতম দুর্বলতা অভিধানগুলি since আপনাকে অনেক ধন্যবাদ, আমি ফিরে আসব :)
ট্রুফা

5
@ অদ্ভুত আমি আপনার জবাবটি দেখে উদ্বেগ প্রকাশ করেছি: আপনি ওপি'র সমস্যার চেয়ে অন্য একটি সমস্যার সংজ্ঞা দিচ্ছেন এবং আপনি এই সমস্যাটির দীর্ঘ উত্তর দিতে পেরে আনন্দিত। তিনি কোনও অভিধানে স্ট্রিং এবং মানগুলি সংযুক্ত করতে চান না, তিনি প্রত্যেকটির জন্য একটি শনাক্তকারী এবং মান সহ বস্তু তৈরি করতে চান।
eequem

5
@ এয়াকিম: দীর্ঘ উত্তর খারাপ? চিকিত্সক, নিজেকে নিরাময়!
জন মাচিন

5
এটি প্রশ্নের উত্তর দেয় না এবং এটি পৃষ্ঠপোষকতা করছে। নিচে উত্তর দেখার
kodu

225
a, b, c, d, e, g, h, i, j = (True,)*9
f = False

21
@ ইম্রে ট্রেলিং কমা স্বরলিপিটি (d,)একটি এক-আইটেম টুপল তৈরি করে, যা একটি সিকোয়েন্স টাইপ। সিকোয়েন্স প্রকারগুলি অন্যান্য ক্রিয়াকলাপগুলির মধ্যে যোগ এবং গুণকে সমর্থন করে।
duozmo

36
মার্জিত কৌশল, তবে তালিকার মতো পরিবর্তনীয় উপাদানগুলিতে এটি ব্যবহার সম্পর্কে সচেতন হন। উদাহরণস্বরূপ a, b, c = ([],)*33 তালিকা দৃষ্টান্ত কিন্তু তোলে তৈরি করে না a, bএবং cএকই উদাহরণস্বরূপ প্রতি নির্দেশ।
জ্যাক

5
আমি অবাক হয়েছি যে আমার অজগর কোডটি উবার পাইথোনিক করার চেষ্টা করে আমার অনেক সময় নষ্ট / ব্যয় হয়?
সারোস

3
@ Zac সঠিকভাবে এটি ব্যবহার করতে a, b, c = ([] for i in range(3))উত্স । ধারাবাহিকতার জন্য, আপনি এই উত্তরটির অর্থাত, এর জন্য এর একটি বৈকল্পিকও ব্যবহার করতে পারেন a,b,c,d,e,g,h,i,j = (True for i in range(9)) f=(False i in range(1))
নুভিস সি

আমি পাইথনকে কেন ভালবাসি, এটি সম্প্রতি ব্যবহৃত হয়েছে এটির একটি উদাহরণ এটি ..
ক্রুদ্ধ 84

52

আপনি যে স্টাফটি সংজ্ঞায়িত করছেন সেটি এনক্যাপসুলেট করার জন্য একটি তালিকা / অভিধান ব্যবহার করুন বা আপনার নিজস্ব শ্রেণি সংজ্ঞা দিন, তবে আপনার যদি এই সমস্ত ভেরিয়েবলের প্রয়োজন হয় তবে আপনি করতে পারেন:

a = b = c = d = e = g = h = i = j = True
f = False

1
vars শুধুমাত্র সত্য ও মিথ্যাতে সেট করা হবে না।
এন 1.1

1
@ এন 1.1: আপনি এর দ্বারা কী বোঝাতে চেয়েছিলেন তা বুঝতে পারি না।
ট্রুফা

@ ট্রুফা যদি সেগুলি কেবল সত্য / মিথ্যাতে সেট করা থাকে তবে প্রস্তাবিত উপায়টি সঠিক, তবে যদি ভেরিয়েবলগুলি বিভিন্ন জিনিসে সেট করা থাকে?
এন 1.1

@ এন 1.1: ওহ আমি যা বলতে চাইছি তা পেয়েছি, স্পষ্টতার জন্য ধন্যবাদ! এই ক্ষেত্রে, তারা সবাই বুল তবে এটি জেনে রাখা ভাল। ধন্যবাদ
ট্রুফা

5
কেন এটি একটি বিপজ্জনক নিদর্শন (তার উদাহরণস্বরূপ কাজের উদাহরণ), বিশদ
বিবরণের জন্য

10

এটি @ জেফ এম এর এবং আমার মন্তব্যগুলির একটি বিশদ বিবরণ ।

আপনি যখন এটি করবেন:

a, b = c, d

এটি টুপল প্যাকিং এবং আনপ্যাকিংয়ের সাথে কাজ করে। আপনি প্যাকিং এবং আনপ্যাকিং পদক্ষেপগুলি পৃথক করতে পারেন:

_ = c, d
a, b = _

প্রথম লাইনটি একটি টুপল নামে পরিচিত _যা দুটি উপাদান রয়েছে, প্রথমটির মান সহ cএবং দ্বিতীয়টি এর মান সহ d। দ্বিতীয় লাইনটি _ভেরিয়েবলগুলিতে টিপলটিকে আনপ্যাক করে aএবং b। এটি আপনার এক বিশাল লাইনটি ভেঙে দেয়:

a, b, c, d, e, f, g, h, i, j = True, True, True, True, True, False, True, True, True, True

দুটি ছোট লাইনে:

_ = True, True, True, True, True, False, True, True, True, True
a, b, c, d, e, f, g, h, i, j = _

এটি আপনাকে প্রথম লাইনের মতোই একই ফলাফল দেয় (আপনি যদি এক অংশে মান বা ভেরিয়েবল যুক্ত করেন তবে অন্যটি আপডেট করতে ভুলে যান তবে একই ব্যতিক্রম সহ)। তবে, এই নির্দিষ্ট ক্ষেত্রে, ইয়ানের উত্তর সম্ভবত সেরা।

যদি মানগুলির একটি তালিকা থাকে তবে আপনি সেগুলি আনপ্যাক করতে পারেন। আপনাকে প্রথমে এটিকে প্রথমে টুপলে রূপান্তর করতে হবে। উদাহরণস্বরূপ, নিম্নলিখিত প্রতিটি 0 এবং 9 এর মধ্যে একটি মান ধার্য হবে aমাধ্যমে jযথাক্রমে:

a, b, c, d, e, f, g, h, i, j = tuple(range(10))

সম্পাদনা করুন: উপাদান 5 (পরিবর্তনশীল f) ব্যতীত এগুলি সমস্তকে সত্য হিসাবে নির্ধারণ করার জন্য ঝরঝরে কৌশল :

a, b, c, d, e, f, g, h, i, j = tuple(x != 5 for x in range(10))

আমি জানতাম না যে শেষটি সম্ভব হয়েছিল, আমি অবশ্যই এটি ব্যবহার করে দেখব, এটি সত্যিই একটি পরিষ্কার কৌশল এবং এটি কার্যকর হতে পারে!
ট্রুফা

5

লোকেরা যখন "একটি তালিকা বা টিপল বা অন্যান্য ডেটা স্ট্রাকচার ব্যবহার করার" পরামর্শ দিচ্ছে, তখন তারা যা বলছে তা হ'ল, যখন আপনার অনেকগুলি বিভিন্ন মূল্যবোধের যত্ন নেওয়া হয়, তখন স্থানীয় ভেরিয়েবল হিসাবে সেগুলি পৃথকভাবে নামকরণ সর্বোত্তম উপায় নাও হতে পারে them কোনো কিছু করা.

পরিবর্তে, আপনি তাদের একত্রে বৃহত্তর ডেটা স্ট্রাকচারে একত্রিত করতে চাইতে পারেন যা একক স্থানীয় ভেরিয়েবলে সংরক্ষণ করা যেতে পারে।

অন্তর্নিহিত দেখায় যে কীভাবে আপনি এর জন্য অভিধান ব্যবহার করতে পারেন এবং ক্রিস লুটজ দেখিয়েছেন কীভাবে আলাদা ভেরিয়েবলগুলিতে আনপ্যাকিংয়ের আগে অস্থায়ী স্টোরেজের জন্য একটি টুপল ব্যবহার করবেন, তবে বিবেচনার জন্য অন্য একটি বিকল্পটি হ'ল ব্যবহার করা collections.namedtuple মানগুলি আরও স্থায়ীভাবে বান্ডিল করার করা।

সুতরাং আপনি যেমন কিছু করতে পারেন:

# Define the attributes of our named tuple
from collections import namedtuple
DataHolder = namedtuple("DataHolder", "a b c d e f g")

# Store our data
data = DataHolder(True, True, True, True, True, False, True)

# Retrieve our data
print(data)
print(data.a, data.f)

বাস্তব কোড আশা করি অবশ্যই "ডেটাহোল্ডার" এবং বর্ণমালার অক্ষরের চেয়ে অবশ্যই অর্থবহ নাম ব্যবহার করবে।


আপনার উত্তরের জন্য আপনাকে ধন্যবাদ, আমি এটি একটি বিকল্প হিসাবে যাচাই করবো, জিনিসটি হ'ল ( এই বিশেষ ক্ষেত্রে ) এটি অপরিবর্তনীয় কাঠামোটি কার্যকর নাও হতে পারে। এটি কীভাবে পরিণত হয়েছিল তা নিয়ে আমি পরে মন্তব্য করব, আবারও অনেক ধন্যবাদ!
ট্রুফা

আপনি সাধারণ বর্গের সাথে একই জিনিসটি করতে পারেন - সংজ্ঞাটি DataHolderআরও কিছুটা ভার্বোস পায়।
এনকোঘ্লান

4

আসলে সমস্যা কী?

আপনি কি সত্যিই প্রয়োজন বা চান 10 একটি , , , , , , , , আমি , , অন্য কোন সম্ভাবনা একটি সময় বা অন্য সময়ে লিখতে হবে, একটি এবং লেখার এবং লেখার । ....

মানগুলি যদি সমস্ত আলাদা হয় তবে আপনি উদাহরণের জন্য লিখতে বাধ্য হবেন

a = 12
b= 'sun'
c = A() #(where A is a class)
d = range(1,102,5)
e = (line in filehandler if line.rstrip())
f = 0,12358
g = True
h = random.choice
i = re.compile('^(!=  ab).+?<span>')
j = [78,89,90,0]

তার অর্থ পৃথকভাবে "ভেরিয়েবল" সংজ্ঞায়িত করা।

অথবা, অন্য লেখা ব্যবহার করে, ব্যবহার করার দরকার নেই _:

a,b,c,d,e,f,g,h,i,j =\
12,'sun',A(),range(1,102,5),\
(line for line in filehandler if line.rstrip()),\
0.12358,True,random.choice,\
re.compile('^(!=  ab).+?<span>'),[78,89,90,0]

অথবা

a,b,c,d,e,f,g,h,i,j =\
(12,'sun',A(),range(1,102,5),
 (line for line in filehandler if line.rstrip()),
 0.12358,True,random.choice,
 re.compile('^(!=  ab).+?<span>'),[78,89,90,0])

যদি তাদের কিছুটির অবশ্যই একই মান থাকতে হয় তবে সমস্যাটি যা এটি লেখার পক্ষে দীর্ঘ long

a, b, c, d, e, f, g, h, i, j = True, True, True, True, True, False, True ,True , True, True 

?

তারপরে আপনি লিখতে পারেন:

a=b=c=d=e=g=h=i=k=j=True
f = False

আপনার সমস্যাটি আসলে কী তা আমি বুঝতে পারি না। আপনি যদি কোনও কোড লিখতে চান তবে আপনি নির্দেশাবলী এবং সংজ্ঞাগুলি লেখার জন্য প্রয়োজনীয় অক্ষরগুলি ব্যবহার করতে বাধ্য আর কি ?

আমি ভাবছি যদি আপনার প্রশ্নটি এমন কোনও চিহ্ন নয় যা আপনি কিছু ভুল বুঝে unders

যখন কেউ লেখেন a = 10, কেউ "স্মৃতিশক্তি যাঁর মান পরিবর্তন করতে পারে" অর্থে কোনও পরিবর্তনশীল তৈরি করবেন না । এই নির্দেশ:

  • হয় হয় টাইপ integerএবং মান 10 এর একটি অবজেক্ট তৈরি করতে এবং বর্তমান নামের জায়গাতে এই অবজেক্টের সাথে একটি 'এ' নামের বাইন্ডিং ট্রিগার করে

  • বা বস্তু 10- তে নেমস্পেসে 'a' নামটি পুনরায় বরাদ্দ করুন (কারণ 'ক' আগে অন্য কোনও বস্তুর সাথে আবদ্ধ ছিল)

আমি বলি যেহেতু আমি 10 সনাক্তকারী a, b, c ... মিথ্যা বা সত্যের দিকে ইঙ্গিত করার জন্য ইউটিলিটিটি দেখতে পাচ্ছি না। যদি এই মানগুলি কার্যকর করার সময় পরিবর্তিত না হয় তবে 10 শনাক্তকারী কেন? এবং যদি তারা পরিবর্তিত হয়, তবে শনাক্তকারীদের প্রথমে সংজ্ঞায়িত কেন?, পূর্বনির্ধারিত সংজ্ঞা না থাকলে প্রয়োজনে সেগুলি তৈরি করা হবে

আপনার প্রশ্নটি আমার কাছে অদ্ভুত দেখাচ্ছে


2

আপনি আপনার সমস্যাটি আমার কাছে ভুল উপায়ে পৌঁছে যাচ্ছেন বলে মনে হচ্ছে।

একটি টিপল ব্যবহার করতে আপনার কোডটি পুনরায় লিখুন বা সমস্ত ডেটা সঞ্চয় করার জন্য একটি ক্লাস লিখুন।


আপনাকে ধন্যবাদ বলে আপনি বলতে পারেন যে কোডের এক ঝলক ছাড়াও :) আমি বুঝতে পারি যে এটি আদর্শ নয়, এবং আমাকে পুনরায় ফর্ম্যাট করতে হতে পারে তবে আপনার উত্তরটি সত্যই প্রশ্নের সমাধান করতে পারে না। আমি যদিও আপনার পয়েন্ট পেতে।
ট্রুফা

1
আমি বলতে পারি যে এটি শোনাচ্ছে, হ্যাঁ। এটি এর মতো শোনাচ্ছে। রিফ্যাক্টরিং সম্ভবত আপনার সমস্যার সমাধান করবে। আপনার সমস্যা একটি স্টাইলের সমস্যা, একটি কার্যকরী সমস্যা নয় তাই বেশ মেটাডভাইস ছাড়া অন্য কিছু সরবরাহ করা শক্ত।
সমৃদ্ধ

1

আমি শীর্ষে ভোট দেওয়া উত্তর পছন্দ করি; তবে প্রদর্শিত হিসাবে তালিকায় এটিতে সমস্যা রয়েছে।

  >> a, b = ([0]*5,)*2
  >> print b
  [0, 0, 0, 0, 0]
  >> a[0] = 1
  >> print b
  [1, 0, 0, 0, 0]

এটি দুর্দান্ত বিবরণে (এখানে) আলোচনা করা হয়েছে তবে সংক্ষিপ্ত বিবরণটি হ'ল aএবং bএকই সাথে a is bপ্রত্যাবর্তনের ক্ষেত্রে Trueএকই (একই জন্য id(a) == id(b))। সুতরাং আপনি যদি একটি সূচক পরিবর্তন করেন তবে আপনি উভয়ের সূচি পরিবর্তন করছেন aএবং bযেহেতু তারা লিঙ্কযুক্ত। এটি সমাধান করতে আপনি (উত্স) করতে পারেন

>> a, b = ([0]*5 for i in range(2))
>> print b
[0, 0, 0, 0, 0]
>> a[0] = 1
>> print b
[0, 0, 0, 0, 0]

এটি তখন শীর্ষ উত্তরের বৈকল্পিক হিসাবে ব্যবহার করা যেতে পারে, যার "পছন্দসই" স্বজ্ঞাত ফলাফল রয়েছে

>> a, b, c, d, e, g, h, i = (True for i in range(9))
>> f = (False for i in range(1)) #to be pedantic

1

আপনার ক্ষেত্রে, আমি YAML ব্যবহার করব।

এটি একাধিক পরামিতিগুলির সাথে ডিল করার জন্য একটি মার্জিত এবং পেশাদার মান। মানগুলি একটি পৃথক ফাইল থেকে লোড করা হয়। আপনি এই লিঙ্কে কিছু তথ্য দেখতে পারেন:

https://keleshev.com/yaml-quick-introduction

তবে গুগলের পক্ষে এটি সহজ, এটি একটি স্ট্যান্ডার্ড হিসাবে এটি সম্পর্কে শত শত তথ্য রয়েছে, আপনি নিজের বোধগম্যতার সাথে সবচেয়ে উপযুক্ত কিসের সন্ধান করতে পারেন। ;)

শুভেচ্ছান্তে.


হাই হেনরিক, এসওকে স্বাগতম, আপনার উত্তরের জন্য আপনাকে ধন্যবাদ! আপনার পরবর্তী প্রশ্নের উত্তর দেওয়ার আগে একটি উত্তর লেখার বিষয়ে নিশ্চিত হন !
ডিগি

0

জাভাস্ক্রিপ্টের মতো আপনি পাইথনের এক লাইনে একাধিক বিবৃতি ব্যবহার করতে পারেনa = 1; b = "Hello World"; c += 3

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.