Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
47060a19
Commit
47060a19
authored
Sep 12, 2015
by
Larry Hastings
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Backported the What's New In 3.5 from 3.5.1 to 3.5.0 (final!).
parent
85caf8f7
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1262 additions
and
509 deletions
+1262
-509
Doc/whatsnew/3.5.rst
Doc/whatsnew/3.5.rst
+1262
-509
No files found.
Doc/whatsnew/3.5.rst
View file @
47060a19
...
...
@@ -4,6 +4,7 @@
:Release: |release|
:Date: |today|
:Editors: Elvis Pranskevichus <elprans@gmail.com>, Yury Selivanov <yselivanov@gmail.com>
.. Rules for maintenance:
...
...
@@ -46,7 +47,6 @@
when
researching
a
change
.
This
article
explains
the
new
features
in
Python
3.5
,
compared
to
3.4
.
For
full
details
,
see
the
:
source
:`
Misc
/
NEWS
`
file
.
..
note
::
...
...
@@ -69,8 +69,8 @@ Summary -- Release highlights
New syntax features:
* :pep:`465`, a new matrix multiplication operator: ``a @ b``.
* :pep:`492`, coroutines with async and await syntax.
* :pep:`465`, a new matrix multiplication operator: ``a @ b``.
* :pep:`448`, additional unpacking generalizations.
New library modules:
...
...
@@ -81,175 +81,308 @@ New library modules:
New built-in features:
* ``bytes % args``, ``bytearray % args``: :pep:`461` - Adding ``%`` formatting
to bytes and bytearray
to bytes and bytearray.
* ``b'
\
xf0
\
x9f
\
x90
\
x8d
'.hex()``, ``bytearray(b'
\
xf0
\
x9f
\
x90
\
x8d
').hex()``,
``memoryview(b'
\
xf0
\
x9f
\
x90
\
x8d
').hex()``: :issue:`9951` - A ``hex`` method
has been added to bytes, bytearray, and memoryview.
* :class:`memoryview` (including multi-dimensional) now supports tuple indexing.
(Contributed by Antoine Pitrou in :issue:`23632`.)
* Generators have new ``gi_yieldfrom`` attribute, which returns the
object being iterated by ``yield from`` expressions. (Contributed
by Benno Leslie and Yury Selivanov in :issue:`24450`.)
* New :exc:`RecursionError` exception. (Contributed by Georg Brandl
in :issue:`19235`.)
Implementation improvements:
* New :exc:`StopAsyncIteration` exception. (Contributed by
Yury Selivanov in :issue:`24017`. See also :pep:`492`.)
CPython implementation improvements:
* When the ``LC_TYPE`` locale is the POSIX locale (``C`` locale),
:py:data:`sys.stdin` and :py:data:`sys.stdout` are now using the
``surrogateescape`` error handler, instead of the ``strict`` error handler
(:issue:`19977`).
``surrogateescape`` error handler, instead of the ``strict`` error handler.
(Contributed by Victor Stinner in :issue:`19977`.)
* ``.pyo`` files are no longer used and have been replaced by a more flexible
scheme that inclides the optimization level explicitly in ``.pyc`` name.
(:pep:`488`)
*
:pep:`488`, the elimination of ``.pyo`` files.
* :pep:`489`, multi-phase initialization of extension modules
.
*
Builtin and extension modules are now initialized in a multi-phase process,
which is similar to how Python modules are loaded. (:pep:`489`)
.
Significantly Improved Library Modules:
* :class:`collections.OrderedDict` is now implemented in C, which improves
its performance between 4x to 100x times. Contributed by Eric Snow in
:issue:`16991`.
* :class:`collections.OrderedDict` is now implemented in C, which makes it
4 to 100 times faster. (Contributed by Eric Snow in :issue:`16991`.)
* You may now pass bytes to the :mod:`tempfile` module'
s
APIs
and
it
will
return the temporary pathname as bytes instead of str. It also accepts
a value of ``None`` on parameters where only str was accepted in the past to
do the right thing based on the types of the other inputs. Two functions,
:func:`gettempdirb` and :func:`gettempprefixb`, have been added to go along
with this. This behavior matches that of the :mod:`os` APIs.
return
the
temporary
pathname
as
:
class
:`
bytes
`
instead
of
:
class
:`
str
`.
It
also
accepts
a
value
of
``
None
``
on
parameters
where
only
str
was
accepted
in
the
past
to
do
the
right
thing
based
on
the
types
of
the
other
inputs
.
Two
functions
,
:
func
:`
gettempdirb
`
and
:
func
:`
gettempprefixb
`,
have
been
added
to
go
along
with
this
.
This
behavior
matches
that
of
the
:
mod
:`
os
`
APIs
.
(
Contributed
by
Gregory
P
.
Smith
in
:
issue
:`
24230
`.)
*
:
mod
:`
ssl
`
module
gained
support
for
Memory
BIO
,
which
decouples
SSL
protocol
handling
from
network
IO
.
(
Contributed
by
Geert
Jansen
in
:
issue
:`
21965
`.)
*
:
mod
:`
traceback
`
has
new
lightweight
and
convenient
to
work
with
classes
:
class
:`~
traceback
.
TracebackException
`,
:
class
:`~
traceback
.
StackSummary
`,
and
:
class
:`~
traceback
.
FrameSummary
`.
(
Contributed
by
Robert
Collins
in
:
issue
:`
17911
`.)
*
Most
of
:
func
:`
functools
.
lru_cache
`
machinery
is
now
implemented
in
C
.
(
Contributed
by
Matt
Joiner
,
Alexey
Kachayev
,
and
Serhiy
Storchaka
in
:
issue
:`
14373
`.)
Security
improvements
:
* None yet.
*
SSLv3
is
now
disabled
throughout
the
standard
library
.
It
can
still
be
enabled
by
instantiating
a
:
class
:`
ssl
.
SSLContext
`
manually
.
(
See
:
issue
:`
22638
`
for
more
details
;
this
change
was
backported
to
CPython
3.4
and
2.7
.)
*
HTTP
cookie
parsing
is
now
stricter
,
in
order
to
protect
against
potential
injection
attacks
.
(
Contributed
by
Antoine
Pitrou
in
:
issue
:`
22796
`.)
Windows
improvements
:
* A new installer for Windows has replaced the old MSI. See :ref:`using-on-windows`
for more information.
*
A
new
installer
for
Windows
has
replaced
the
old
MSI
.
See
:
ref
:`
using
-
on
-
windows
`
for
more
information
.
*
Windows
builds
now
use
Microsoft
Visual
C
++
14.0
,
and
extension
modules
should
use
the
same
.
Please
read
on
for
a
comprehensive
list
of
user
-
facing
changes
,
including
many
other
smaller
improvements
,
CPython
optimizations
,
deprecations
,
and
potential
porting
issues
.
Please read on for a comprehensive list of user-facing changes.
New
Features
============
..
PEP-sized items next.
..
_whatsnew
-
pep
-
492
:
.. _pep-4XX:
PEP
492
-
Coroutines
with
async
and
await
syntax
------------------------------------------------
.. PEP 4XX: Virtual Environments
.. =============================
:
pep
:`
492
`
greatly
improves
support
for
asynchronous
programming
in
Python
by
adding
:
term
:`
awaitable
objects
<
awaitable
>`,
:
term
:`
coroutine
functions
<
coroutine
function
>`,
:
term
:`
asynchronous
iteration
<
asynchronous
iterable
>`,
and
:
term
:`
asynchronous
context
managers
<
asynchronous
context
manager
>`.
Coroutine
functions
are
declared
using
the
new
:
keyword
:`
async
def
`
syntax
::
.. (Implemented by Foo Bar.)
>>>
async
def
coro
():
...
return
'spam'
.. .. seealso::
Inside
a
coroutine
function
,
the
new
:
keyword
:`
await
`
expression
can
be
used
to
suspend
coroutine
execution
until
the
result
is
available
.
Any
object
can
be
*
awaited
*,
as
long
as
it
implements
the
:
term
:`
awaitable
`
protocol
by
defining
the
:
meth
:`
__await__
`
method
.
:pep:`4XX` - Python Virtual Environments
PEP written by Carl Meyer
PEP
492
also
adds
:
keyword
:`
async
for
`
statement
for
convenient
iteration
over
asynchronous
iterables
.
An
example
of
a
simple
HTTP
client
written
using
the
new
syntax
::
PEP 492 - Coroutines with async and await syntax
------------------------------------------------
import
asyncio
The PEP added dedicated syntax for declaring :term:`coroutines <coroutine>`,
:keyword:`await` expressions, new asynchronous :keyword:`async for`
and :keyword:`async with` statements.
async
def
http_get
(
domain
):
reader
,
writer
=
await
asyncio
.
open_connection
(
domain
,
80
)
Example::
writer
.
write
(
b
'\r\n'
.
join
([
b
'GET / HTTP/1.1'
,
b
'Host: %b'
%
domain
.
encode
(
'latin-1'
),
b
'Connection: close'
,
b
''
,
b
''
]))
async def read_data(db):
async with db.transaction():
data = await db.fetch('SELECT ...')
async
for
line
in
reader
:
print
(
'>>>'
,
line
)
PEP written and implemented by Yury Selivanov.
writer
.
close
()
.. seealso::
loop
=
asyncio
.
get_event_loop
()
try
:
loop
.
run_until_complete
(
http_get
(
'example.com'
))
finally
:
loop
.
close
()
:pep:`492` -- Coroutines with async and await syntax
Similarly
to
asynchronous
iteration
,
there
is
a
new
syntax
for
asynchronous
context
managers
.
The
following
script
::
PEP 461 - Formatting support for bytes and bytearray
----------------------------------------------------
import
asyncio
This PEP proposes adding % formatting operations similar to Python 2's ``str``
type to :class:`bytes` and :class:`bytearray`.
async
def
coro
(
name
,
lock
):
print
(
'coro {}: waiting for lock'
.
format
(
name
))
async
with
lock
:
print
(
'coro {}: holding the lock'
.
format
(
name
))
await
asyncio
.
sleep
(
1
)
print
(
'coro {}: releasing the lock'
.
format
(
name
))
Examples::
loop
=
asyncio
.
get_event_loop
()
lock
=
asyncio
.
Lock
()
coros
=
asyncio
.
gather
(
coro
(
1
,
lock
),
coro
(
2
,
lock
))
try
:
loop
.
run_until_complete
(
coros
)
finally
:
loop
.
close
()
>>> b'Hello %s!' % b'World'
b'Hello World!'
>>> b'x=%i y=%f' % (1, 2.5)
b'x=1 y=2.500000'
will
print
::
Unicode is not allowed for ``%s``, but it is accepted by ``%a`` (equivalent of
``repr(obj).encode('ascii', 'backslashreplace')``)::
coro
2
:
waiting
for
lock
coro
2
:
holding
the
lock
coro
1
:
waiting
for
lock
coro
2
:
releasing
the
lock
coro
1
:
holding
the
lock
coro
1
:
releasing
the
lock
>>> b'Hello %s!' % 'World'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'
>>> b'price: %a' % '10€'
b"price: '10\\u20ac'"
Note
that
both
:
keyword
:`
async
for
`
and
:
keyword
:`
async
with
`
can
only
be
used
inside
a
coroutine
function
declared
with
:
keyword
:`
async
def
`.
Coroutine
functions
are
intended
to
be
run
inside
a
compatible
event
loop
,
such
as
:
class
:`
asyncio
.
Loop
`.
..
seealso
::
:pep:`461` -- Adding % formatting to bytes and bytearray
:
pep
:`
492
`
--
Coroutines
with
async
and
await
syntax
PEP
written
and
implemented
by
Yury
Selivanov
.
..
_whatsnew
-
pep
-
465
:
PEP
465
-
A
dedicated
infix
operator
for
matrix
multiplication
--------------------------------------------------------------
This PEP proposes a new binary operator to be used for matrix multiplication,
called ``@``. (Mnemonic: ``@`` is ``*`` for mATrices.)
:
pep
:`
465
`
adds
the
``@``
infix
operator
for
matrix
multiplication
.
Currently
,
no
builtin
Python
types
implement
the
new
operator
,
however
,
it
can
be
implemented
by
defining
:
meth
:`
__matmul__
`,
:
meth
:`
__rmatmul__
`,
and
:
meth
:`
__imatmul__
`
for
regular
,
reflected
,
and
in
-
place
matrix
multiplication
.
The
semantics
of
these
methods
is
similar
to
that
of
methods
defining
other
infix
arithmetic
operators
.
Matrix
multiplication
is
a
notably
common
operation
in
many
fields
of
mathematics
,
science
,
engineering
,
and
the
addition
of
``@``
allows
writing
cleaner
code
::
S
=
(
H
@
beta
-
r
).
T
@
inv
(
H
@
V
@
H
.
T
)
@
(
H
@
beta
-
r
)
instead
of
::
S
=
dot
((
dot
(
H
,
beta
)
-
r
).
T
,
dot
(
inv
(
dot
(
dot
(
H
,
V
),
H
.
T
)),
dot
(
H
,
beta
)
-
r
))
An
upcoming
release
of
NumPy
1.10
will
add
support
for
the
new
operator
::
>>>
import
numpy
>>>
x
=
numpy
.
ones
(
3
)
>>>
x
array
([
1.
,
1.
,
1.
])
>>>
m
=
numpy
.
eye
(
3
)
>>>
m
array
([[
1.
,
0.
,
0.
],
[
0.
,
1.
,
0.
],
[
0.
,
0.
,
1.
]])
>>>
x
@
m
array
([
1.
,
1.
,
1.
])
..
seealso
::
:
pep
:`
465
`
--
A
dedicated
infix
operator
for
matrix
multiplication
PEP
written
by
Nathaniel
J
.
Smith
;
implemented
by
Benjamin
Peterson
.
..
_whatsnew
-
pep
-
448
:
PEP
448
-
Additional
Unpacking
Generalizations
----------------------------------------------
This PEP proposes extended usag
es of the ``*`` iterable unpacking
operator and ``**`` dictionary unpacking operator
s
to
allow unpacking in more positions, an arbitrary number of
times, and in additional circumstances. Specifically,
in function calls, in comprehensions and generator expressions, and
in displays.
:
pep
:`
448
`
extends
the
allowed
us
es
of
the
``*``
iterable
unpacking
operator
and
``**``
dictionary
unpacking
operator
.
It
is
now
possible
to
use
an
arbitrary
number
of
unpackings
in
function
calls
::
>>>
print
(*[
1
],
*[
2
],
3
,
*[
4
,
5
])
1
2
3
4
5
Function calls are proposed to support an arbitrary number of
unpackings rather than just one::
>>>
def
fn
(
a
,
b
,
c
,
d
):
...
print
(
a
,
b
,
c
,
d
)
...
>>> print(*[1], *[2], 3)
1 2 3
>>> dict(**{'x': 1}, y=2, **{'z': 3})
{'x': 1, 'y': 2, 'z': 3}
>>>
fn
(**{
'a'
:
1
,
'c'
:
3
},
**{
'b'
:
2
,
'd'
:
4
})
1
2
3
4
Unpacking is proposed to be allowed inside tuple, list, set,
and dictionary display
s::
Similarly
,
tuple
,
list
,
set
,
and
dictionary
displays
allow
multiple
unpacking
s
::
>>>
*
range
(
4
),
4
(
0
,
1
,
2
,
3
,
4
)
>>>
[*
range
(
4
),
4
]
[
0
,
1
,
2
,
3
,
4
]
>>> {*range(4), 4}
{0, 1, 2, 3, 4}
>>>
{*
range
(
4
),
4
,
*(
5
,
6
,
7
)}
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
}
>>>
{
'x'
:
1
,
**{
'y'
:
2
}}
{
'x'
:
1
,
'y'
:
2
}
In dictionaries, later values will always override earlier ones::
..
seealso
::
:
pep
:`
448
`
--
Additional
Unpacking
Generalizations
PEP
written
by
Joshua
Landau
;
implemented
by
Neil
Girdhar
,
Thomas
Wouters
,
and
Joshua
Landau
.
..
_whatsnew
-
pep
-
461
:
PEP
461
-
%
formatting
support
for
bytes
and
bytearray
------------------------------------------------------
PEP
461
adds
%
formatting
to
:
class
:`
bytes
`
and
:
class
:`
bytearray
`,
aiding
in
handling
data
that
is
a
mixture
of
binary
and
ASCII
compatible
text
.
This
feature
also
eases
porting
such
code
from
Python
2.
Examples
::
>>>
b
'Hello %s!'
%
b
'World'
b
'Hello World!'
>>>
b
'x=%i y=%f'
%
(
1
,
2.5
)
b
'x=1 y=2.500000'
Unicode
is
not
allowed
for
``%
s
``,
but
it
is
accepted
by
``%
a
``
(
equivalent
of
``
repr
(
obj
).
encode
(
'ascii'
,
'backslashreplace'
)``)::
>>> {'x': 1, **{'x': 2}}
{'x': 2}
>>>
b
'Hello %s!'
%
'World'
Traceback
(
most
recent
call
last
):
File
"<stdin>"
,
line
1
,
in
<
module
>
TypeError
:
%
b
requires
bytes
,
or
an
object
that
implements
__bytes__
,
not
'str'
>>>
{**{'x': 2}, 'x': 1}
{'x': 1}
>>>
b
'price: %a'
%
'10€'
b
"price: '10
\\
u20ac'"
..
seealso
::
:pep:`448` -- Additional Unpacking Generalizations
:
pep
:`
461
`
--
Adding
%
formatting
to
bytes
and
bytearray
PEP
written
by
Ethan
Furman
;
implemented
by
Neil
Schemenauer
and
Ethan
Furman
.
..
_whatsnew
-
pep
-
484
:
PEP
484
-
Type
Hints
--------------------
...
...
@@ -270,10 +403,14 @@ types.
..
seealso
::
* :pep:`484` -- Type Hints
*
:
mod
:`
typing
`
module
documentation
*
:
pep
:`
484
`
--
Type
Hints
PEP
written
by
Guido
van
Rossum
,
Jukka
Lehtosalo
,
and
Ł
ukasz
Langa
;
implemented
by
Guido
van
Rossum
.
..
_whatsnew
-
pep
-
471
:
PEP
471
-
os
.
scandir
()
function
--
a
better
and
faster
directory
iterator
-------------------------------------------------------------------------
...
...
@@ -282,13 +419,13 @@ to the standard library. Additionally, :func:`os.walk` is now
implemented
using
:
func
:`
os
.
scandir
`,
which
speeds
it
up
by
3
-
5
times
on
POSIX
systems
and
by
7
-
20
times
on
Windows
systems
.
PEP and implementation written by Ben Hoyt with the help of Victor Stinner.
..
seealso
::
:pep:`471` -- os.scandir() function -- a better and faster directory
iterator
:
pep
:`
471
`
--
os
.
scandir
()
function
--
a
better
and
faster
directory
iterator
PEP
written
and
implemented
by
Ben
Hoyt
with
the
help
of
Victor
Stinner
.
..
_whatsnew
-
pep
-
475
:
PEP
475
:
Retry
system
calls
failing
with
EINTR
----------------------------------------------
...
...
@@ -302,69 +439,48 @@ Examples of functions which are now retried when interrupted by a signal
instead of raising :exc:`InterruptedError` if the Python signal handler does
not raise an exception:
* :func:`open`, :func:`os.open`, :func:`io.open`
* functions of the :mod:`faulthandler` module
* :mod:`os` functions:
- :func:`os.fchdir`
- :func:`os.fchmod`
- :func:`os.fchown`
- :func:`os.fdatasync`
- :func:`os.fstat`
- :func:`os.fstatvfs`
- :func:`os.fsync`
- :func:`os.ftruncate`
- :func:`os.mkfifo`
- :func:`os.mknod`
- :func:`os.posix_fadvise`
- :func:`os.posix_fallocate`
- :func:`os.pread`
- :func:`os.pwrite`
- :func:`os.read`
- :func:`os.readv`
- :func:`os.sendfile`
- :func:`os.wait3`
- :func:`os.wait4`
- :func:`os.wait`
- :func:`os.waitid`
- :func:`os.waitpid`
- :func:`os.write`
- :func:`os.writev`
- special cases: :func:`os.close` and :func:`os.dup2` now ignore
:py:data:`~errno.EINTR` error, the syscall is not retried (see the PEP
for the rationale)
* :func:`open`, :func:`os.open`, :func:`io.open`;
* functions of the :mod:`faulthandler` module;
* :mod:`select` functions:
* :mod:`os` functions: :func:`~os.fchdir`, :func:`~os.fchmod`,
:func:`~os.fchown`, :func:`~os.fdatasync`, :func:`~os.fstat`,
:func:`~os.fstatvfs`, :func:`~os.fsync`, :func:`~os.ftruncate`,
:func:`~os.mkfifo`, :func:`~os.mknod`, :func:`~os.posix_fadvise`,
:func:`~os.posix_fallocate`, :func:`~os.pread`, :func:`~os.pwrite`,
:func:`~os.read`, :func:`~os.readv`, :func:`~os.sendfile`,
:func:`~os.wait3`, :func:`~os.wait4`, :func:`~os.wait`,
:func:`~os.waitid`, :func:`~os.waitpid`, :func:`~os.write`,
:func:`~os.writev`;
- :func:`select.devpoll.poll`
- :func:`select.epoll.poll`
- :func:`select.kqueue.control`
- :func:`select.poll.poll`
- :func:`select.select`
* special cases: :func:`os.close` and :func:`os.dup2` now ignore
:py:data:`~errno.EINTR` error, the syscall is not retried (see the PEP
for the rationale);
* :func:`socket.socket` methods:
* :mod:`select` functions: :func:`~select.devpoll.poll`,
:func:`~select.epoll.poll`, :func:`~select.kqueue.control`,
:func:`~select.poll.poll`, :func:`~select.select`;
- :meth:`~socket.socket.accept`
- :meth:`~socket.socket.connect` (except for non-blocking sockets)
- :meth:`~socket.socket.recv`
- :meth:`~socket.socket.recvfrom`
- :meth:`~socket.socket.recvmsg`
- :meth:`~socket.socket.send`
- :meth:`~socket.socket.sendall`
- :meth:`~socket.socket.sendmsg`
- :meth:`~socket.socket.sendto`
* :func:`socket.socket` methods: :meth:`~socket.socket.accept`,
:meth:`~socket.socket.connect` (except for non-blocking sockets),
:meth:`~socket.socket.recv`, :meth:`~socket.socket.recvfrom`,
:meth:`~socket.socket.recvmsg`, :meth:`~socket.socket.send`,
:meth:`~socket.socket.sendall`, :meth:`~socket.socket.sendmsg`,
:meth:`~socket.socket.sendto`;
* :func:`signal.sigtimedwait`, :func:`signal.sigwaitinfo`
* :func:`time.sleep`
* :func:`signal.sigtimedwait`, :func:`signal.sigwaitinfo`;
PEP and implementation written by Charles-François Natali and Victor Stinner,
with the help of Antoine Pitrou (the french connection).
* :func:`time.sleep`.
.. seealso::
:pep:`475` -- Retry system calls failing with EINTR
PEP and implementation written by Charles-François Natali and
Victor Stinner, with the help of Antoine Pitrou (the french connection).
.. _whatsnew-pep-479:
PEP 479: Change StopIteration handling inside generators
--------------------------------------------------------
...
...
@@ -378,13 +494,14 @@ be used::
Without a ``__future__`` import, a :exc:`PendingDeprecationWarning` will be
raised.
PEP written by Chris Angelico and Guido van Rossum. Implemented by
Chris Angelico, Yury Selivanov and Nick Coghlan.
.. seealso::
:pep:`479` -- Change StopIteration handling inside generators
PEP written by Chris Angelico and Guido van Rossum. Implemented by
Chris Angelico, Yury Selivanov and Nick Coghlan.
.. _whatsnew-pep-486:
PEP 486: Make the Python Launcher aware of virtual environments
---------------------------------------------------------------
...
...
@@ -397,8 +514,11 @@ environment will be used.
.. seealso::
:pep:`486` -- Make the Python Launcher aware of virtual environments
PEP written and implemented by Paul Moore.
.. _whatsnew-pep-488:
PEP 488: Elimination of PYO files
---------------------------------
...
...
@@ -407,14 +527,18 @@ PEP 488: Elimination of PYO files
need to constantly regenerate bytecode files, ``.pyc`` files now have an
optional ``opt-`` tag in their name when the bytecode is optimized. This has the
side-effect of no more bytecode file name clashes when running under either
``-O`` or ``-OO``. Consequently, bytecode files generated from ``-O``, and
``-OO`` may now exist simultaneously. :func:`importlib.util.cache_from_source`
has an updated API to help with this change.
:option:`-O` or :option:`-OO`. Consequently, bytecode files generated from
:option:`-O`, and :option:`-OO` may now exist simultaneously.
:func:`importlib.util.cache_from_source` has an updated API to help with
this change.
.. seealso::
:pep:`488` -- Elimination of PYO files
PEP written and implemented by Brett Cannon.
.. _whatsnew-pep-489:
PEP 489: Multi-phase extension module initialization
----------------------------------------------------
...
...
@@ -429,7 +553,12 @@ rather than being restricted to ASCII.
.. seealso::
:pep:`488` -- Multi-phase extension module initialization
:pep:`489` -- Multi-phase extension module initialization
PEP written by Petr Viktorin, Stefan Behnel, and Nick Coghlan;
implemented by Petr Viktorin.
.. _whatsnew-pep-485:
PEP 485: A function for testing approximate equality
----------------------------------------------------
...
...
@@ -442,18 +571,21 @@ close is determined according to given absolute and relative tolerances.
.. seealso::
:pep:`485` -- A function for testing approximate equality
PEP written by Christopher Barker; implemented by Chris Barker and
Tal Einat.
Other Language Changes
======================
Some smaller changes made to the core Python language are:
* Added the ``
'namereplace'`` error handlers. The ``'backslashreplace'
``
* Added the ``
"namereplace"`` error handlers. The ``"backslashreplace"
``
error handlers now works with decoding and translating.
(Contributed by Serhiy Storchaka in :issue:`19676` and :issue:`22286`.)
* The :option:`-b` option now affects comparisons of :class:`bytes` with
:class:`int`. (Contributed by Serhiy Storchaka in :issue:`23681`)
:class:`int`. (Contributed by Serhiy Storchaka in :issue:`23681`
.
)
* New Kazakh :ref:`codec <standard-encodings>` ``kz1048``. (Contributed by
Serhiy Storchaka in :issue:`22682`.)
...
...
@@ -465,6 +597,9 @@ Some smaller changes made to the core Python language are:
* New Tajik :ref:`codec <standard-encodings>` ``koi8_t``. (Contributed by
Serhiy Storchaka in :issue:`22681`.)
* Circular imports involving relative imports are now supported.
(Contributed by Brett Cannon and Antoine Pitrou in :issue:`17636`.)
New Modules
===========
...
...
@@ -476,8 +611,8 @@ zipapp
The new :mod:`zipapp` module (specified in :pep:`441`) provides an API and
command line tool for creating executable Python Zip Applications, which
were introduced in Python 2.6 in :issue:`1739468` but which were not well
publici
s
ed, either at the time or since.
were introduced in Python 2.6 in :issue:`1739468`
,
but which were not well
publici
z
ed, either at the time or since.
With the new module, bundling your application is as simple as putting all
the files, including a ``__main__.py`` file, into a directory ``myapp``
...
...
@@ -486,6 +621,13 @@ and running::
$ python -m zipapp myapp
$ python myapp.pyz
The module implementation has been contributed by Paul Moore in
:issue:`23491`.
.. seealso::
:pep:`441` -- Improving Python ZIP Application Support
Improved Modules
================
...
...
@@ -493,118 +635,247 @@ Improved Modules
argparse
--------
* :class:`~argparse.ArgumentParser` now allows to disable
:ref:`abbreviated usage <prefix-matching>` of long options by setting
:ref:`allow_abbrev` to ``False``.
(Contributed by Jonathan Paugh, Steven Bethard, paul j3 and Daniel Eriksson.)
The :class:`~argparse.ArgumentParser` class now allows to disable
:ref:`abbreviated usage <prefix-matching>` of long options by setting
:ref:`allow_abbrev` to ``False``. (Contributed by Jonathan Paugh,
Steven Bethard, paul j3 and Daniel Eriksson in :issue:`14910`.)
bz2
---
The :meth:`BZ2Decompressor.decompress <bz2.BZ2Decompressor.decompress>`
method now accepts an optional *max_length* argument to limit the maximum
size of decompressed data. (Contributed by Nikolaus Rath in :issue:`15955`.)
cgi
---
* :class:`~cgi.FieldStorage` now supports the context management protocol.
(Contributed by Berker Peksag in :issue:`20289`.)
The :class:`~cgi.FieldStorage` class now supports the context management
protocol. (Contributed by Berker Peksag in :issue:`20289`.)
cmath
-----
* :func:`cmath.isclose` function added.
(Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
A new function :func:`~cmath.isclose` provides a way to test for approximate
equality.
(Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
code
----
* The :func:`code.InteractiveInterpreter.showtraceback` method now prints
the full chained traceback, just like the interactive interpreter.
(Contributed by Claudiu Popa in :issue:`17442`.)
The :func:`InteractiveInterpreter.showtraceback <code.InteractiveInterpreter.showtraceback>`
method now prints the full chained traceback, just like the interactive
interpreter. (Contributed by Claudiu Popa in :issue:`17442`.)
collections
-----------
* You can now update docstrings produced by :func:`collections.namedtuple`::
The :class:`~collections.OrderedDict` class is now implemented in C, which
makes it 4 to 100 times faster. (Contributed by Eric Snow in :issue:`16991`.)
:meth:`OrderedDict.items <collections.OrderedDict.items>`,
:meth:`OrderedDict.keys <collections.OrderedDict.keys>`,
:meth:`OrderedDict.values <collections.OrderedDict.values>` views now support
:func:`reversed` iteration.
(Contributed by Serhiy Storchaka in :issue:`19505`.)
The :class:`~collections.deque` class now defines
:meth:`~collections.deque.index`, :meth:`~collections.deque.insert`, and
:meth:`~collections.deque.copy`, as well as supports ``+`` and ``*`` operators.
This allows deques to be recognized as a :class:`~collections.abc.MutableSequence`
and improves their substitutability for lists.
(Contributed by Raymond Hettinger :issue:`23704`.)
Docstrings produced by :func:`~collections.namedtuple` can now be updated::
Point = namedtuple('
Point
', ['
x
', '
y
'])
Point.__doc__ = '
ordered
pair
'
Point.x.__doc__ = '
abscissa
'
Point.y.__doc__ = '
ordinate
'
(Contributed by Berker Peksag in :issue:`24064`.)
(Contributed by Berker Peksag in :issue:`24064`.)
The :class:`~collections.UserString` class now implements
:meth:`__getnewargs__`, :meth:`__rmod__`, :meth:`~str.casefold`,
:meth:`~str.format_map`, :meth:`~str.isprintable`, and :meth:`~str.maketrans`
methods to match corresponding methods of :class:`str`.
(Contributed by Joe Jevnik in :issue:`22189`.)
collections.abc
---------------
A new :class:`~collections.abc.Generator` abstract base class. (Contributed
by Stefan Behnel in :issue:`24018`.)
New :class:`~collections.abc.Coroutine`,
:class:`~collections.abc.AsyncIterator`, and
:class:`~collections.abc.AsyncIterable` abstract base classes.
(Contributed by Yury Selivanov in :issue:`24184`.)
compileall
----------
* :func:`compileall.compile_dir` and :mod:`compileall`'s command-line interface
can now do parallel bytecode compilation.
(Contributed by Claudiu Popa in :issue:`16104`.)
A new :mod:`compileall` option, ``-j N``, allows to run ``N`` workers
sumultaneously to perform parallel bytecode compilation.
The :func:`~compileall.compile_dir` function has a corresponding ``workers``
parameter. (Contributed by Claudiu Popa in :issue:`16104`.)
The ``-q`` command line option can now be specified more than once, in
which case all output, including errors, will be suppressed. The corresponding
``quiet`` parameter in :func:`~compileall.compile_dir`,
:func:`~compileall.compile_file`, and :func:`~compileall.compile_path` can now
accept an integer value indicating the level of output suppression.
(Contributed by Thomas Kluyver in :issue:`21338`.)
concurrent.futures
------------------
The :meth:`Executor.map <concurrent.futures.Executor.map>` method now accepts a
*chunksize* argument to allow batching of tasks to improve performance when
:meth:`~concurrent.futures.ProcessPoolExecutor` is used.
(Contributed by Dan O'
Reilly
in
:
issue
:`
11271
`.)
contextlib
----------
* The new :func:`contextlib.redirect_stderr` context manager(similar to
:func:`contextlib.redirect_stdout`) makes it easier for utility scripts to
handle inflexible APIs that write their output to :data:`sys.stderr` and
don't provide any options to redirect it.
(Contributed by Berker Peksag in :issue:`22389`.)
The
new
:
func
:`~
contextlib
.
redirect_stderr
`
context
manager
(
similar
to
:
func
:`~
contextlib
.
redirect_stdout
`)
makes
it
easier
for
utility
scripts
to
handle
inflexible
APIs
that
write
their
output
to
:
data
:`
sys
.
stderr
`
and
don
't provide any options to redirect it. (Contributed by Berker Peksag in
:issue:`22389`.)
curses
------
* The new :func:`curses.update_lines_cols` function updates the variables
:envvar:`curses.LINES` and :envvar:`curses.COLS`.
The new :func:`~curses.update_lines_cols` function updates :envvar:`LINES`
and :envvar:`COLS` environment variables. This is useful for detecting
manual screen resize. (Contributed by Arnon Yaari in :issue:`4254`.)
difflib
-------
* The charset of the HTML document generated by :meth:`difflib.HtmlDiff.make_file`
can now be customized by using *charset* keyword-only parameter. The default
charset of HTML document changed from ``'ISO-8859-1'`` to ``'utf-8'``.
(Contributed by Berker Peksag in :issue:`2052`.)
The charset of HTML documents generated by
:meth:`HtmlDiff.make_file <difflib.HtmlDiff.make_file>`
can now be customized by using a new *charset* keyword-only argument.
The default charset of HTML document changed from ``"ISO-8859-1"``
to ``"utf-8"``.
(Contributed by Berker Peksag in :issue:`2052`.)
The :func:`~difflib.diff_bytes` function can now compare lists of byte
strings. This fixes a regression from Python 2.
(Contributed by Terry J. Reedy and Greg Ward in :issue:`17445`.)
* It's now possible to compare lists of byte strings with
:func:`difflib.diff_bytes` (fixes a regression from Python 2).
distutils
---------
* The ``build`` and ``build_ext`` commands now accept a ``-j``
option to enable parallel building of extension modules.
(Contributed by Antoine Pitrou in :issue:`5309`.)
Both ``build`` and ``build_ext`` commands now accept a ``-j`` option to
enable parallel building of extension modules.
(Contributed by Antoine Pitrou in :issue:`5309`.)
The :mod:`distutils` module now supports ``xz`` compression, and can be
enabled by passing ``xztar`` as an argument to ``bdist --format``.
(Contributed by Serhiy Storchaka in :issue:`16314`.)
* Added support for the LZMA compression.
(Contributed by Serhiy Storchaka in :issue:`16314`.)
doctest
-------
* :func:`doctest.DocTestSuite` returns an empty :class:`unittest.TestSuite` if
*module* contains no docstrings instead of raising :exc:`ValueError`.
(Contributed by Glenn Jones in :issue:`15916`.)
The :func:`~doctest.DocTestSuite` function returns an empty
:class:`unittest.TestSuite` if *module* contains no docstrings instead of
raising :exc:`ValueError`. (Contributed by Glenn Jones in :issue:`15916`.)
email
-----
* A new policy option :attr:`~email.policy.Policy.mangle_from_` controls
whether or not lines that start with "From " in email bodies are prefixed with
a '>' character by generators. The default is ``True`` for
:attr:`~email.policy.compat32` and ``False`` for all other policies.
(Contributed by Milan Oberkirch in :issue:`20098`.)
A new policy option :attr:`Policy.mangle_from_ <email.policy.Policy.mangle_from_>`
controls whether or not lines that start with ``"From "`` in email bodies are
prefixed with a ``">"`` character by generators. The default is ``True`` for
:attr:`~email.policy.compat32` and ``False`` for all other policies.
(Contributed by Milan Oberkirch in :issue:`20098`.)
A new
:meth:`Message.get_content_disposition <email.message.Message.get_content_disposition>`
method provides easy access to a canonical value for the
:mailheader:`Content-Disposition` header.
(Contributed by Abhilash Raj in :issue:`21083`.)
A new policy option :attr:`EmailPolicy.utf8 <email.policy.EmailPolicy.utf8>`
can be set to ``True`` to encode email headers using the UTF-8 charset instead
of using encoded words. This allows ``Messages`` to be formatted according to
:rfc:`6532` and used with an SMTP server that supports the :rfc:`6531`
``SMTPUTF8`` extension. (Contributed by R. David Murray in
:issue:`24211`.)
enum
----
The :class:`~enum.Enum` callable has a new parameter *start* to
specify the initial number of enum values if only *names* are provided::
>>> Animal = enum.Enum('
Animal
', '
cat
dog
', start=10)
>>> Animal.cat
<Animal.cat: 10>
>>> Animal.dog
<Animal.dog: 11>
(Contributed by Ethan Furman in :issue:`21706`.)
faulthandler
------------
:func:`~faulthandler.enable`, :func:`~faulthandler.register`,
:func:`~faulthandler.dump_traceback` and
:func:`~faulthandler.dump_traceback_later` functions now accept file
descriptors in addition to file-like objects.
(Contributed by Wei Wu in :issue:`23566`.)
* A new method :meth:`~email.message.Message.get_content_disposition` provides
easy access to a canonical value for the :mailheader:`Content-Disposition`
header (``None`` if there is no such header). (Contributed by Abhilash Raj
in :issue:`21083`.)
functools
---------
Most of :func:`~functools.lru_cache` machinery is now implemented in C, making
it significantly faster. (Contributed by Matt Joiner, Alexey Kachayev, and
Serhiy Storchaka in :issue:`14373`.)
* A new policy option :attr:`~email.policy.EmailPolicy.utf8` can be set
``True`` to encode email headers using the utf8 charset instead of using
encoded words. This allows ``Messages`` to be formatted according to
:rfc:`6532` and used with an SMTP server that supports the :rfc:`6531`
``SMTPUTF8`` extension. (Contributed by R. David Murray in :issue:`24211`.)
glob
----
* :func:`~glob.iglob` and :func:`~glob.glob` now support recursive search in
subdirectories using the "``**``" pattern.
(Contributed by Serhiy Storchaka in :issue:`13968`.)
:func:`~glob.iglob` and :func:`~glob.glob` functions now support recursive
search in subdirectories using the ``"**"`` pattern.
(Contributed by Serhiy Storchaka in :issue:`13968`.)
heapq
-----
Element comparison in :func:`~heapq.merge` can now be customized by
passing a :term:`key function` in a new optional ``key`` keyword argument.
A new optional ``reverse`` keyword argument can be used to reverse element
comparison. (Contributed by Raymond Hettinger in :issue:`13742`.)
http
----
A new :class:`HTTPStatus <http.HTTPStatus>` enum that defines a set of
HTTP status codes, reason phrases and long descriptions written in English.
(Contributed by Demian Brecht in :issue:`21793`.)
idlelib and IDLE
----------------
...
...
@@ -615,407 +886,884 @@ import by other programs, it gets improvements with every release. See
as well as changes made in future 3.5.x releases. This file is also available
from the IDLE Help -> About Idle dialog.
imaplib
-------
* :class:`IMAP4` now supports the context management protocol. When used in a
:keyword:`with` statement, the IMAP4 ``LOGOUT`` command will be called
automatically at the end of the block. (Contributed by Tarek Ziadé and
Serhiy Storchaka in :issue:`4972`.)
The :class:`~imaplib.IMAP4` class now supports context manager protocol.
When used in a :keyword:`with` statement, the IMAP4 ``LOGOUT``
command will be called automatically at the end of the block.
(Contributed by Tarek Ziadé and Serhiy Storchaka in :issue:`4972`.)
The :mod:`imaplib` module now supports :rfc:`5161` (ENABLE Extension)
and :rfc:`6855` (UTF-8 Support) via the :meth:`IMAP4.enable <imaplib.IMAP4.enable>`
method. A new :attr:`IMAP4.utf8_enabled <imaplib.IMAP4.utf8_enabled>`
attribute, tracks whether or not :rfc:`6855` support is enabled.
(Contributed by Milan Oberkirch, R. David Murray, and Maciej Szulik in
:issue:`21800`.)
* :mod:`imaplib` now supports :rfc:`5161`: the :meth:`~imaplib.IMAP4.enable`
extension), and :rfc:`6855`: utf-8 support (internationalized email, via the
``UTF8=ACCEPT`` argument to :meth:`~imaplib.IMAP4.enable`). A new attribute,
:attr:`~imaplib.IMAP4.utf8_enabled`, tracks whether or not :rfc:`6855`
support is enabled. Milan Oberkirch, R. David Murray, and Maciej Szulik in
:issue:`21800`.)
The :mod:`imaplib` module now automatically encodes non-ASCII string usernames
and passwords using UTF-8, as recommended by the RFCs. (Contributed by Milan
Oberkirch in :issue:`21800`.)
* :mod:`imaplib` now automatically encodes non-ASCII string usernames and
passwords using ``UTF8``, as recommended by the RFCs. (Contributed by Milan
Oberkirch in :issue:`21800`.)
imghdr
------
* :func:`~imghdr.what` now recognizes the `OpenEXR <http://www.openexr.com>`_
format. (Contributed by Martin Vignali and Claudiu Popa in :issue:`20295`.)
The :func:`~imghdr.what` function now recognizes the
`OpenEXR <http://www.openexr.com>`_ format
(contributed by Martin Vignali and Claudiu Popa in :issue:`20295`),
and the `WebP <https://en.wikipedia.org/wiki/WebP>`_ format
(contributed by Fabrice Aneche and Claudiu Popa in :issue:`20197`.)
importlib
---------
* :class:`importlib.util.LazyLoader` allows for the lazy loading of modules in
applications where startup time is paramount.
(Contributed by Brett Cannon in :issue:`17621`.)
The :class:`util.LazyLoader <importlib.util.LazyLoader>` class allows for
lazy loading of modules in applications where startup time is important.
(Contributed by Brett Cannon in :issue:`17621`.)
The :func:`abc.InspectLoader.source_to_code <importlib.abc.InspectLoader.source_to_code>`
method is now a static method. This makes it easier to initialize a module
object with code compiled from a string by running
``exec(code, module.__dict__)``.
(Contributed by Brett Cannon in :issue:`21156`.)
* :func:`importlib.abc.InspectLoader.source_to_code` is now a
static method to make it easier to work with source code in a string.
With a module object that you want to initialize you can then use
``exec(code, module.__dict__)`` to execute the code in the module.
The new :func:`util.module_from_spec <importlib.util.module_from_spec>`
function is now the preferred way to create a new module. As opposed to
creating a :class:`types.ModuleType` instance directly, this new function
will set the various import-controlled attributes based on the passed-in
spec object. (Contributed by Brett Cannon in :issue:`20383`.)
* :func:`importlib.util.module_from_spec` is now the preferred way to create a
new module. Compared to :class:`types.ModuleType`, this new function will set
the various import-controlled attributes based on the passed-in spec object.
inspect
-------
* :class:`inspect.Signature` and :class:`inspect.Parameter` are now
picklable and hashable. (Contributed by Yury Selivanov in :issue:`20726`
and :issue:`20334`.)
Both :class:`~inspect.Signature` and :class:`~inspect.Parameter` classes are
now
picklable and hashable. (Contributed by Yury Selivanov in :issue:`20726`
and :issue:`20334`.)
* New method :meth:`inspect.BoundArguments.apply_defaults`. (Contributed
by Yury Selivanov in :issue:`24190`.)
A new
:meth:`BoundArguments.apply_defaults <inspect.BoundArguments.apply_defaults>`
method provides a way to set default values for missing arguments.
(Contributed by Yury Selivanov in :issue:`24190`.)
* New class method :meth:`inspect.Signature.from_callable`, which makes
subclassing of :class:`~inspect.Signature` easier. (Contributed
by Yury Selivanov and Eric Snow in :issue:`17373`.)
A new class method
:meth:`Signature.from_callable <inspect.Signature.from_callable>` makes
subclassing of :class:`~inspect.Signature` easier. (Contributed
by Yury Selivanov and Eric Snow in :issue:`17373`.)
* New argument ``follow_wrapped`` for :func:`inspect.signature`.
(Contributed by Yury Selivanov in :issue:`20691`.)
The :func:`~inspect.signature` function now accepts a ``follow_wrapped``
optional keyword argument, which, when set to ``False``, disables automatic
following of ``__wrapped__`` links.
(Contributed by Yury Selivanov in :issue:`20691`.)
A set of new functions to inspect
:term:`coroutine functions <coroutine function>` and
:term:`coroutine objects <coroutine>` has been added:
:func:`~inspect.iscoroutine`, :func:`~inspect.iscoroutinefunction`,
:func:`~inspect.isawaitable`, :func:`~inspect.getcoroutinelocals`,
and :func:`~inspect.getcoroutinestate`.
(Contributed by Yury Selivanov in :issue:`24017` and :issue:`24400`.)
:func:`~inspect.stack`, :func:`~inspect.trace`,
:func:`~inspect.getouterframes`, and :func:`~inspect.getinnerframes`
functions now return a list of named tuples.
(Contributed by Daniel Shahaf in :issue:`16808`.)
io
--
* New :func:`~inspect.iscoroutine`, :func:`~inspect.iscoroutinefunction`
and :func:`~inspect.isawaitable` functions. (Contributed by
Yury Selivanov in :issue:`24017`.)
A new :meth:`BufferedIOBase.readinto1 <io.BufferedIOBase.readinto1>`
method, that uses at most one call to the underlying raw stream'
s
:
meth
:`
RawIOBase
.
read
<
io
.
RawIOBase
.
read
>`
(
or
:
meth
:`
RawIOBase
.
readinto
<
io
.
RawIOBase
.
readinto
>`)
method
.
(
Contributed
by
Nikolaus
Rath
in
:
issue
:`
20578
`.)
* New :func:`~inspect.getcoroutinelocals` and :func:`~inspect.getcoroutinestate`
functions. (Contributed by Yury Selivanov in :issue:`24400`.)
ipaddress
---------
* :class:`ipaddress.IPv4Network` and :class:`ipaddress.IPv6Network` now
accept an ``(address, netmask)`` tuple argument, so as to easily construct
network objects from existing addresses. (Contributed by Peter Moody
and Antoine Pitrou in :issue:`16531`.)
Both
:
class
:`~
ipaddress
.
IPv4Network
`
and
:
class
:`~
ipaddress
.
IPv6Network
`
classes
now
accept
an
``(
address
,
netmask
)``
tuple
argument
,
so
as
to
easily
construct
network
objects
from
existing
addresses
.
(
Contributed
by
Peter
Moody
and
Antoine
Pitrou
in
:
issue
:`
16531
`.)
A
new
:
attr
:`~
ipaddress
.
IPv4Network
.
reverse_pointer
>`
attribute
for
:
class
:`~
ipaddress
.
IPv4Network
`
and
:
class
:`~
ipaddress
.
IPv6Network
`
classes
returns
the
name
of
the
reverse
DNS
PTR
record
.
(
Contributed
by
Leon
Weber
in
:
issue
:`
20480
`.)
json
----
* The output of :mod:`json.tool` command line interface is now in the same
order as the input. Use the :option:`--sort-keys` option to sort the output
of dictionaries alphabetically by key. (Contributed by Berker Peksag in
:issue:`21650`.)
The
:
mod
:`
json
.
tool
`
command
line
interface
now
preserves
the
order
of
keys
in
JSON
objects
passed
in
input
.
The
new
``--
sort
-
keys
``
option
can
be
used
to
sort
the
keys
alphabetically
.
(
Contributed
by
Berker
Peksag
in
:
issue
:`
21650
`.)
JSON
decoder
now
raises
:
exc
:`
json
.
JSONDecodeError
`
instead
of
:
exc
:`
ValueError
`.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
19361
`.)
locale
------
A
new
:
func
:`~
locale
.
delocalize
`
function
can
be
used
to
convert
a
string
into
a
normalized
number
string
,
taking
the
``
LC_NUMERIC
``
settings
into
account
.
(
Contributed
by
C
é
dric
Krier
in
:
issue
:`
13918
`.)
logging
-------
All
logging
methods
(:
class
:`~
logging
.
Logger
`
:
meth
:`~
logging
.
Logger
.
log
`,
:
meth
:`~
logging
.
Logger
.
exception
`,
:
meth
:`~
logging
.
Logger
.
critical
`,
:
meth
:`~
logging
.
Logger
.
debug
`,
etc
.),
now
accept
exception
instances
as
an
``
exc_info
``
argument
,
in
addition
to
boolean
values
and
exception
tuples
.
(
Contributed
by
Yury
Selivanov
in
:
issue
:`
20537
`.)
The
:
class
:`
handlers
.
HTTPHandler
<
logging
.
handlers
.
HTTPHandler
>`
class
now
accepts
an
optional
:
class
:`
ssl
.
SSLContext
`
instance
to
configure
SSL
settings
used
in
an
HTTP
connection
.
(
Contributed
by
Alex
Gaynor
in
:
issue
:`
22788
`.)
The
:
class
:`
handlers
.
QueueListener
<
logging
.
handlers
.
QueueListener
>`
class
now
takes
a
*
respect_handler_level
*
keyword
argument
which
,
if
set
to
``
True
``,
will
pass
messages
to
handlers
taking
handler
levels
into
account
.
(
Contributed
by
Vinay
Sajip
.)
lzma
----
The
:
meth
:`
LZMADecompressor
.
decompress
<
lzma
.
LZMADecompressor
.
decompress
>`
method
now
accepts
an
optional
*
max_length
*
argument
to
limit
the
maximum
size
of
decompressed
data
.
(
Contributed
by
Martin
Panter
in
:
issue
:`
15955
`.)
* JSON decoder now raises :exc:`json.JSONDecodeError` instead of
:exc:`ValueError`. (Contributed by Serhiy Storchaka in :issue:`19361`.)
math
----
* :data:`math.inf` and :data:`math.nan` constants added. (Contributed by Mark
Dickinson in :issue:`23185`.)
* :func:`math.isclose` function added.
(Contributed by Chris Barker and Tal Einat in :issue:`24270`.)
Two
new
constants
have
been
added
to
the
:
mod
:`
math
`
module
:
:
data
:`~
math
.
inf
`
and
:
data
:`~
math
.
nan
`.
(
Contributed
by
Mark
Dickinson
in
:
issue
:`
23185
`.)
A
new
function
:
func
:`~
math
.
isclose
`
provides
a
way
to
test
for
approximate
equality
.
(
Contributed
by
Chris
Barker
and
Tal
Einat
in
:
issue
:`
24270
`.)
A
new
:
func
:`~
math
.
gcd
`
function
has
been
added
.
The
:
func
:`
fractions
.
gcd
`
function
is
now
deprecated
.
(
Contributed
by
Mark
Dickinson
and
Serhiy
Storchaka
in
:
issue
:`
22486
`.)
operator
--------
:
func
:`~
operator
.
attrgetter
`,
:
func
:`~
operator
.
itemgetter
`,
and
:
func
:`~
operator
.
methodcaller
`
objects
now
support
pickling
.
(
Contributed
by
Josh
Rosenberg
and
Serhiy
Storchaka
in
:
issue
:`
22955
`.)
New
:
func
:`~
operator
.
matmul
`
and
:
func
:`~
operator
.
imatmul
`
functions
to
perform
matrix
multiplication
.
(
Contributed
by
Benjamin
Peterson
in
:
issue
:`
21176
`.)
os
--
* New :func:`os.scandir` function that exposes file information from
the operating system when listing a directory. :func:`os.scandir`
returns an iterator of :class:`os.DirEntry` objects corresponding to
the entries in the directory given by *path*. (Contributed by Ben
Hoyt with the help of Victor Stinner in :issue:`22524`.)
The
new
:
func
:`~
os
.
scandir
`
function
returning
an
iterator
of
:
class
:`~
os
.
DirEntry
`
objects
has
been
added
.
If
possible
,
:
func
:`~
os
.
scandir
`
extracts
file
attributes
while
scanning
a
directory
,
removing
the
need
to
perform
subsequent
system
calls
to
determine
file
type
or
attributes
,
which
may
significantly
improve
performance
.
(
Contributed
by
Ben
Hoyt
with
the
help
of
Victor
Stinner
in
:
issue
:`
22524
`.)
On
Windows
,
a
new
:
attr
:`
stat_result
.
st_file_attributes
<
os
.
stat_result
.
st_file_attributes
>`
attribute
is
now
available
.
It
corresponds
to
``
dwFileAttributes
``
member
of
the
``
BY_HANDLE_FILE_INFORMATION
``
structure
returned
by
``
GetFileInformationByHandle
()``.
(
Contributed
by
Ben
Hoyt
in
:
issue
:`
21719
`.)
* :class:`os.stat_result` now has a :attr:`~os.stat_result.st_file_attributes`
attribute on Windows. (Contributed by Ben Hoyt in :issue:`21719`.)
The
:
func
:`~
os
.
urandom
`
function
now
uses
``
getrandom
()``
syscall
on
Linux
3.17
or
newer
,
and
``
getentropy
()``
on
OpenBSD
5.6
and
newer
,
removing
the
need
to
use
``/
dev
/
urandom
``
and
avoiding
failures
due
to
potential
file
descriptor
exhaustion
.
(
Contributed
by
Victor
Stinner
in
:
issue
:`
22181
`.)
* :func:`os.urandom`: On Linux 3.17 and newer, the ``getrandom()`` syscall is
now used when available. On OpenBSD 5.6 and newer, the C ``getentropy()``
function is now used. These functions avoid the usage of an internal file
descriptor.
New
:
func
:`~
os
.
get_blocking
`
and
:
func
:`~
os
.
set_blocking
`
functions
allow
to
get
and
set
a
file
descriptor
blocking
mode
(:
data
:`~
os
.
O_NONBLOCK
`.)
(
Contributed
by
Victor
Stinner
in
:
issue
:`
22054
`.)
os.path
The
:
func
:`~
os
.
truncate
`
and
:
func
:`~
os
.
ftruncate
`
functions
are
now
supported
on
Windows
.
(
Contributed
by
Steve
Dower
in
:
issue
:`
23668
`.)
There
is
a
new
:
func
:`
os
.
path
.
commonpath
`
function
returning
the
longest
common
sub
-
path
of
each
passed
pathname
.
Unlike
the
:
func
:`
os
.
path
.
commonprefix
`
function
,
it
always
returns
a
valid
path
.
(
Contributed
by
Rafik
Draoui
and
Serhiy
Storchaka
in
:
issue
:`
10395
`.)
pathlib
-------
* New :func:`~os.path.commonpath` function that extracts common path prefix.
Unlike the :func:`~os.path.commonprefix` function, it always returns a valid
path. (Contributed by Rafik Draoui and Serhiy Storchaka in :issue:`10395`.)
The
new
:
meth
:`
Path
.
samefile
<
pathlib
.
Path
.
samefile
>`
method
can
be
used
to
check
whether
the
path
points
to
the
same
file
as
other
path
,
which
can
be
either
an
another
:
class
:`~
pathlib
.
Path
`
object
,
or
a
string
.
(
Contributed
by
Vajrasky
Kok
and
Antoine
Pitrou
in
:
issue
:`
19775
`.)
The
:
meth
:`
Path
.
mkdir
<
pathlib
.
Path
.
mkdir
>`
method
how
accepts
a
new
optional
``
exist_ok
``
argument
to
match
``
mkdir
-
p
``
and
:
func
:`
os
.
makrdirs
`
functionality
.
(
Contributed
by
Berker
Peksag
in
:
issue
:`
21539
`.)
There
is
a
new
:
meth
:`
Path
.
expanduser
<
pathlib
.
Path
.
expanduser
>`
method
to
expand
``~``
and
``~
user
``
prefixes
.
(
Contributed
by
Serhiy
Storchaka
and
Claudiu
Popa
in
:
issue
:`
19776
`.)
A
new
:
meth
:`
Path
.
home
<
pathlib
.
Path
.
home
>`
class
method
can
be
used
to
get
an
instance
of
:
class
:`~
pathlib
.
Path
`
object
representing
the
user
’
s
home
directory
.
(
Contributed
by
Victor
Salgado
and
Mayank
Tripathi
in
:
issue
:`
19777
`.)
New
:
meth
:`
Path
.
write_text
<
pathlib
.
Path
.
write_text
>`,
:
meth
:`
Path
.
read_text
<
pathlib
.
Path
.
read_text
>`,
:
meth
:`
Path
.
write_bytes
<
pathlib
.
Path
.
write_bytes
>`,
:
meth
:`
Path
.
read_bytes
<
pathlib
.
Path
.
read_bytes
>`
methods
to
simplify
read
/
write
operations
on
files
.
(
Contributed
by
Christopher
Welborn
in
:
issue
:`
20218
`.)
pickle
------
* Serializing more "lookupable" objects (such as unbound methods or nested
classes) now are supported with pickle protocols < 4.
(Contributed by Serhiy Storchaka in :issue:`23611`.)
Nested
objects
,
such
as
unbound
methods
or
nested
classes
,
can
now
be
pickled
using
:
ref
:`
pickle
protocols
<
pickle
-
protocols
>`
older
than
protocol
version
4.
Protocol
version
4
already
supports
these
cases
.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
23611
`.)
poplib
------
* A new command :meth:`~poplib.POP3.utf8` enables :rfc:`6856`
(internationalized email) support if the POP server supports it. (Contributed
by Milan OberKirch in :issue:`21804`.)
A
new
:
meth
:`
POP3
.
utf8
<
poplib
.
POP3
.
utf8
>`
command
enables
:
rfc
:`
6856
`
(
Internationalized
Email
)
support
,
if
a
POP
server
supports
it
.
(
Contributed
by
Milan
OberKirch
in
:
issue
:`
21804
`.)
re
--
* Number of capturing groups in regular expression is no longer limited by 100.
(Contributed by Serhiy Storchaka in :issue:`22437`.)
The
number
of
capturing
groups
in
regular
expression
is
no
longer
limited
by
100.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
22437
`.)
The
:
func
:`~
re
.
sub
`
and
:
func
:`~
re
.
subn
`
functions
now
replace
unmatched
groups
with
empty
strings
instead
of
raising
an
exception
.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
1519638
`.)
The
:
class
:`
re
.
error
`
exceptions
have
new
attributes
:
:
attr
:`~
re
.
error
.
msg
`,
:
attr
:`~
re
.
error
.
pattern
`,
:
attr
:`~
re
.
error
.
pos
`,
:
attr
:`~
re
.
error
.
lineno
`,
and
:
attr
:`~
re
.
error
.
colno
`
that
provide
better
context
information
about
the
error
.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
22578
`.)
readline
--------
A
new
:
func
:`~
readline
.
append_history_file
`
function
can
be
used
to
append
the
specified
number
of
trailing
elements
in
history
to
the
given
file
.
(
Contributed
by
Bruno
Cauet
in
:
issue
:`
22940
`.)
selectors
---------
The
new
:
class
:`~
selectors
.
DevpollSelector
`
supports
efficient
``/
dev
/
poll
``
polling
on
Solaris
.
(
Contributed
by
Giampaolo
Rodola
' in :issue:`18931`.)
* Now unmatched groups are replaced with empty strings in :func:`re.sub`
and :func:`re.subn`. (Contributed by Serhiy Storchaka in :issue:`1519638`.)
shutil
------
* :func:`~shutil.move` now accepts a *copy_function* argument, allowing,
for example, :func:`~shutil.copy` to be used instead of the default
:func:`~shutil.copy2` if there is a need to ignore metadata. (Contributed by
Claudiu Popa in :issue:`19840`.)
The :func:`~shutil.move` function now accepts a *copy_function* argument,
allowing, for example, the :func:`~shutil.copy` function to be used instead of
the default :func:`~shutil.copy2` if there is a need to ignore file metadata
when moving.
(Contributed by Claudiu Popa in :issue:`19840`.)
The :func:`~shutil.make_archive` function now supports the *xztar* format.
(Contributed by Serhiy Storchaka in :issue:`5411`.)
signal
------
* On Windows, :func:`signal.set_wakeup_fd` now also supports socket handles.
(Contributed by Victor Stinner in :issue:`22018`.)
On Windows, the :func:`~signal.set_wakeup_fd` function now also supports
socket handles. (Contributed by Victor Stinner in :issue:`22018`.)
Various ``SIG*`` constants in the :mod:`signal` module have been converted into
:mod:`Enums <enum>`. This allows meaningful names to be printed
during debugging, instead of integer "magic numbers".
(Contributed by Giampaolo Rodola'
in
:
issue
:`
21076
`.)
* Different constants of :mod:`signal` module are now enumeration values using
the :mod:`enum` module. This allows meaningful names to be printed during
debugging, instead of integer “magic numbers”. (Contributed by Giampaolo
Rodola' in :issue:`21076`.)
smtpd
-----
* Both :class:`~smtpd.SMTPServer` and :class:`smtpd.SMTPChannel` now accept a
*decode_data* keyword to determine if the DATA portion of the SMTP
transaction is decoded using the ``utf-8`` codec or is instead provided to
:meth:`~smtpd.SMTPServer.process_message` as a byte string. The default
is ``True`` for backward compatibility reasons, but will change to ``False``
in Python 3.6. If *decode_data* is set to ``False``, the
:meth:`~smtpd.SMTPServer.process_message` method must be prepared to accept
keyword arguments. (Contributed by Maciej Szulik in :issue:`19662`.)
* :class:`~smtpd.SMTPServer` now advertises the ``8BITMIME`` extension
(:rfc:`6152`) if if *decode_data* has been set ``True``. If the client
specifies ``BODY=8BITMIME`` on the ``MAIL`` command, it is passed to
:meth:`~smtpd.SMTPServer.process_message` via the ``mail_options`` keyword.
(Contributed by Milan Oberkirch and R. David Murray in :issue:`21795`.)
* :class:`~smtpd.SMTPServer` now supports the ``SMTPUTF8`` extension
(:rfc:`6531`: Internationalized Email). If the client specified ``SMTPUTF8
BODY=8BITMIME`` on the ``MAIL`` command, they are passed to
:meth:`~smtpd.SMTPServer.process_message` via the ``mail_options`` keyword.
It is the responsibility of the :meth:`~smtpd.SMTPServer.process_message`
method to correctly handle the ``SMTPUTF8`` data. (Contributed by Milan
Oberkirch in :issue:`21725`.)
* It is now possible to provide, directly or via name resolution, IPv6
addresses in the :class:`~smtpd.SMTPServer` constructor, and have it
successfully connect. (Contributed by Milan Oberkirch in :issue:`14758`.)
Both
:
class
:`~
smtpd
.
SMTPServer
`
and
:
class
:`~
smtpd
.
SMTPChannel
`
classes
now
accept
a
*
decode_data
*
keyword
argument
to
determine
if
the
``
DATA
``
portion
of
the
SMTP
transaction
is
decoded
using
the
``
"utf-8"
``
codec
or
is
instead
provided
to
the
:
meth
:`
SMTPServer
.
process_message
<
smtpd
.
SMTPServer
.
process_message
>`
method
as
a
byte
string
.
The
default
is
``
True
``
for
backward
compatibility
reasons
,
but
will
change
to
``
False
``
in
Python
3.6
.
If
*
decode_data
*
is
set
to
``
False
``,
the
:
meth
:`~
smtpd
.
SMTPServer
.
process_message
`
method
must
be
prepared
to
accept
keyword
arguments
.
(
Contributed
by
Maciej
Szulik
in
:
issue
:`
19662
`.)
The
:
class
:`~
smtpd
.
SMTPServer
`
class
now
advertises
the
``
8
BITMIME
``
extension
(:
rfc
:`
6152
`)
if
*
decode_data
*
has
been
set
``
True
``.
If
the
client
specifies
``
BODY
=
8
BITMIME
``
on
the
``
MAIL
``
command
,
it
is
passed
to
:
meth
:`
SMTPServer
.
process_message
<
smtpd
.
SMTPServer
.
process_message
>`
via
the
``
mail_options
``
keyword
.
(
Contributed
by
Milan
Oberkirch
and
R
.
David
Murray
in
:
issue
:`
21795
`.)
The
:
class
:`~
smtpd
.
SMTPServer
`
class
now
also
supports
the
``
SMTPUTF8
``
extension
(:
rfc
:`
6531
`:
Internationalized
Email
).
If
the
client
specified
``
SMTPUTF8
BODY
=
8
BITMIME
``
on
the
``
MAIL
``
command
,
they
are
passed
to
:
meth
:`
SMTPServer
.
process_message
<
smtpd
.
SMTPServer
.
process_message
>`
via
the
``
mail_options
``
keyword
.
It
is
the
responsibility
of
the
:
meth
:`~
smtpd
.
SMTPServer
.
process_message
`
method
to
correctly
handle
the
``
SMTPUTF8
``
data
.
(
Contributed
by
Milan
Oberkirch
in
:
issue
:`
21725
`.)
It
is
now
possible
to
provide
,
directly
or
via
name
resolution
,
IPv6
addresses
in
the
:
class
:`~
smtpd
.
SMTPServer
`
constructor
,
and
have
it
successfully
connect
.
(
Contributed
by
Milan
Oberkirch
in
:
issue
:`
14758
`.)
smtplib
-------
* A new :meth:`~smtplib.SMTP.auth` method provides a convenient way to
implement custom authentication mechanisms.
(Contributed by Milan Oberkirch in :issue:`15014`.)
A
new
:
meth
:`
SMTP
.
auth
<
smtplib
.
SMTP
.
auth
>`
method
provides
a
convenient
way
to
implement
custom
authentication
mechanisms
.
(
Contributed
by
Milan
Oberkirch
in
:
issue
:`
15014
`.)
The
:
meth
:`
SMTP
.
set_debuglevel
<
smtplib
.
SMTP
.
set_debuglevel
>`
method
now
accepts
an
additional
debuglevel
(
2
),
which
enables
timestamps
in
debug
messages
.
(
Contributed
by
Gavin
Chappell
and
Maciej
Szulik
in
:
issue
:`
16914
`.)
* Additional debuglevel (2) shows timestamps for debug messages in
:class:`smtplib.SMTP`. (Contributed by Gavin Chappell and Maciej Szulik in
:issue:`16914`.)
Both
:
meth
:`
SMTP
.
sendmail
<
smtplib
.
SMTP
.
sendmail
>`
and
:
meth
:`
SMTP
.
send_message
<
smtplib
.
SMTP
.
send_message
>`
methods
now
support
support
:
rfc
:`
6531
`
(
SMTPUTF8
).
(
Contributed
by
Milan
Oberkirch
and
R
.
David
Murray
in
:
issue
:`
22027
`.)
* :mod:`smtplib` now supports :rfc:`6531` (SMTPUTF8) in both the
:meth:`~smtplib.SMTP.sendmail` and :meth:`~smtplib.SMTP.send_message`
commands. (Contributed by Milan Oberkirch and R. David Murray in
:issue:`22027`.)
sndhdr
------
* :func:`~sndhdr.what` and :func:`~sndhdr.whathdr` now return
:func:`~collections.namedtuple`.
(Contributed by Claudiu Popa in :issue:`18615`.)
:
func
:`~
sndhdr
.
what
`
and
:
func
:`~
sndhdr
.
whathdr
`
functions
now
return
a
:
func
:`~
collections
.
namedtuple
`.
(
Contributed
by
Claudiu
Popa
in
:
issue
:`
18615
`.)
ssl
---
* The :meth:`~ssl.SSLSocket.do_handshake`, :meth:`~ssl.SSLSocket.read`,
:meth:`~ssl.SSLSocket.shutdown`, and :meth:`~ssl.SSLSocket.write` methods of
:class:`ssl.SSLSocket` don't reset the socket timeout anymore each time bytes
are received or sent. The socket timeout is now the maximum total duration of
the method.
Memory
BIO
Support
~~~~~~~~~~~~~~~~~~
(
Contributed
by
Geert
Jansen
in
:
issue
:`
21965
`.)
The
new
:
class
:`~
ssl
.
SSLObject
`
class
has
been
added
to
provide
SSL
protocol
support
for
cases
when
the
network
I
/
O
capabilities
of
:
class
:`~
ssl
.
SSLSocket
`
are
not
necessary
or
suboptimal
.
:
class
:`~
ssl
.
SSLObject
`
represents
an
SSL
protocol
instance
,
but
does
not
implement
any
network
I
/
O
methods
,
and
instead
provides
a
memory
buffer
interface
.
The
new
:
class
:`~
ssl
.
MemoryBIO
`
class
can
be
used
to
pass
data
between
Python
and
an
SSL
protocol
instance
.
The
memory
BIO
SSL
support
is
primarily
intended
to
be
used
in
frameworks
implementing
asynchronous
I
/
O
for
which
:
class
:`~
ssl
.
SSLSocket
`
's readiness
model ("select/poll") is inefficient.
A new :meth:`SSLContext.wrap_bio <ssl.SSLContext.wrap_bio>` method can be used
to create a new :class:`~ssl.SSLObject` instance.
Application-Layer Protocol Negotiation Support
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(Contributed by Benjamin Peterson in :issue:`20188`.)
Where OpenSSL support is present, :mod:`ssl` module now implements
*Application-Layer Protocol Negotiation* TLS extension as described
in :rfc:`7301`.
The new :meth:`SSLContext.set_alpn_protocols <ssl.SSLContext.set_alpn_protocols>`
can be used to specify which protocols a socket should advertise during
the TLS handshake.
The new
:meth:`SSLSocket.selected_alpn_protocol <ssl.SSLSocket.selected_alpn_protocol>`
returns the protocol that was selected during the TLS handshake.
:data:`~ssl.HAS_ALPN` flag indicates whether APLN support is present.
Other Changes
~~~~~~~~~~~~~
There is a new :meth:`SSLSocket.version <ssl.SSLSocket.version>` method to query
the actual protocol version in use.
(Contributed by Antoine Pitrou in :issue:`20421`.)
The :class:`~ssl.SSLSocket` class now implements
a :meth:`SSLSocket.sendfile <ssl.SSLSocket.sendfile>` method.
(Contributed by Giampaolo Rodola'
in
:
issue
:`
17552
`.)
The
:
meth
:`
SSLSocket
.
send
<
ssl
.
SSLSocket
.
send
>`
method
now
raises
either
:
exc
:`
ssl
.
SSLWantReadError
`
or
:
exc
:`
ssl
.
SSLWantWriteError
`
exception
on
a
non
-
blocking
socket
if
the
operation
would
block
.
Previously
,
it
would
return
``
0
``.
(
Contributed
by
Nikolaus
Rath
in
:
issue
:`
20951
`.)
The
:
func
:`~
ssl
.
cert_time_to_seconds
`
function
now
interprets
the
input
time
as
UTC
and
not
as
local
time
,
per
:
rfc
:`
5280
`.
Additionally
,
the
return
value
is
always
an
:
class
:`
int
`.
(
Contributed
by
Akira
Li
in
:
issue
:`
19940
`.)
New
:
meth
:`
SSLObject
.
shared_ciphers
<
ssl
.
SSLObject
.
shared_ciphers
>`
and
:
meth
:`
SSLSocket
.
shared_ciphers
<
ssl
.
SSLSocket
.
shared_ciphers
>`
methods
return
the
list
of
ciphers
sent
by
the
client
during
the
handshake
.
(
Contributed
by
Benjamin
Peterson
in
:
issue
:`
23186
`.)
The
:
meth
:`
SSLSocket
.
do_handshake
<
ssl
.
SSLSocket
.
do_handshake
>`,
:
meth
:`
SSLSocket
.
read
<
ssl
.
SSLSocket
.
read
>`,
:
meth
:`
SSLSocket
.
shutdown
<
ssl
.
SSLSocket
.
shutdown
>`,
and
:
meth
:`
SSLSocket
.
write
<
ssl
.
SSLSocket
.
write
>`
methods
of
:
class
:`
ssl
.
SSLSocket
`
class
no
longer
reset
the
socket
timeout
every
time
bytes
are
received
or
sent
.
The
socket
timeout
is
now
the
maximum
total
duration
of
the
method
.
(
Contributed
by
Victor
Stinner
in
:
issue
:`
23853
`.)
The
:
func
:`~
ssl
.
match_hostname
`
function
now
supports
matching
of
IP
addresses
.
(
Contributed
by
Antoine
Pitrou
in
:
issue
:`
23239
`.)
* Memory BIO Support: new classes :class:`~ssl.SSLObject`,
:class:`~ssl.MemoryBIO`, and new
:meth:`SSLContext.wrap_bio <ssl.SSLContext.wrap_bio>` method.
(Contributed by Geert Jansen in :issue:`21965`.)
socket
------
* New :meth:`socket.socket.sendfile` method allows to send a file over a socket
by using high-performance :func:`os.sendfile` function on UNIX resulting in
uploads being from 2x to 3x faster than when using plain
:meth:`socket.socket.send`.
(Contributed by Giampaolo Rodola' in :issue:`17552`.)
Functions
with
timeouts
now
use
a
monotonic
clock
,
instead
of
a
system
clock
.
(
Contributed
by
Victor
Stinner
in
:
issue
:`
22043
`.)
A
new
:
meth
:`
socket
.
sendfile
<
socket
.
socket
.
sendfile
>`
method
allows
to
send
a
file
over
a
socket
by
using
the
high
-
performance
:
func
:`
os
.
sendfile
`
function
on
UNIX
resulting
in
uploads
being
from
2
to
3
times
faster
than
when
using
plain
:
meth
:`
socket
.
send
<
socket
.
socket
.
send
>`.
(
Contributed
by
Giampaolo
Rodola
' in :issue:`17552`.)
The :meth:`socket.sendall <socket.socket.sendall>` method no longer resets the
socket timeout every time bytes are received or sent. The socket timeout is
now the maximum total duration to send all data.
(Contributed by Victor Stinner in :issue:`23853`.)
The *backlog* argument of the :meth:`socket.listen <socket.socket.listen>`
method is now optional. By default it is set to
:data:`SOMAXCONN <socket.SOMAXCONN>` or to ``128`` whichever is less.
(Contributed by Charles-François Natali in :issue:`21455`.)
sqlite3
-------
The :class:`~sqlite3.Row` class now fully supports sequence protocol,
in particular :func:`reversed` iteration and slice indexing.
(Contributed by Claudiu Popa in :issue:`10203`; by Lucas Sinclair,
Jessica McKellar, and Serhiy Storchaka in :issue:`13583`.)
* The :meth:`socket.socket.sendall` method don't reset the socket timeout
anymore each time bytes are received or sent. The socket timeout is now the
maximum total duration to send all data.
subprocess
----------
* The new :func:`subprocess.run` function runs subprocesses and returns a
:class:`subprocess.CompletedProcess` object. It Provides a more consistent
API than :func:`~subprocess.call`, :func:`~subprocess.check_call` and
:func:`~subprocess.check_output`.
The new :func:`~subprocess.run` function has been added.
It runs the specified command and and returns a
:class:`~subprocess.CompletedProcess` object, which describes a finished
process. The new API is more consistent and is the recommended approach
to invoking subprocesses in Python code that does not need to maintain
compatibility with earlier Python versions.
(Contributed by Thomas Kluyver in :issue:`23342`.)
sys
---
* New :func:`~sys.set_coroutine_wrapper` and :func:`~sys.get_coroutine_wrapper`
functions. (Contributed by Yury Selivanov in :issue:`24017`.)
A new :func:`~sys.set_coroutine_wrapper` function allows setting a global
hook that will be called whenever a :term:`coroutine object <coroutine>`
is created by an :keyword:`async def` function. A corresponding
:func:`~sys.get_coroutine_wrapper` can be used to obtain a currently set
wrapper. Both functions are provisional, and are intended for debugging
purposes only. (Contributed by Yury Selivanov in :issue:`24017`.)
A new :func:`~sys.is_finalizing` function can be used to check if the Python
interpreter is :term:`shutting down <interpreter shutdown>`.
(Contributed by Antoine Pitrou in :issue:`22696`.)
sysconfig
---------
* The user scripts directory on Windows is now versioned.
(Contributed by Paul Moore in :issue:`23437`.)
The name of the user scripts directory on Windows now includes the first
two components of Python version. (Contributed by Paul Moore
in :issue:`23437`.)
tarfile
-------
* The :func:`tarfile.open` function now supports ``'x'`` (exclusive creation)
mode. (Contributed by Berker Peksag in :issue:`21717`.)
The *mode* argument of the :func:`~tarfile.open` function now accepts ``"x"``
to request exclusive creation. (Contributed by Berker Peksag in :issue:`21717`.)
:meth:`TarFile.extractall <tarfile.TarFile.extractall>` and
:meth:`TarFile.extract <tarfile.TarFile.extract>` methods now take a keyword
argument *numeric_only*. If set to ``True``, the extracted files and
directories will be owned by the numeric ``uid`` and ``gid`` from the tarfile.
If set to ``False`` (the default, and the behavior in versions prior to 3.5),
they will be owned by the named user and group in the tarfile.
(Contributed by Michael Vogt and Eric Smith in :issue:`23193`.)
threading
---------
Both :meth:`Lock.acquire <threading.Lock.acquire>` and
:meth:`RLock.acquire <threading.RLock.acquire>` methods
now use a monotonic clock for timeout management.
(Contributed by Victor Stinner in :issue:`22043`.)
* The :meth:`~tarfile.TarFile.extractall` and :meth:`~tarfile.TarFile.extract`
methods now take a keyword parameter *numeric_only*. If set to ``True``,
the extracted files and directories will be owned by the numeric uid and gid
from the tarfile. If set to ``False`` (the default, and the behavior in
versions prior to 3.5), they will be owned bythe named user and group in the
tarfile. (Contributed by Michael Vogt and Eric Smith in :issue:`23193`.)
time
----
* The :func:`time.monotonic` function is now always available. (Contributed by
Victor Stinner in :issue:`22043`.)
The :func:`~time.monotonic` function is now always available.
(Contributed by Victor Stinner in :issue:`22043`.)
timeit
------
A new command line option ``-u`` or ``--unit=U`` can be used to specify the time
unit for the timer output. Supported options are ``usec``, ``msec``,
or ``sec``. (Contributed by Julian Gindi in :issue:`18983`.)
The :func:`~timeit.timeit` function has a new *globals* parameter for
specifying the namespace in which the code will be running.
(Contributed by Ben Roberts in :issue:`2527`.)
tkinter
-------
* The :mod:`tkinter._fix` module used for setting up the Tcl/Tk environment
on Windows has been replaced by a private function in the :mod:`_tkinter`
module which makes no permanent changes to environment variables.
(Contributed by Zachary Ware in :issue:`20035`.)
The :mod:`tkinter._fix` module used for setting up the Tcl/Tk environment
on Windows has been replaced by a private function in the :mod:`_tkinter`
module which makes no permanent changes to environment variables.
(Contributed by Zachary Ware in :issue:`20035`.)
traceback
---------
New :func:`~traceback.walk_stack` and :func:`~traceback.walk_tb`
functions to conveniently traverse frame and traceback objects.
(Contributed by Robert Collins in :issue:`17911`.)
New lightweight classes: :class:`~traceback.TracebackException`,
:class:`~traceback.StackSummary`, and :class:`traceback.FrameSummary`.
(Contributed by Robert Collins in :issue:`17911`.)
Both :func:`~traceback.print_tb` and :func:`~traceback.print_stack` functions
now support negative values for the *limit* argument.
(Contributed by Dmitry Kazakov in :issue:`22619`.)
types
-----
* New :func:`~types.coroutine` function. (Contributed by Yury Selivanov
in :issue:`24017`.)
A new :func:`~types.coroutine` function to transform
:term:`generator <generator iterator>` and
:class:`generator-like <collections.abc.Generator>` objects into
:term:`awaitables <awaitable>`.
(Contributed by Yury Selivanov in :issue:`24017`.)
A new :class:`~types.CoroutineType` is the type of :term:`coroutine` objects
created by :keyword:`async def` functions.
(Contributed by Yury Selivanov in :issue:`24400`.)
* New :class:`~types.CoroutineType`. (Contributed by Yury Selivanov
in :issue:`24400`.)
urllib
------
* A new :class:`~urllib.request.HTTPPasswordMgrWithPriorAuth` allows HTTP Basic
Authentication credentials to be managed so as to eliminate unnecessary
``401`` response handling, or to unconditionally send credentials
on the first request in order to communicate with servers that return a
``404`` response instead of a ``401`` if the ``Authorization`` header is not
sent. (Contributed by Matej Cepl in :issue:`19494` and Akshit Khurana in
:issue:`7159`.)
A new
:class:`request.HTTPPasswordMgrWithPriorAuth <urllib.request.HTTPPasswordMgrWithPriorAuth>`
class allows HTTP Basic Authentication credentials to be managed so as to
eliminate unnecessary ``401`` response handling, or to unconditionally send
credentials on the first request in order to communicate with servers that
return a ``404`` response instead of a ``401`` if the ``Authorization`` header
is not sent. (Contributed by Matej Cepl in :issue:`19494` and Akshit Khurana in
:issue:`7159`.)
A new *quote_via* argument for the
:func:`parse.urlencode <urllib.parse.urlencode>`
function provides a way to control the encoding of query parts if needed.
(Contributed by Samwyse and Arnon Yaari in :issue:`13866`.)
The :func:`request.urlopen <urllib.request.urlopen>` function accepts an
:class:`ssl.SSLContext` object as a *context* argument, which will be used for
the HTTPS connection. (Contributed by Alex Gaynor in :issue:`22366`.)
The :func:`parse.urljoin <urllib.parse.urljoin>` was updated to use the
:rfc:`3986` semantics for the resolution of relative URLs, rather than
:rfc:`1808` and :rfc:`2396`.
(Contributed by Demian Brecht and Senthil Kumaran in :issue:`22118`.)
* A new :func:`~urllib.parse.urlencode` parameter *quote_via* provides a way to
control the encoding of query parts if needed. (Contributed by Samwyse and
Arnon Yaari in :issue:`13866`.)
unicodedata
-----------
* The :mod:`unicodedata` module now uses data from `Unicode 8.0.0
<http://unicode.org/versions/Unicode8.0.0/>`_.
The :mod:`unicodedata` module now uses data from `Unicode 8.0.0
<http://unicode.org/versions/Unicode8.0.0/>`_.
unittest
--------
A new command line option ``--locals`` to show local variables in
tracebacks. (Contributed by Robert Collins in :issue:`22936`.)
unittest.mock
-------------
The :class:`~unittest.mock.Mock` has the following improvements:
* Class constructor has a new *unsafe* parameter, which causes mock
objects to raise :exc:`AttributeError` on attribute names starting
with ``"assert"``.
(Contributed by Kushal Das in :issue:`21238`.)
* A new :meth:`Mock.assert_not_called <unittest.mock.Mock.assert_not_called>`
method to check if the mock object was called.
(Contributed by Kushal Das in :issue:`21262`.)
The :class:`~unittest.mock.MagicMock` class now supports :meth:`__truediv__`,
:meth:`__divmod__` and :meth:`__matmul__` operators.
(Contributed by Johannes Baiter in :issue:`20968`, and Håkan Lövdahl
in :issue:`23581` and :issue:`23568`.)
wsgiref
-------
* *headers* parameter of :class:`wsgiref.headers.Headers` is now optional.
(Contributed by Pablo Torres Navarrete and SilentGhost in :issue:`5800`.)
The *headers* argument of the :class:`headers.Headers <wsgiref.headers.Headers>`
class constructor is now optional.
(Contributed by Pablo Torres Navarrete and SilentGhost in :issue:`5800`.)
xmlrpc
------
* :class:`xmlrpc.client.ServerProxy` is now a :term:`context manager`.
(Contributed by Claudiu Popa in :issue:`20627`.)
The :class:`client.ServerProxy <xmlrpc.client.ServerProxy>` class is now a
:term:`context manager`.
(Contributed by Claudiu Popa in :issue:`20627`.)
:class:`client.ServerProxy <xmlrpc.client.ServerProxy>` constructor now accepts
an optional :class:`ssl.SSLContext` instance.
(Contributed by Alex Gaynor in :issue:`22960`.)
xml.sax
-------
* SAX parsers now support a character stream of
:class:`~xml.sax.xmlreader.InputSource
` object.
(Contributed by Serhiy Storchaka in :issue:`2175`.)
SAX parsers now support a character stream of the
:class:`xmlreader.InputSource <xml.sax.xmlreader.InputSource>
` object.
(Contributed by Serhiy Storchaka in :issue:`2175`.)
faulthandler
------------
* :func:`~faulthandler.enable`, :func:`~faulthandler.register`,
:func:`~faulthandler.dump_traceback` and
:func:`~faulthandler.dump_traceback_later` functions now accept file
descriptors. (Contributed by Wei Wu in :issue:`23566`.)
zipfile
-------
* Added support for writing ZIP files to unseekable streams.
(Contributed by Serhiy Storchaka in :issue:`23252`.)
ZIP output can now be written to unseekable streams.
(Contributed by Serhiy Storchaka in :issue:`23252`.)
The *mode* argument of :meth:`ZipFile.open <zipfile.ZipFile.open>` method now
accepts ``"x"`` to request exclusive creation.
(Contributed by Serhiy Storchaka in :issue:`21717`.)
* The :func:`zipfile.ZipFile.open` function now supports ``'x'`` (exclusive
creation) mode. (Contributed by Serhiy Storchaka in :issue:`21717`.)
Other module-level changes
==========================
Many functions in :mod:`mmap`, :mod:`ossaudiodev`, :mod:`socket`,
:mod:`ssl`, and :mod:`codecs` modules now accept writable
:term:`bytes-like objects <bytes-like object>`.
(Contributed by Serhiy Storchaka in :issue:`23001`.)
Optimizations
=============
The following performance enhancements have been added:
The :func:`os.walk` function has been sped up by 3 to 5 times on POSIX systems,
and by 7 to 20 times on Windows. This was done using the new :func:`os.scandir`
function, which exposes file information from the underlying ``readdir`` or
``FindFirstFile``/``FindNextFile`` system calls. (Contributed by
Ben Hoyt with help from Victor Stinner in :issue:`23605`.)
Construction of ``bytes(int)`` (filled by zero bytes) is faster and uses less
memory for large objects. ``calloc()`` is used instead of ``malloc()`` to
allocate memory for these objects.
(Contributed by Victor Stinner in :issue:`21233`.)
Some operations on :mod:`ipaddress` :class:`~ipaddress.IPv4Network` and
:class:`~ipaddress.IPv6Network` have been massively sped up, such as
:meth:`~ipaddress.IPv4Network.subnets`, :meth:`~ipaddress.IPv4Network.supernet`,
:func:`~ipaddress.summarize_address_range`, :func:`~ipaddress.collapse_addresses`.
The speed up can range from 3 to 15 times.
(Contributed by Antoine Pitrou, Michel Albert, and Markus in
:issue:`21486`, :issue:`21487`, :issue:`20826`, :issue:`23266`.)
Pickling of :mod:`ipaddress` objects was optimized to produce significantly
smaller output. (Contributed by Serhiy Storchaka in :issue:`23133`.)
Many operations on :class:`io.BytesIO` are now 50% to 100% faster.
(Contributed by Serhiy Storchaka in :issue:`15381` and David Wilson in
:issue:`22003`.)
The :func:`marshal.dumps` function is now faster: 65-85% with versions 3
and 4, 20-25% with versions 0 to 2 on typical data, and up to 5 times in
best cases.
(Contributed by Serhiy Storchaka in :issue:`20416` and :issue:`23344`.)
The UTF-32 encoder is now 3 to 7 times faster.
(Contributed by Serhiy Storchaka in :issue:`15027`.)
Regular expressions are now parsed up to 10% faster.
(Contributed by Serhiy Storchaka in :issue:`19380`.)
The :func:`json.dumps` function was optimized to run with
``ensure_ascii=False`` as fast as with ``ensure_ascii=True``.
(Contributed by Naoki Inada in :issue:`23206`.)
* :func:`os.walk` has been sped up by 3-5x on POSIX systems and 7-20x
on Windows. This was done using the new :func:`os.scandir` function,
which exposes file information from the underlying ``readdir`` and
``FindFirstFile``/``FindNextFile`` system calls. (Contributed by
Ben Hoyt with help from Victor Stinner in :issue:`23605`.)
The :c:func:`PyObject_IsInstance` and :c:func:`PyObject_IsSubclass`
functions have been sped up in the common case that the second argument
has :class:`type` as its metaclass.
(Contributed Georg Brandl by in :issue:`22540`.)
* Construction of ``bytes(int)`` (filled by zero bytes) is faster and uses less
memory for large objects. ``calloc()`` is used instead of ``malloc()`` to
allocate memory for these objects.
Method caching was slightly improved, yielding up to 5% performance
improvement in some benchmarks.
(Contributed by Antoine Pitrou in :issue:`22847`.)
* Some operations on :class:`~ipaddress.IPv4Network` and
:class:`~ipaddress.IPv6Network` have been massively sped up, such as
:meth:`~ipaddress.IPv4Network.subnets`, :meth:`~ipaddress.IPv4Network.supernet`,
:func:`~ipaddress.summarize_address_range`, :func:`~ipaddress.collapse_addresses`.
The speed up can range from 3x to 15x.
(:issue:`21486`, :issue:`21487`, :issue:`20826`)
Objects from :mod:`random` module now use two times less memory on 64-bit
builds. (Contributed by Serhiy Storchaka in :issue:`23488`.)
* Many operations on :class:`io.BytesIO` are now 50% to 100% faster.
(Contributed by Serhiy Storchaka in :issue:`15381` and David Wilson in
:issue:`22003`.)
The :func:`property` getter calls are up to 25% faster.
(Contributed by Joe Jevnik in :issue:`23910`.)
* :func:`marshal.dumps` is now faster (65%-85% with versions 3--4, 20-25% with
versions 0--2 on typical data, and up to 5x in best cases).
(Contributed by Serhiy Storchaka in :issue:`20416` and :issue:`23344`.)
Instantiation of :class:`fractions.Fraction` is now up to 30% faster.
(Contributed by Stefan Behnel in :issue:`22464`.)
* The UTF-32 encoder is now 3x to 7x faster. (Contributed by Serhiy Storchaka
in :issue:`15027`.)
String methods :meth:`~str.find`, :meth:`~str.rfind`, :meth:`~str.split`,
:meth:`~str.partition` and :keyword:`in` string operator are now significantly
faster for searching 1-character substrings.
(Contributed by Serhiy Storchaka in :issue:`23573`.)
Build and C API Changes
=======================
Changes to Python's build process and to the C API include:
New ``calloc`` functions were added:
* :c:func:`PyMem_RawCalloc`,
* :c:func:`PyMem_Calloc`,
* :c:func:`PyObject_Calloc`,
* :c:func:`_PyObject_GC_Calloc`.
(Contributed by Victor Stinner in :issue:`21233`.)
New encoding/decoding helper functions:
* :c:func:`Py_DecodeLocale` (replaced ``_Py_char2wchar()``),
* :c:func:`Py_EncodeLocale` (replaced ``_Py_wchar2char()``).
(Contributed by Victor Stinner in :issue:`18395`.)
A new :c:func:`PyCodec_NameReplaceErrors` function to replace the unicode
encode error with ``\N{...}`` escapes.
(Contributed by Serhiy Storchaka in :issue:`19676`.)
A new :c:func:`PyErr_FormatV` function similar to :c:func:`PyErr_Format`,
but accepts a ``va_list`` argument.
(Contributed by Antoine Pitrou in :issue:`18711`.)
A new :c:data:`PyExc_RecursionError` exception.
(Contributed by Georg Brandl in :issue:`19235`.)
New :c:func:`PyModule_FromDefAndSpec`, :c:func:`PyModule_FromDefAndSpec2`,
and :c:func:`PyModule_ExecDef` introduced by :pep:`489` -- multi-phase
extension module initialization.
(Contributed by Petr Viktorin in :issue:`24268`.)
New :c:func:`PyNumber_MatrixMultiply` and
:c:func:`PyNumber_InPlaceMatrixMultiply` functions to perform matrix
multiplication.
(Contributed by Benjamin Peterson in :issue:`21176`. See also :pep:`465`
for details.)
* New ``calloc`` functions:
The :c:member:`PyTypeObject.tp_finalize` slot is now part of stable ABI.
* :c:func:`PyMem_RawCalloc`
* :c:func:`PyMem_Calloc`
* :c:func:`PyObject_Calloc`
* :c:func:`_PyObject_GC_Calloc`
Windows builds now require Microsoft Visual C++ 14.0, which
is available as part of `Visual Studio 2015 <http://www.visualstudio.com>`_.
Extension modules now include platform information tag in their filename on
some platforms (the tag is optional, and CPython will import extensions without
it; although if the tag is present and mismatched, the extension won'
t
be
loaded
):
*
On
Linux
,
extension
module
filenames
end
with
``.
cpython
-<
major
><
minor
>
m
-<
architecture
>-<
os
>.
pyd
``:
*
``<
major
>``
is
the
major
number
of
the
Python
version
;
for
Python
3.5
this
is
``
3
``.
*
``<
minor
>``
is
the
minor
number
of
the
Python
version
;
for
Python
3.5
this
is
``
5
``.
*
``<
architecture
>``
is
the
hardware
architecture
the
extension
module
was
built
to
run
on
.
It
's most commonly either ``i386`` for 32-bit Intel
platforms or ``x86_64`` for 64-bit Intel (and AMD) platforms.
* ``<os>`` is always ``linux-gnu``, except for extensions built to
talk to the 32-bit ABI on 64-bit platforms, in which case it is
``linux-gnu32`` (and ``<architecture>`` will be ``x86_64``).
* On Windows, extension module filenames end with
``<debug>.cp<major><minor>-<platform>.pyd``:
* ``<major>`` is the major number of the Python version;
for Python 3.5 this is ``3``.
* ``<minor>`` is the minor number of the Python version;
for Python 3.5 this is ``5``.
* ``<platform>`` is the platform the extension module was built for,
either ``win32`` for Win32, ``win_amd64`` for Win64, ``win_ia64`` for
Windows Itanium 64, and ``win_arm`` for Windows on ARM.
* If built in debug mode, ``<debug>`` will be ``_d``,
otherwise it will be blank.
* On OS X platforms, extension module filenames now end with ``-darwin.so``.
* On all other platforms, extension module filenames are the same as they were
with Python 3.4.
* Windows builds now require Microsoft Visual C++ 14.0, which
is available as part of `Visual Studio 2015 <http://www.visualstudio.com>`_.
Deprecated
==========
...
...
@@ -1031,63 +1779,59 @@ become proper keywords in Python 3.7.
Unsupported Operating Systems
-----------------------------
* Windows XP - Per :PEP:`11`, Microsoft support of Windows XP has ended.
Windows XP is no longer supported by Microsoft, thus, per :PEP:`11`, CPython
3.5 is no longer officially supported on this OS.
Deprecated Python modules, functions and methods
------------------------------------------------
* The :mod:`formatter` module has now graduated to full deprecation and is still
slated for removal in Python 3.6.
* :mod:`smtpd` has in the past always decoded the DATA portion of email
messages using the ``utf-8`` codec. This can now be controlled by the new
*decode_data* keyword to :class:`~smtpd.SMTPServer`. The default value is
``True``, but this default is deprecated. Specify the *decode_data* keyword
with an appropriate value to avoid the deprecation warning.
* Directly assigning values to the :attr:`~http.cookies.Morsel.key`,
:attr:`~http.cookies.Morsel.value` and
:attr:`~http.cookies.Morsel.coded_value` of :class:`~http.cookies.Morsel`
objects is deprecated. Use the :func:`~http.cookies.Morsel.set` method
instead. In addition, the undocumented *LegalChars* parameter of
:func:`~http.cookies.Morsel.set` is deprecated, and is now ignored.
The :mod:`formatter` module has now graduated to full deprecation and is still
slated for removal in Python 3.6.
* Passing a format string as keyword argument *format_string* to the
:meth:`~string.Formatter.format` method of the :class:`string.Formatter`
class has been deprecated.
The :func:`asyncio.async` function is deprecated in favor of
:func:`~asyncio.ensure_future`.
* :func:`platform.dist` and :func:`platform.linux_distribution` functions are
now deprecated and will be removed in Python 3.7. Linux distributions us
e
too many different ways of describing themselves, so the functionality
is
left to a package.
(Contributed by Vajrasky Kok and Berker Peksag in :issue:`1322`.)
The :mod:`smtpd` module has in the past always decoded the DATA portion of
email messages using the ``utf-8`` codec. This can now be controlled by th
e
new *decode_data* keyword to :class:`~smtpd.SMTPServer`. The default value
is
``True``, but this default is deprecated. Specify the *decode_data* keyword
with an appropriate value to avoid the deprecation warning.
* The previously undocumented ``from_function`` and ``from_builtin`` methods of
:class:`inspect.Signature` are deprecated. Use new
:meth:`inspect.Signature.from_callable` instead. (Contributed by Yury
Selivanov in :issue:`24248`.)
Directly assigning values to the :attr:`~http.cookies.Morsel.key`,
:attr:`~http.cookies.Morsel.value` and
:attr:`~http.cookies.Morsel.coded_value` of :class:`~http.cookies.Morsel`
objects is deprecated. Use the :func:`~http.cookies.Morsel.set` method
instead. In addition, the undocumented *LegalChars* parameter of
:func:`~http.cookies.Morsel.set` is deprecated, and is now ignored.
* :func:`inspect.getargspec` is deprecated and scheduled to be removed in
Python 3.6. (See :issue:`20438` for details.)
Passing a format string as keyword argument *format_string* to the
:meth:`~string.Formatter.format` method of the :class:`string.Formatter`
class has been deprecated.
* :func:`~inspect.getfullargspec`, :func:`~inspect.getargvalues`,
:func:`~inspect.getcallargs`, :func:`~inspect.getargvalues`,
:func:`~inspect.formatargspec`, and :func:`~inspect.formatargvalues` are
deprecated in favor of :func:`inspect.signature` API. (See :issue:`20438`
for details
.)
The :func:`platform.dist` and :func:`platform.linux_distribution` functions
are now deprecated and will be removed in Python 3.7. Linux distributions use
too many different ways of describing themselves, so the functionality is
left to a package.
(Contributed by Vajrasky Kok and Berker Peksag in :issue:`1322`
.)
The previously undocumented ``from_function`` and ``from_builtin`` methods of
:class:`inspect.Signature` are deprecated. Use new
:meth:`inspect.Signature.from_callable` instead. (Contributed by Yury
Selivanov in :issue:`24248`.)
Deprecated functions and types of the C API
-------------------------------------------
The :func:`inspect.getargspec` function is deprecated and scheduled to be
removed in Python 3.6. (See :issue:`20438` for details.)
* None yet.
The :mod:`inspect` :func:`~inspect.getfullargspec`,
:func:`~inspect.getargvalues`, :func:`~inspect.getcallargs`,
:func:`~inspect.getargvalues`, :func:`~inspect.formatargspec`, and
:func:`~inspect.formatargvalues` functions are deprecated in favor of
:func:`inspect.signature` API.
(Contributed by Yury Selivanov in :issue:`20438`.)
Deprecated features
-------------------
* None yet.
Use of ``re.LOCALE`` flag with str patterns or ``re.ASCII`` is now
deprecated. (Contributed by Serhiy Storchaka in :issue:`22407`.)
Removed
...
...
@@ -1110,7 +1854,8 @@ removed:
*
The
concept
of
``.
pyo
``
files
has
been
removed
.
*
The
JoinableQueue
class
in
the
provisional
asyncio
module
was
deprecated
in 3.4.4 and is now removed (:issue:`23464`).
in
3.4.4
and
is
now
removed
.
(
Contributed
by
A
.
Jesse
Jiryu
Davis
in
:
issue
:`
23464
`.)
Porting
to
Python
3.5
...
...
@@ -1131,15 +1876,17 @@ Changes in the Python API
error
-
prone
and
has
been
removed
in
Python
3.5
.
See
:
issue
:`
13936
`
for
full
details
.
* :meth:`ssl.SSLSocket.send()` now raises either :exc:`ssl.SSLWantReadError`
or :exc:`ssl.SSLWantWriteError` on a non-blocking socket if the operation
would block. Previously, it would return 0. See :issue:`20951`.
*
The
:
meth
:`
ssl
.
SSLSocket
.
send
()`
method
now
raises
either
:
exc
:`
ssl
.
SSLWantReadError
`
or
:
exc
:`
ssl
.
SSLWantWriteError
`
on
a
non
-
blocking
socket
if
the
operation
would
block
.
Previously
,
it
would
return
``
0
``.
(
Contributed
by
Nikolaus
Rath
in
:
issue
:`
20951
`.)
*
The
``
__name__
``
attribute
of
generator
is
now
set
from
the
function
name
,
instead
of
being
set
from
the
code
name
.
Use
``
gen
.
gi_code
.
co_name
``
to
retrieve
the
code
name
.
Generators
also
have
a
new
``
__qualname__
``
attribute
,
the
qualified
name
,
which
is
now
used
for
the
representation
of a generator (``repr(gen)``). See :issue:`21205`.
of
a
generator
(``
repr
(
gen
)``).
(
Contributed
by
Victor
Stinner
in
:
issue
:`
21205
`.)
*
The
deprecated
"strict"
mode
and
argument
of
:
class
:`~
html
.
parser
.
HTMLParser
`,
:
meth
:`
HTMLParser
.
error
`,
and
the
:
exc
:`
HTMLParserError
`
exception
have
been
...
...
@@ -1150,8 +1897,8 @@ Changes in the Python API
*
Although
it
is
not
formally
part
of
the
API
,
it
is
worth
noting
for
porting
purposes
(
ie
:
fixing
tests
)
that
error
messages
that
were
previously
of
the
form
"'sometype' does not support the buffer protocol"
are
now
of
the
form
"a
bytes-like object is required, not 'sometype'". (Contributed by Ezio Melotti
in :issue:`16518`.)
:term:`bytes-like object` is required, not 'sometype'"
.
(
Contributed
by
Ezio
Melotti
in
:
issue
:`
16518
`.)
*
If
the
current
directory
is
set
to
a
directory
that
no
longer
exists
then
:
exc
:`
FileNotFoundError
`
will
no
longer
be
raised
and
instead
...
...
@@ -1170,14 +1917,14 @@ Changes in the Python API
:
exc
:`
DeprecationWarning
`
now
,
will
be
an
error
in
Python
3.6
).
If
the
loader
inherits
from
:
class
:`
importlib
.
abc
.
Loader
`
then
there
is
nothing
to
do
,
else
simply
define
:
meth
:`~
importlib
.
machinery
.
Loader
.
create_module
`
to
return
``None``
(:issue:`23014`).
``
None
``
.
(
Contributed
by
Brett
Cannon
in
:
issue
:`
23014
`.)
*
:func:`re.split` always ignored empty pattern matches, so the ``'x*'``
pattern worked the same as ``'x+'``, and the ``'\b'`` pattern never worked.
Now :func:`re.split` raises a warning if the pattern could match
*
The
:
func
:`
re
.
split
`
function
always
ignored
empty
pattern
matches
,
so
the
``
"x*"
``
pattern
worked
the
same
as
``
"x+"
``,
and
the
``
"
\b
"
``
pattern
never
worked
.
Now
:
func
:`
re
.
split
`
raises
a
warning
if
the
pattern
could
match
an
empty
string
.
For
compatibility
use
patterns
that
never
match
an
empty
string (e.g. ``
'x+'`` instead of ``'x*'
``). Patterns that could only match
an empty string (such as ``
'\b'
``) now raise an error.
string
(
e
.
g
.
``
"x+"
``
instead
of
``
"x*"
``).
Patterns
that
could
only
match
an
empty
string
(
such
as
``
"
\b
"
``)
now
raise
an
error
.
*
The
:
class
:`~
http
.
cookies
.
Morsel
`
dict
-
like
interface
has
been
made
self
consistent
:
morsel
comparison
now
takes
the
:
attr
:`~
http
.
cookies
.
Morsel
.
key
`
...
...
@@ -1187,7 +1934,7 @@ Changes in the Python API
:
meth
:`~
http
.
cookies
.
Morsel
.
update
`
will
now
raise
an
exception
if
any
of
the
keys
in
the
update
dictionary
are
invalid
.
In
addition
,
the
undocumented
*
LegalChars
*
parameter
of
:
func
:`~
http
.
cookies
.
Morsel
.
set
`
is
deprecated
and
is now ignored. (
:issue:`2211`
)
is
now
ignored
.
(
Contributed
by
Demian
Brecht
in
:
issue
:`
2211
`.
)
*
:
pep
:`
488
`
has
removed
``.
pyo
``
files
from
Python
and
introduced
the
optional
``
opt
-``
tag
in
``.
pyc
``
file
names
.
The
...
...
@@ -1200,8 +1947,12 @@ Changes in the Python API
in
Python
3.5
,
all
old
`.
pyo
`
files
from
previous
versions
of
Python
are
invalid
regardless
of
this
PEP
.
* The :mod:`socket` module now exports the CAN_RAW_FD_FRAMES constant on linux
3.6 and greater.
*
The
:
mod
:`
socket
`
module
now
exports
the
:
data
:`~
socket
.
CAN_RAW_FD_FRAMES
`
constant
on
linux
3.6
and
greater
.
*
The
:
func
:`~
ssl
.
cert_time_to_seconds
`
function
now
interprets
the
input
time
as
UTC
and
not
as
local
time
,
per
:
rfc
:`
5280
`.
Additionally
,
the
return
value
is
always
an
:
class
:`
int
`.
(
Contributed
by
Akira
Li
in
:
issue
:`
19940
`.)
*
The
``
pygettext
.
py
``
Tool
now
uses
the
standard
+
NNNN
format
for
timezones
in
the
POT
-
Creation
-
Date
header
.
...
...
@@ -1213,21 +1964,21 @@ Changes in the Python API
*
The
:
meth
:`
str
.
startswith
`
and
:
meth
:`
str
.
endswith
`
methods
no
longer
return
``
True
``
when
finding
the
empty
string
and
the
indexes
are
completely
out
of
range.
See :issue:`24284`.
range
.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
24284
`.)
*
The
:
func
:`
inspect
.
getdoc
`
function
now
returns
documentation
strings
inherited
from
base
classes
.
Documentation
strings
no
longer
need
to
be
duplicated
if
the
inherited
documentation
is
appropriate
.
To
suppress
an
inherited
string
,
an
empty
string
must
be
specified
(
or
the
documentation
may
be
filled
in
).
This
change
affects
the
output
of
the
:
mod
:`
pydoc
`
module and the :func:`help` function. See :issue:`15582`.
module
and
the
:
func
:`
help
`
function
.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
15582
`.)
Changes
in
the
C
API
--------------------
*
The
undocumented
:
c
:
member
:`~
PyMemoryViewObject
.
format
`
member
of
the
(
non
-
public
)
:
c
:
type
:`
PyMemoryViewObject
`
structure
has
been
removed
.
All
extensions
relying
on
the
relevant
parts
in
``
memoryobject
.
h
``
must
be
rebuilt
.
...
...
@@ -1237,13 +1988,15 @@ Changes in the C API
*
Removed
non
-
documented
macro
:
c
:
macro
:`
PyObject_REPR
`
which
leaked
references
.
Use
format
character
``%
R
``
in
:
c
:
func
:`
PyUnicode_FromFormat
`-
like
functions
to
format
the
:
func
:`
repr
`
of
the
object
.
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
22453
`.)
*
Because
the
lack
of
the
:
attr
:`
__module__
`
attribute
breaks
pickling
and
introspection
,
a
deprecation
warning
now
is
raised
for
builtin
type
without
the
:
attr
:`
__module__
`
attribute
.
Would
be
an
AttributeError
in
future
.
(
:issue:`20204`
)
(
Contributed
by
Serhiy
Storchaka
in
:
issue
:`
20204
`.
)
*
As
part
of
:
pep
:`
492
`
implementation
,
``
tp_reserved
``
slot
of
:
c
:
type
:`
PyTypeObject
`
was
replaced
with
a
:
c
:
member
:`
tp_as_async
`
slot
.
Refer
to
:
ref
:`
coro
-
objects
`
for
new
types
,
structures
and
functions
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment