ahmed1990 نشر 2 نوفمبر 2015 أرسل تقرير نشر 2 نوفمبر 2015 قيل لي أن هنالك فرق كبير بين i = i + 1 و i += 1 وأن ناتج السطرين يختلفان أيضا، فما الفرق بين هذين السطرين؟ اقتباس
0 هشام رزق الله نشر 2 نوفمبر 2015 أرسل تقرير نشر 2 نوفمبر 2015 نعم ناتج السطرين يختلفان، فسطر i += 1 يقوم بشيء مشابه لهذا:try: i = i.__iadd__(1) except AttributeError: i = i.__add__(1) أما بالنسبة إلى i = i + 1 فإنها ستقوم بشيء مثل هذا:i = i.__add__(1) المشكلة تكمن في أنواع المتغيرات القابلة للتغيير مثل القوائم، حيث سيتحورون إلى __iadd__ (ومن ثم سيُرجعون self عند استدعاءهم إلا لو قمت بتغيير ذلك عن طريق إحدى الخدع)، بينما المتغيرات غير القابلة للتغيير مثل int فإن الطريقة السابقة لن تعمل معها.مثال للتوضيح:>>> l1 = [] >>> l2 = l1 >>> l1 += [3] >>> l2 [3] بسبب أن l2 لديها نفس كائن l1، وقد حورنا l1 فإنك سنحوّر l2 أيضا.مثال آخر:>>> l1 = [] >>> l2 = l1 >>> l1 = l1 + [3] >>> l2 [] في هذا المثال، لم نقم بتحوير l1 بل أنشئنا قائمة جديد، ومن ثم باستخدام l1 + [3] أضفنا [3] إلى l1 تاركا l2 تشير إلى القائمة الأصلية. اقتباس
السؤال
ahmed1990
قيل لي أن هنالك فرق كبير بين i = i + 1 و i += 1 وأن ناتج السطرين يختلفان أيضا، فما الفرق بين هذين السطرين؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.