Fahmy Mostafa نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 عندما أستخدم التابع list.append لإضافة عنصر إلى القائمة، يتم اعتبار قيمتها False كالتالي: >>> x = [] >>> not x.append(123) True >>> ما هو سبب هذا الأمر؟ وهل يمكن تطبيقه في دوال خاصة بي أيضًا؟ 4 اقتباس
1 ريم المهدي نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 سؤال جيد، هنالك العديد من الدوال، العبارات والقيم التي تمثل عبارة خاطئة منها العبارة المنطقية False نفسها، القيمة صفر لأي متغير، القائمة الفارغة[] empty dictionary {} و أيضاً العبارة None. راجع الأمثلة التالية: x = None if x: print('if x') else: print('if not') #if not x = {} if x: print('if x') else: print('if not') #if not x = [] if x: print('if x') else: print('if not') #if not x = 0 if x: print('if x') else: print('if not') #if not في الأمثلة السابقة نفذنا الشرط مع كل من ما تم ذكره سابقاً، و في حال كانت قيمة x تساوى 0,None,[],{} طبقنا شرط if x والتي تعني في حال كان الشرط صحيح if x == True نطبع عبارة if x (يمكنك إستبدالها بأي شي أخر ك True مثلاً لكن لم نستخدمها هنا لتفادي التشوش مع العبارات الصحيحة أو الخاطئة بوليانياً). لكن مثلا إن قمنا بإضافة أي عنصر في القائمة أو dictionary أو حتى تغيير قيمة x فإن النتيجة ستكون بطباعة الجملة الأولى الموجودة داخل شرط if، راجع المثال التالي: x = 42 if x: print('if x') else: print('if not') #if x و بالتعميم فإن الدالة append ترجع None فبذلك نفهم أن تحويلها للقيمة البوليانية هو ما سيعطينا قيمة false. x = [] print(bool(x)) print(bool(x.append(123))) print(bool(x)) False False True البرنامج أعلاه هو نفسه ما قمت بتطبيقه لكن مع إستدعاء الدالة bool التي ترجع القيمة البوليانية للمتغير أو الدالة و غيره. بعد تعريف القائمة الفارغة و التي عرفنا أن قيمتها البوليانية ستمثل False بعدها قمنا بنداء الدالة لتحديد القيمة الراجعة من عملية الإضافة والتي ستكون False و لكن القيمة البوليانية للقائمة بعد الإضافة تتغير من False إلى True. اقتباس
1 Ali Haidar Ahmad نشر 25 يونيو 2021 أرسل تقرير نشر 25 يونيو 2021 السبب يعود إلى مبدأ "Command–query separation" حيث يعد الفصل بين الأوامر والاستعلام مبدأ في برمجة الكمبيوتر. ينص هذا المبدأ على التالي:""إن كل عملية يجب أن تكون إما أمرًا يقوم بتنفيذ إجراء ما ، أو استعلام يقوم بإرجاع البيانات ، وليس كليهما. وفي بايثون يتم تحقيق هذا المبدأ في التابع append والعديد من التوابع الإجرائية الأخرى (ليست استعلام). ولهذا السبب أعادت لك None أي لاشيء. وبالتالي not None تكافئ True. لكن قد يكون هناك بعض التجاوزات لهذا المبدأ مثل التابع pop الذي يعد تابع إجرائي وبنفس الوقت يعيد قيمة، حيث يحذف آخر عنصر من list ويرجعه بنفس الوقت: list = [ 1, 2, 3, 4, 5, 6 ] print(list.pop()) # 6 print(list)# [1, 2, 3, 4, 5] 1 اقتباس
0 Wael Aljamal نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 إن الدالة append لاتعيد أي قيمة، نمط الإعادة لها هو NONE والتي يتم تقييمها ل false فقط في هذه الحالة لأنها ليست true وعكس true هو false .. print u.append(1) None => print not None # not None == True True هذه الدالة تعدل على القائمة الأصلية التي تم الاستدعاء عليها، ولا تعيد شيئاً. 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 24 يونيو 2021 أرسل تقرير نشر 24 يونيو 2021 يتمثل مبدأ التصميم العام في Python في الوظائف (الدوال) التي تغير كائنًا في مكانه ولاتقوم بإنشاء كائن جديد ، فإن هذه الدالة تقوم بإرجاع None . وهذا أساسًا للتأكيد على عدم إرجاع كائن جديد. أي إذا كان لديك دالة تعمل على الكائن الأصلي وتقوم بتعديله في مكانه فهذه الدالة لا تقوم بإرجع أي شيء لأنه لا يوجد كائن جديد تريد إرجاعه ولهذا العديد من دوال بايثون تقوم بإرجع none ويعتبر none ك false فعلى سبيل المثال دالة ()append تقوم بتعديل الكائن الأصلي في مكانه ولا تقوم بإرجاع كائن جديد لذلك في تقوم بإرجاع none 1 اقتباس
السؤال
Fahmy Mostafa
عندما أستخدم التابع list.append لإضافة عنصر إلى القائمة، يتم اعتبار قيمتها False كالتالي:
ما هو سبب هذا الأمر؟ وهل يمكن تطبيقه في دوال خاصة بي أيضًا؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.