অজগরটিতে আমার কী + = কী তা জানতে হবে। এটা খুব সহজ। আমি পাইথনের অন্যান্য সংক্ষিপ্ত হাত সরঞ্জামগুলির সংজ্ঞা সংযোগগুলির লিঙ্কগুলিরও প্রশংসা করব।
অজগরটিতে আমার কী + = কী তা জানতে হবে। এটা খুব সহজ। আমি পাইথনের অন্যান্য সংক্ষিপ্ত হাত সরঞ্জামগুলির সংজ্ঞা সংযোগগুলির লিঙ্কগুলিরও প্রশংসা করব।
উত্তর:
পাইথনে, + = হ'ল __iadd__
বিশেষ পদ্ধতির জন্য চিনির আবরণ , __add__
বা __radd__
যদি __iadd__
উপস্থিত না থাকে। __iadd__
একটি বর্গ পদ্ধতি কিছু এটা ব্যবহার করতে চান করতে পারেন। তালিকার অবজেক্টটি এটিকে প্রয়োগ করে এবং পুনরুক্ত করার জন্য এটি ব্যবহার করে পুনর্ব্যবহারযোগ্য অবজেক্টের মাধ্যমে প্রতিটি উপাদানকে নিজের সাথে সংযুক্ত করে একইভাবে তালিকার প্রসারিত পদ্ধতিটি করে।
এখানে একটি সাধারণ কাস্টম শ্রেণি যা __iadd__
বিশেষ পদ্ধতিটি কার্যকর করে । আপনি অবজেক্টটি কোনও int দিয়ে সূচনা করুন, তারপরে একটি সংখ্যা যুক্ত করতে + = অপারেটরটি ব্যবহার করতে পারেন। __iadd__
এটি কল হয়ে যায় তা দেখানোর জন্য আমি একটি মুদ্রণ বিবৃতি যুক্ত করেছি । এছাড়াও, __iadd__
কোনও বস্তুর প্রত্যাশা প্রত্যাশিত, তাই আমি নিজের সংযোজন এবং অন্যান্য সংখ্যাটিও ফিরিয়ে দিয়েছি যা এই ক্ষেত্রে অর্থপূর্ণ।
>>> class Adder(object):
def __init__(self, num=0):
self.num = num
def __iadd__(self, other):
print 'in __iadd__', other
self.num = self.num + other
return self.num
>>> a = Adder(2)
>>> a += 3
in __iadd__ 3
>>> a
5
আশাকরি এটা সাহায্য করবে.
__iadd__
অন্যরকম ফেরত দেওয়ার জন্য (যা নিজেই যুক্তযোগ্য)
x += 5
x = x + 5
পাইথনে বলার মতো নয় ।
এখানে নোট করুন:
In [1]: x = [2,3,4]
In [2]: y = x
In [3]: x += 7,8,9
In [4]: x
Out[4]: [2, 3, 4, 7, 8, 9]
In [5]: y
Out[5]: [2, 3, 4, 7, 8, 9]
In [6]: x += [44,55]
In [7]: x
Out[7]: [2, 3, 4, 7, 8, 9, 44, 55]
In [8]: y
Out[8]: [2, 3, 4, 7, 8, 9, 44, 55]
In [9]: x = x + [33,22]
In [10]: x
Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22]
In [11]: y
Out[11]: [2, 3, 4, 7, 8, 9, 44, 55]
রেফারেন্সের জন্য দেখুন: কেন + = তালিকাগুলিতে অপ্রত্যাশিত আচরণ করে?
x += 7,8,9
+=
একটি ভেরিয়েবলের সাথে একটি সংখ্যা যুক্ত করে, প্রক্রিয়াটিতে ভেরিয়েবলটি নিজেই পরিবর্তন করে (যেখানে +
তা হবে না)। এর অনুরূপ, নিম্নলিখিতগুলি রয়েছে যা পরিবর্তনশীলকেও সংশোধন করে:
-=
, পরিবর্তনশীল থেকে একটি মান বিয়োগ করে ফলাফলের সাথে ভেরিয়েবল সেট করে*=
, পরিবর্তনশীল এবং মানকে গুণিত করে ফলাফলকে পরিবর্তনশীল করে তোলে/=
, ভেরিয়েবলকে মান দ্বারা বিভক্ত করে ফলাফলকে পরিবর্তনশীল করে তোলে%=
, ভেরিয়েবলটি তার ফলাফলটিতে সেট করার সাথে ভেরিয়েবলের উপর মডুলাস সম্পাদন করেঅন্যরাও থাকতে পারে। আমি পাইথন প্রোগ্রামার নই।
&=
, >>=
ইত্যাদি) এবং অতিরিক্ত গণিত অপারেটরদের ( **=
, ইত্যাদি)।
এটি বামে ডান অপরেন্ড যুক্ত করে। x += 2
মানেx = x + 2
এটি একটি তালিকায় উপাদান যুক্ত করতে পারে - এই এসও থ্রেডটি দেখুন ।
এটি নিছক সিনট্যাকটিক শর্টকাট নয়। এটা চেষ্টা কর:
x=[] # empty list
x += "something" # iterates over the string and appends to list
print(x) # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']
বনাম
x=[] # empty list
x = x + "something" # TypeError: can only concatenate list (not "str") to list
এটি চিত্রিত করে যে + = আইএডিডি তালিকার পদ্ধতিটি আহ্বান করে তবে + যোগগুলি যোগ করে , যা তালিকাগুলি সহ বিভিন্ন কাজ করে।
মূলত a + = b একটিতে ফলাফল সংরক্ষণের জন্য "b" যুক্ত করে adds এই সরল বর্ণনায় অনেক ভাষাতে + = অপারেটরের বর্ণনা দেওয়া হবে।
তবে সরল বর্ণনাটি বেশ কয়েকটি প্রশ্ন উত্থাপন করে।
পাইথনে এই দুটি প্রশ্নের উত্তর a এর ডেটা টাইপের উপর নির্ভর করে।
সুতরাং "যোগ" মানে কি?
নোট করুন যে তালিকার জন্য + = আরও নমনীয় +, তালিকার + অপারেটরের জন্য অন্য তালিকার প্রয়োজন, তবে + = অপারেটর যেকোন পুনরাবৃত্তিকে গ্রহণ করবে।
সুতরাং "একটিতে মান সংরক্ষণ করা" এর অর্থ কী?
যদি বস্তুটি পরিবর্তনীয় হয় তবে স্থান পরিবর্তন করে এটি উত্সাহিত করা হয় (তবে প্রয়োজন হয় না)। সুতরাং এটি একই জিনিস একই পয়েন্ট একটি পয়েন্ট কিন্তু এখন অবজেক্ট বিভিন্ন কন্টেন্ট আছে।
যদি বস্তুটি অপরিবর্তনীয় থাকে তবে স্পষ্টতই এটি স্থানটিতে পরিবর্তনটি সম্পাদন করতে পারে না। কিছু পরিবর্তনীয় অবজেক্টের কোনও "ইনস-প্লেস" অপারেশন প্রয়োগ নাও থাকতে পারে। এই ক্ষেত্রে ভেরিয়েবল "এ" আপডেট করা হবে একটি অতিরিক্ত ক্রিয়াকলাপের ফলাফল যুক্ত একটি নতুন অবজেক্টের দিকে নির্দেশ করতে।
প্রযুক্তিগতভাবে এটি __IADD__
প্রথমে সন্ধান করে প্রয়োগ করা হয় , যদি তা প্রয়োগ না হয় তবে __ADD__
চেষ্টা করা হয় এবং শেষ পর্যন্ত __RADD__
।
ভ্যারিয়েবলগুলিতে অজগরটিতে + = ব্যবহার করার সময় যত্নের প্রয়োজন যেখানে আমরা সঠিক ধরণের বিষয়ে নির্দিষ্ট নই এবং বিশেষত যেখানে প্রকারটি পরিবর্তনযোগ্য কিনা তা আমরা নিশ্চিত নই। উদাহরণস্বরূপ নিম্নলিখিত কোড বিবেচনা করুন।
def dostuff(a):
b = a
a += (3,4)
print(repr(a)+' '+repr(b))
dostuff((1,2))
dostuff([1,2])
যখন আমরা একটি টিউপল দিয়ে ডোস্টফ শুরু করি তখন টিউপলটি + = অপারেশনের অংশ হিসাবে অনুলিপি করা হয় এবং তাই বি প্রভাবিত হয় না। তবে আমরা যখন এটি একটি তালিকার সাথে প্রার্থনা করি তখন তালিকাটি জায়গায় পরিবর্তিত হয়, সুতরাং ক এবং খ উভয়ই ক্ষতিগ্রস্থ হয়।
পাইথন 3 এ, "বাইটস" এবং "বাইটারি" প্রকারের সাথে একই রকম আচরণ লক্ষ্য করা যায়।
অবশেষে নোট করুন যে বস্তুটি প্রতিস্থাপন না করা হলেও পুনরায় নিয়োগের ঘটনা ঘটে happens বাম দিকের দিকটি কেবল একটি পরিবর্তনশীল তবে এটি তাত্পর্যপূর্ণ আচরণের কারণ হতে পারে যখন আপনার পরিবর্তনীয় সংগ্রহের ক্ষেত্রে পরিবর্তনীয় সংগ্রহগুলি উল্লেখ করে:
a = ([1,2],[3,4])
a[0] += [5]
এই ক্ষেত্রে [5] সফলভাবে একটি [0] দ্বারা উল্লিখিত তালিকায় যুক্ত হবে তবে তারপরে কোড ব্যতীত একটি ব্যতিক্রম উত্থাপিত হবে এবং একটি [0] পুনরায় সাইন করতে ব্যর্থ হলে।
সংক্ষিপ্ত উত্তরটি +=
অনুবাদ করা যেতে পারে "+ + এর বামে চলকটিতে ডানদিকে যা কিছু আছে তার যোগ করুন" হিসাবে অনুবাদ করা যেতে পারে।
যাত্রা। আপনার যদি থাকে a = 10
তবে a += 5
তা হ'ল: a = a + 5
সুতরাং, "এ" এখন 15 এর সমান।
নোট কিছু পরিস্থিতিতে x += y
যেমন একই থাকে না x = x + y
যেখানে অপারেটর অগ্রাধিকারের কারণে অতিরিক্ত অপারেটর অন্তর্ভুক্ত থাকে কারণ ডান হাতটি সর্বদা প্রথমে মূল্যায়ন করা হয়, যেমন
>>> x = 2
>>> x += 2 and 1
>>> x
3
>>> x = 2
>>> x = x + 2 and 1
>>> x
1
প্রথম কেসটি এতে প্রসারিত করুন:
>>> x = 2
>>> x = x + (2 and 1)
>>> x
3
অন্যান্য অপারেটরগুলির সাথে 'রিয়েল ওয়ার্ল্ড'-এ আপনার মুখোমুখি হওয়ার সম্ভাবনা বেশি
x *= 2 + 1
== x = x * (2 + 1)
! =x = x * 2 + 1
+=
লেখার জন্য একটি শর্টকাট
number = 4
number = number + 1
সুতরাং পরিবর্তে আপনি লিখতে হবে
numbers = 4
numbers += 1
দুটি উপায়ই সঠিক তবে উদাহরণ দুটি আপনাকে কিছুটা কম কোড লিখতে সহায়তা করে
অন্যরা যেমন বলেছে, + = অপারেটর একটি শর্টকাট। একটি উদাহরণ:
var = 1;
var = var + 1;
#var = 2
এটিও এর মতো লেখা যেতে পারে:
var = 1;
var += 1;
#var = 2
সুতরাং প্রথম উদাহরণ লেখার পরিবর্তে, আপনি কেবল দ্বিতীয়টি লিখতে পারেন, যা ঠিক কাজ করবে।
আমি অনেকগুলি উত্তর দেখছি যা একাধিক পূর্ণসংখ্যার সাথে + = ব্যবহার করে না।
একটি উদাহরণ:
x -= 1 + 3
এটি অনুরূপ হবে:
x = x - (1 + 3)
এবং না:
x = (x - 1) + 3
ডকুমেন্টেশন অনুযায়ী
x += y
সমতূল্যx = operator.iadd(x, y)
। এটির আর একটি উপায় বলতেz = operator.iadd(x, y)
গেলে তা যৌগিক বিবরণের সমতুল্যz = x; z += y
।
তাই x += 3
হিসাবে একই x = x + 3
।
x = 2
x += 3
print(x)
আউটপুট 5 হবে।
লক্ষ্য করুন যে এছাড়াও আছে
object.__iadd__