شرح دالتي any() و all() في بايثون مع أمثلة عملية واضحة
مقدمة: لماذا نستخدم any() وall() في بايثون؟
عند كتابة البرامج بلغة Python نحتاج كثيراً إلى التحقق مما إذا كان عنصر واحد على الأقل داخل كائن قابل للتكرار يحقق شرطاً معيناً، أو ما إذا كانت جميع العناصر تحقق هذا الشرط. هنا تظهر فائدة الدالتين any() وall()، إذ تقدمان أسلوباً مختصراً وواضحاً وأكثر أناقة من كتابة سلاسل طويلة من الشروط.
في هذا المقال ستتعرّف إلى آلية عمل الدالتين، والفرق بينهما، وكيفية استخدامهما مع القيم المنطقية والسلاسل النصية ومجموعات الشروط المتعددة، مع أمثلة عملية سهلة الفهم.
فهم القيم المنطقية في Python
قبل استخدام any() وall()، من المهم فهم كيف تتعامل Python مع القيم المنطقية. يمكن تمرير أي كائن إلى الدالة bool() لمعرفة ما إذا كانت قيمته المنطقية True أو False.
بوجه عام:
- القيمة
Noneتُقيَّم على أنهاFalse. - السلاسل النصية الفارغة مثل
""تُقيَّم على أنهاFalse. - القوائم الفارغة وباقي الكائنات القابلة للتكرار إذا كانت فارغة تُقيَّم على أنها
False. - العدد
0بجميع تمثيلاته مثل0و0.0و0jيُقيَّم على أنهFalse. - أي قيمة غير صفرية أو أي كائن غير فارغ يُقيَّم غالباً على أنه
True.
# truth value of None is False
print(bool(None))
# Output False
# truth value of an empty string ("") is False
print(bool(""))
# Output False
# truth value of an empty list (or any iterable) is False
print(bool([]))
# Output False
# truth value of 0 {int (0), float (0.0) and complex (0j)} is False
print(bool(0))
# Output False
ما هي الدالة any() في بايثون؟
تُستخدم الدالة any() لمعرفة ما إذا كان هناك عنصر واحد على الأقل داخل كائن قابل للتكرار يمتلك قيمة منطقية تساوي True.
صيغة استخدام any()
any(iterable)
- تعيد
Trueإذا كانت قيمةbool(x)تساويTrueلعنصر واحد على الأقل داخلiterable. - تعيد
Falseإذا كان الكائن القابل للتكرار فارغاً.
بعبارة أبسط، إذا كان لديك مجموعة قيم وتريد التأكد من أن واحدة منها فقط صحيحة أو غير فارغة أو غير صفرية، فإن any() هي الخيار المناسب.
أمثلة بسيطة على الدالة any()
list_1 = [0, 0, 0, 1, 0, 0, 0, 0]
# any(a list with at least one non-zero entry) returns True
print(any(list_1))
# Output True
list_2 = [0j, 0, 0, 0.0, 0, 0, 0.0, 0]
# any(a list of zeros) returns False
print(any(list_2))
# Output False
list_3 = [True, False, False]
# any(a list with at least one True value) returns True
print(any(list_3))
# Output True
list_4 = ["", "", "code more"]
# any(a list with at least one non-empty string) returns True
print(any(list_4))
# Output True
list_5 = ["", "", ""]
# any(a list of empty strings) returns False
print(any(list_5))
# Output False
استخدام any() للتحقق من وجود أرقام داخل سلسلة نصية
من الاستخدامات العملية الشائعة للدالة any() فحص ما إذا كانت السلسلة النصية تحتوي على رقم واحد على الأقل.
خطوات التنفيذ
- المرور على كل حرف داخل السلسلة النصية.
- استدعاء الدالة
isdigit()على كل حرف. - إذا وُجد حرف واحد على الأقل يُمثّل رقماً، فستُعيد
any()القيمةTrue.
يمكن تنفيذ ذلك بكفاءة عبر List Comprehension لإنشاء قائمة من القيم المنطقية.
# List Comprehension
[output_expression for every_item in an_iterable]
# In essence,
# Loop through the iterable, do something on each item
# and return the result of the operation.
my_string = "coding**is**cool**345"
are_there_digits = [char.isdigit() for char in my_string]
print(any(are_there_digits))
# Output True
في المثال السابق، تحتوي السلسلة my_string على الأرقام 345، لذلك تُعيد any() القيمة True.
print(are_there_digits)
# Output [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True]
استخدام any() للتحقق من وجود حروف داخل سلسلة نصية
يمكن تطبيق الفكرة نفسها لمعرفة ما إذا كانت السلسلة النصية تحتوي على أحرف أبجدية. في هذه الحالة نستخدم الدالة isalpha().
my_string = "***456278)))"
is_letter = [char.isalpha() for char in my_string]
print(any(is_letter))
# Output False
بما أن السلسلة لا تحتوي على أي حروف، فستكون النتيجة False.
print(is_letter)
# Output [False, False, False, False, False, False, False, False, False, False, False, False]
استخدام any() مع شروط متعددة بطريقة تشبه العامل المنطقي or
إذا كان لديك عدد من الشروط وتريد تنفيذ أمر ما عند تحقق شرط واحد على الأقل، فإن any() تمنحك أسلوباً أنظف من كتابة سلسلة طويلة باستخدام العامل or.

