پایتون مقادیر «درست» و «غلط» را با نوع 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 پایتون در نظر گرفته میشود، مانند ==، >، <، 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
نکته: در پایتون نسخهی ۳.۸ و بالاتر، استفاده از یک مقدار ثابت (مانند
1،''،[]یا{}) در سمت چپisباعث ایجاد هشدار میشود.
استفاده از عملگر برابری برای مقایسهی یک متغیر منطقی با True یا False یک ضدالگوی پایتون در نظر گرفته میشود.
در عوض، باید از عملگر هویت 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.")