mirror of
https://github.com/python/cpython.git
synced 2025-10-27 16:57:08 +00:00
gh-82012: Deprecate bitwise inversion (~) of bool (#103487)
The bitwise inversion operator on bool returns the bitwise inversion of the underlying int value; i.e. `~True == -2` such that `bool(~True) == True`. It's a common pitfall that users mistake `~` as negation operator and actually want `not`. Supporting `~` is an artifact of bool inheriting from int. Since there is no real use-case for the current behavior, let's deprecate `~` on bool and later raise an error. This removes a potential source errors for users. Full reasoning: https://github.com/python/cpython/issues/82012#issuecomment-1258705971 Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com> Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
This commit is contained in:
parent
5b05b013ff
commit
fdb3ef8c0f
6 changed files with 78 additions and 25 deletions
|
|
@ -147,7 +147,7 @@ are always available. They are listed here in alphabetical order.
|
|||
or omitted, this returns ``False``; otherwise, it returns ``True``. The
|
||||
:class:`bool` class is a subclass of :class:`int` (see :ref:`typesnumeric`).
|
||||
It cannot be subclassed further. Its only instances are ``False`` and
|
||||
``True`` (see :ref:`bltin-boolean-values`).
|
||||
``True`` (see :ref:`typebool`).
|
||||
|
||||
.. index:: pair: Boolean; type
|
||||
|
||||
|
|
|
|||
|
|
@ -802,6 +802,39 @@ number, :class:`float`, or :class:`complex`::
|
|||
hash_value = -2
|
||||
return hash_value
|
||||
|
||||
.. _typebool:
|
||||
|
||||
Boolean Type - :class:`bool`
|
||||
============================
|
||||
|
||||
Booleans represent truth values. The :class:`bool` type has exactly two
|
||||
constant instances: ``True`` and ``False``.
|
||||
|
||||
.. index::
|
||||
single: False
|
||||
single: True
|
||||
pair: Boolean; values
|
||||
|
||||
The built-in function :func:`bool` converts any value to a boolean, if the
|
||||
value can be interpreted as a truth value (see section :ref:`truth` above).
|
||||
|
||||
For logical operations, use the :ref:`boolean operators <boolean>` ``and``,
|
||||
``or`` and ``not``.
|
||||
When applying the bitwise operators ``&``, ``|``, ``^`` to two booleans, they
|
||||
return a bool equivalent to the logical operations "and", "or", "xor". However,
|
||||
the logical operators ``and``, ``or`` and ``!=`` should be preferred
|
||||
over ``&``, ``|`` and ``^``.
|
||||
|
||||
.. deprecated:: 3.12
|
||||
|
||||
The use of the bitwise inversion operator ``~`` is deprecated and will
|
||||
raise an error in Python 3.14.
|
||||
|
||||
:class:`bool` is a subclass of :class:`int` (see :ref:`typesnumeric`). In
|
||||
many numeric contexts, ``False`` and ``True`` behave like the integers 0 and 1, respectively.
|
||||
However, relying on this is discouraged; explicitly convert using :func:`int`
|
||||
instead.
|
||||
|
||||
.. _typeiter:
|
||||
|
||||
Iterator Types
|
||||
|
|
@ -5394,27 +5427,6 @@ information. There is exactly one ``NotImplemented`` object.
|
|||
It is written as ``NotImplemented``.
|
||||
|
||||
|
||||
.. _bltin-boolean-values:
|
||||
|
||||
Boolean Values
|
||||
--------------
|
||||
|
||||
Boolean values are the two constant objects ``False`` and ``True``. They are
|
||||
used to represent truth values (although other values can also be considered
|
||||
false or true). In numeric contexts (for example when used as the argument to
|
||||
an arithmetic operator), they behave like the integers 0 and 1, respectively.
|
||||
The built-in function :func:`bool` can be used to convert any value to a
|
||||
Boolean, if the value can be interpreted as a truth value (see section
|
||||
:ref:`truth` above).
|
||||
|
||||
.. index::
|
||||
single: False
|
||||
single: True
|
||||
pair: Boolean; values
|
||||
|
||||
They are written as ``False`` and ``True``, respectively.
|
||||
|
||||
|
||||
.. _typesinternal:
|
||||
|
||||
Internal Objects
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue