• 0

لماذا يتم إعتبار دالة list.append بقيمة False في بايثون؟

عندما أستخدم التابع list.append لإضافة عنصر إلى القائمة، يتم اعتبار قيمتها False كالتالي:

>>> x = []
>>> not x.append(123)
True
>>>

ما هو سبب هذا الأمر؟ وهل يمكن تطبيقه في دوال خاصة بي أيضًا؟

4 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

سؤال جيد، هنالك العديد من الدوال، العبارات والقيم التي تمثل عبارة خاطئة منها العبارة المنطقية 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

السبب يعود إلى مبدأ "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

إن الدالة append لاتعيد أي قيمة، نمط الإعادة لها هو NONE والتي يتم تقييمها ل false فقط في هذه الحالة لأنها ليست true وعكس true هو false ..

print u.append(1)
None
=>
print not None  # not None == True
True

هذه الدالة تعدل على القائمة الأصلية التي تم الاستدعاء عليها، ولا تعيد شيئاً.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يتمثل مبدأ التصميم العام في Python في الوظائف (الدوال) التي تغير كائنًا في مكانه ولاتقوم بإنشاء كائن جديد ، فإن هذه الدالة تقوم بإرجاع None .

وهذا أساسًا للتأكيد على عدم إرجاع كائن جديد. 

أي إذا كان لديك دالة تعمل على الكائن الأصلي وتقوم بتعديله في مكانه فهذه الدالة لا تقوم بإرجع أي شيء لأنه لا يوجد كائن جديد تريد إرجاعه ولهذا العديد من دوال بايثون تقوم بإرجع none ويعتبر none ك false

فعلى سبيل المثال دالة ()append تقوم بتعديل الكائن الأصلي في مكانه ولا تقوم بإرجاع كائن جديد لذلك في تقوم بإرجاع none

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن