تمثّل Python القيمتين صحيح وخطأ بالنوع bool، وهو نوع فرعي من int. ولا يوجد في هذا النوع سوى قيمتين منطقيتين: True وFalse. ويمكن إسناد هاتين القيمتين إلى متغير ودمجهما باستخدام العوامل المنطقية (and وor وnot):
>>> true_variable = True and True
>>> false_variable = True and False
>>> true_variable = False or True
>>> false_variable = False or False
>>> true_variable = not False
>>> false_variable = not True
تستخدم العوامل المنطقية التقييم قصير الدائرة، أي أن التعبير الواقع على يمين العامل لا يُقيَّم إلا عند الحاجة.
ولكل عامل من هذه العوامل أسبقية مختلفة، إذ يُقيَّم not قبل and وor. ويمكن استخدام الأقواس الهلالية لتقييم جزء من التعبير قبل الأجزاء الأخرى:
>>> not True and True
False
>>> not (True and False)
True
وتُعدّ جميع boolean operators ذات أسبقية أدنى من comparison operators في Python، مثل == و> و< وis وis not.
تحوّل دالة bool (bool()) أي كائن إلى قيمة منطقية. وبشكل افتراضي، تُرجع جميع الكائنات True ما لم يُعرَّف لها أن تُرجع False.
وهناك بعض built-ins التي تُعدّ دائمًا False بحكم التعريف:
None وFalse
int وfloat وcomplex وdecimal أو fraction)str وlist وset وtuple وdict وrange(0))>>> bool(None)
False
>>> bool(1)
True
>>> bool(0)
False
>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool({"Pig" : 1, "Cow": 3})
True
>>> bool({})
False
عند استخدام كائن في سياق منطقي، فإنه يُقيَّم بشكل شفاف على أنه صادق أو زائف باستخدام bool():
>>> a = "is this true?"
>>> b = []
# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
... print("True")
# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
... print("False")
ويمكن للأصناف أن تحدّد كيف تُقيَّم في المواقف الصادقة إذا تجاوزت ونفّذت الطريقة __bool__() و/أو الطريقة __len__().
يُنفَّذ النوع bool على أنه نوع فرعي من int. وهذا يعني أن True يساوي عدديًا 1 وFalse يساوي عدديًا 0. ويمكن ملاحظة ذلك عند مقارنتهما باستخدام عامل التساوي:
>>> 1 == True
True
>>> 0 == False
True
غير أن bools لا تزال مختلفة عن ints، كما يظهر عند مقارنتها باستخدام عامل الهوية، is:
>>> 1 is True
False
>>> 0 is False
False
ملاحظة: في python >= 3.8، سيؤدي استخدام قيمة حرفية (مثل
1أو''أو[]أو{}) على الجانب الأيسر منisإلى رفع تحذير.
يُعدّ استخدام عامل التساوي لمقارنة متغير منطقي بـTrue أو False نمطًا مضادًا في Python. وبدلًا من ذلك، ينبغي استخدام عامل الهوية is:
>>> flag = True
# Not "Pythonic"
>>> if flag == True:
... print("This works, but it's not considered Pythonic.")
# A better way
>>> if flag:
... print("Pythonistas prefer this pattern as more Pythonic.")