بدلاً من كتابة الشروط بهذه الصورة:
if c1 or c2 or ... or cN:
# DO THIS
else:
# DO THIS
يمكنك جمع الشروط داخل قائمة أو tuple ثم تمريرها إلى any():
conditions = [c1, c2, ..., c_N]
if any(conditions):
# DO THIS
else:
# DO THIS
هذه الطريقة مفيدة جداً عندما يكون عدد الشروط كبيراً أو يتم توليدها ديناميكياً داخل البرنامج.
ما هي الدالة all() في بايثون؟
على عكس any()، تُستخدم الدالة all() للتحقق مما إذا كانت جميع العناصر داخل الكائن القابل للتكرار تُقيَّم على أنها True.
صيغة استخدام all()
all(iterable)
- تعيد
Trueإذا كانت قيمةbool(x)تساويTrueلكل عنصر داخلiterable. - تعيد
Trueأيضاً إذا كان الكائن القابل للتكرار فارغاً. - تعيد
Falseإذا وُجد عنصر واحد فقط قيمته المنطقيةFalse.
استخدام all() للتحقق من أن جميع المحارف حروف
لنفترض أن لدينا سلسلة نصية ونريد التأكد من أن كل محارفها حروف فقط. سنستخدم isalpha() مع all().
my_string = "coding**is**cool"
are_all_letters = [char.isalpha() for char in my_string]
print(all(are_all_letters))
# Output False
print(are_all_letters)
# Output [True, True, True, True, True, True, False, False, True, True, False, False, True, True, True, True]
النتيجة كانت False لأن السلسلة تحتوي على الرمز *، وهو ليس حرفاً أبجدياً.
استخدام all() للتحقق من أن جميع المحارف أرقام
إذا كانت السلسلة تحتوي فقط على أرقام، فإن استخدام all() مع isdigit() سيُعيد True.
my_string = "56456278"
are_all_digits = [char.isdigit() for char in my_string]
print(all(are_all_digits))
# Output True
print(are_all_digits)
# Output [True, True, True, True, True, True, True, True]
استخدام all() مع شروط متعددة بطريقة تشبه العامل المنطقي and
إذا كنت تحتاج إلى تنفيذ إجراء عند تحقق جميع الشروط، فإن all() تمثل بديلاً مرتباً لسلسلة الشروط المرتبطة بالعامل and.

بدلاً من الصياغة التقليدية:
if c1 and c2 and ... and cN:
# DO THIS
else:
# DO THIS
يمكن كتابة الشروط بطريقة أكثر اختصاراً:
conditions = [c1, c2, ..., c_N]
if all(conditions):
# DO THIS
else:
# DO THIS
هذا النمط مفيد خصوصاً عند التعامل مع التحقق من المدخلات، أو صلاحيات المستخدم، أو اكتمال عدة متطلبات قبل تنفيذ خطوة معيّنة.
الفرق بين any() وall() في بايثون
| الدالة | متى تعيد True؟ |
حالة الكائن الفارغ |
|---|---|---|
any() |
عند تحقق عنصر واحد على الأقل | تعيد False |
all() |
عند تحقق جميع العناصر | تعيد True |
هذا الفرق مهم جداً، خاصة عند التعامل مع القوائم الفارغة. لذلك يجب دائماً الانتباه إلى سلوك كل دالة قبل استخدامها في منطق البرنامج.
أفضل الممارسات عند استخدام any() وall()
- استخدم
any()عندما يكفي تحقق شرط واحد فقط. - استخدم
all()عندما يكون نجاح العملية متوقفاً على تحقق جميع الشروط. - يمكن تمرير
generator expressionبدلاً من بناء قائمة كاملة لتحسين الأداء في بعض الحالات. - راجع دائماً سلوك الدالتين مع القيم الفارغة لتجنب النتائج غير المتوقعة.
الخلاصة التقنية
تُعد الدالتان any() وall() من الأدوات الصغيرة ذات التأثير الكبير في كتابة كود نظيف ومقروء في Python. الأولى مثالية للتحقق من وجود حالة صحيحة واحدة على الأقل، بينما الثانية مناسبة عندما يتطلب المنطق البرمجي تحقق كل الشروط دون استثناء. من الناحية العملية، استخدامهما لا يجعل الكود أقصر فقط، بل يجعله أيضاً أوضح وأسهل في الصيانة، وهو ما ينعكس مباشرة على جودة التطبيقات البرمجية وقابليتها للتطوير.