Skip to content
3.5.txt 77.7 KiB
Newer Older
Ryott Glayzer's avatar
Ryott Glayzer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
What's New In Python 3.5
************************

Editors:
   Elvis Pranskevichus <elvis@magic.io>, Yury Selivanov
   <yury@magic.io>

This article explains the new features in Python 3.5, compared to 3.4.
Python 3.5 was released on September 13, 2015.  See the changelog for
a full list of changes.

See also: **PEP 478** - Python 3.5 Release Schedule


Summary -- Release highlights
=============================

New syntax features:

* 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:

* "typing": PEP 484 -- Type Hints.

* "zipapp": PEP 441 Improving Python ZIP Application Support.

New built-in features:

* "bytes % args", "bytearray % args": PEP 461 -- Adding "%" formatting
  to bytes and bytearray.

* New "bytes.hex()", "bytearray.hex()" and "memoryview.hex()" methods.
  (Contributed by Arnon Yaari in bpo-9951.)

* "memoryview" now supports tuple indexing (including multi-
  dimensional). (Contributed by Antoine Pitrou in bpo-23632.)

* Generators have a new "gi_yieldfrom" attribute, which returns the
  object being iterated by "yield from" expressions. (Contributed by
  Benno Leslie and Yury Selivanov in bpo-24450.)

* A new "RecursionError" exception is now raised when maximum
  recursion depth is reached.  (Contributed by Georg Brandl in
  bpo-19235.)

CPython implementation improvements:

* When the "LC_TYPE" locale is the POSIX locale ("C" locale),
  "sys.stdin" and "sys.stdout" now use the "surrogateescape" error
  handler, instead of the "strict" error handler. (Contributed by
  Victor Stinner in bpo-19977.)

* ".pyo" files are no longer used and have been replaced by a more
  flexible scheme that includes the optimization level explicitly in
  ".pyc" name. (See PEP 488 overview.)

* Builtin and extension modules are now initialized in a multi-phase
  process, which is similar to how Python modules are loaded. (See PEP
  489 overview.)

Significant improvements in the standard library:

* "collections.OrderedDict" is now implemented in C, which makes it 4
  to 100 times faster.

* The "ssl" module gained support for Memory BIO, which decouples SSL
  protocol handling from network IO.

* The new "os.scandir()" function provides a better and significantly
  faster way of directory traversal.

* "functools.lru_cache()" has been mostly reimplemented in C, yielding
  much better performance.

* The new "subprocess.run()" function provides a streamlined way to
  run subprocesses.

* The "traceback" module has been significantly enhanced for improved
  performance and developer convenience.

Security improvements:

* SSLv3 is now disabled throughout the standard library. It can still
  be enabled by instantiating a "ssl.SSLContext" manually.  (See
  bpo-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
  bpo-22796.)

Windows improvements:

* A new installer for Windows has replaced the old MSI. See Using
  Python 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.


New Features
============


PEP 492 - Coroutines with async and await syntax
------------------------------------------------

**PEP 492** greatly improves support for asynchronous programming in
Python by adding *awaitable objects*, *coroutine functions*,
*asynchronous iteration*, and *asynchronous context managers*.

Coroutine functions are declared using the new "async def" syntax:

   >>> async def coro():
   ...     return 'spam'

Inside a coroutine function, the new "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 *awaitable* protocol by
defining the "__await__()" method.

PEP 492 also adds "async for" statement for convenient iteration over
asynchronous iterables.

An example of a rudimentary HTTP client written using the new syntax:

   import asyncio

   async def http_get(domain):
       reader, writer = await asyncio.open_connection(domain, 80)

       writer.write(b'\r\n'.join([
           b'GET / HTTP/1.1',
           b'Host: %b' % domain.encode('latin-1'),
           b'Connection: close',
           b'', b''
       ]))

       async for line in reader:
           print('>>>', line)

       writer.close()

   loop = asyncio.get_event_loop()
   try:
       loop.run_until_complete(http_get('example.com'))
   finally:
       loop.close()

Similarly to asynchronous iteration, there is a new syntax for
asynchronous context managers.  The following script:

   import asyncio

   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))

   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()

will output:

   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

Note that both "async for" and "async with" can only be used inside a
coroutine function declared with "async def".

Coroutine functions are intended to be run inside a compatible event
loop, such as the asyncio loop.

Note:

  Changed in version 3.5.2: Starting with CPython 3.5.2, "__aiter__"
  can directly return *asynchronous iterators*.  Returning an
  *awaitable* object will result in a "PendingDeprecationWarning".See
  more details in the Asynchronous Iterators documentation section.

See also:

  **PEP 492** -- Coroutines with async and await syntax
     PEP written and implemented by Yury Selivanov.


PEP 465 - A dedicated infix operator for matrix multiplication
--------------------------------------------------------------

**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 "__matmul__()",
"__rmatmul__()", and "__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))

NumPy 1.10 has 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.])

See also:

  **PEP 465** -- A dedicated infix operator for matrix multiplication
     PEP written by Nathaniel J. Smith; implemented by Benjamin
     Peterson.


PEP 448 - Additional Unpacking Generalizations
----------------------------------------------

**PEP 448** extends the allowed uses 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

   >>> def fn(a, b, c, d):
   ...     print(a, b, c, d)
   ...

   >>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
   1 2 3 4

Similarly, tuple, list, set, and dictionary displays allow multiple
unpackings (see Expression lists and Dictionary displays):

   >>> *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}

See also:

  **PEP 448** -- Additional Unpacking Generalizations
     PEP written by Joshua Landau; implemented by Neil Girdhar, Thomas
     Wouters, and Joshua Landau.


PEP 461 - percent formatting support for bytes and bytearray
------------------------------------------------------------

**PEP 461** adds support for the "%" interpolation operator to "bytes"
and "bytearray".

While interpolation is usually thought of as a string operation, there
are cases where interpolation on "bytes" or "bytearrays" makes sense,
and the work needed to make up for this missing functionality detracts
from the overall readability of the code.  This issue is particularly
important when dealing with wire format protocols, which are often a
mixture of binary and ASCII compatible text.

Examples:

   >>> b'Hello %b!' % b'World'
   b'Hello World!'

   >>> b'x=%i y=%f' % (1, 2.5)
   b'x=1 y=2.500000'

Unicode is not allowed for "%b", but it is accepted by "%a"
(equivalent of "repr(obj).encode('ascii', 'backslashreplace')"):

   >>> b'Hello %b!' % '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 "%s" and "%r" conversion types, although supported, should
only be used in codebases that need compatibility with Python 2.

See also:

  **PEP 461** -- Adding % formatting to bytes and bytearray
     PEP written by Ethan Furman; implemented by Neil Schemenauer and
     Ethan Furman.


PEP 484 - Type Hints
--------------------

Function annotation syntax has been a Python feature since version 3.0
(**PEP 3107**), however the semantics of annotations has been left
undefined.

Experience has shown that the majority of function annotation uses
were to provide type hints to function parameters and return values.
It became evident that it would be beneficial for Python users, if the
standard library included the base definitions and tools for type
annotations.

**PEP 484** introduces a *provisional module* to provide these
standard definitions and tools, along with some conventions for
situations where annotations are not available.

For example, here is a simple function whose argument and return type
are declared in the annotations:

   def greeting(name: str) -> str:
       return 'Hello ' + name

While these annotations are available at runtime through the usual
"__annotations__" attribute, *no automatic type checking happens at
runtime*.  Instead, it is assumed that a separate off-line type
checker (e.g. mypy) will be used for on-demand source code analysis.

The type system supports unions, generic types, and a special type
named "Any" which is consistent with (i.e. assignable to and from) all
types.

See also:

  * "typing" module documentation

  * **PEP 484** -- Type Hints
       PEP written by Guido van Rossum, Jukka Lehtosalo, and Łukasz
       Langa; implemented by Guido van Rossum.

  * **PEP 483** -- The Theory of Type Hints
       PEP written by Guido van Rossum


PEP 471 - os.scandir() function -- a better and faster directory iterator
-------------------------------------------------------------------------

**PEP 471** adds a new directory iteration function, "os.scandir()",
to the standard library.  Additionally, "os.walk()" is now implemented
using "scandir", which makes it 3 to 5 times faster on POSIX systems
and 7 to 20 times faster on Windows systems.  This is largely achieved
by greatly reducing the number of calls to "os.stat()" required to
walk a directory tree.

Additionally, "scandir" returns an iterator, as opposed to returning a
list of file names, which improves memory efficiency when iterating
over very large directories.

The following example shows a simple use of "os.scandir()" to display
all the files (excluding directories) in the given *path* that don't
start with "'.'". The "entry.is_file()" call will generally not make
an additional system call:

   for entry in os.scandir(path):
       if not entry.name.startswith('.') and entry.is_file():
           print(entry.name)

See also:

  **PEP 471** -- os.scandir() function -- a better and faster
  directory iterator
     PEP written and implemented by Ben Hoyt with the help of Victor
     Stinner.


PEP 475: Retry system calls failing with EINTR
----------------------------------------------

An "errno.EINTR" error code is returned whenever a system call, that
is waiting for I/O, is interrupted by a signal.  Previously, Python
would raise "InterruptedError" in such cases.  This meant that, when
writing a Python application, the developer had two choices:

1. Ignore the "InterruptedError".

2. Handle the "InterruptedError" and attempt to restart the
   interrupted system call at every call site.

The first option makes an application fail intermittently. The second
option adds a large amount of boilerplate that makes the code nearly
unreadable.  Compare:

   print("Hello World")

and:

   while True:
       try:
           print("Hello World")
           break
       except InterruptedError:
           continue

**PEP 475** implements automatic retry of system calls on "EINTR".
This removes the burden of dealing with "EINTR" or "InterruptedError"
in user code in most situations and makes Python programs, including
the standard library, more robust.  Note that the system call is only
retried if the signal handler does not raise an exception.

Below is a list of functions which are now retried when interrupted by
a signal:

* "open()" and "io.open()";

* functions of the "faulthandler" module;

* "os" functions: "fchdir()", "fchmod()", "fchown()", "fdatasync()",
  "fstat()", "fstatvfs()", "fsync()", "ftruncate()", "mkfifo()",
  "mknod()", "open()", "posix_fadvise()", "posix_fallocate()",
  "pread()", "pwrite()", "read()", "readv()", "sendfile()", "wait3()",
  "wait4()", "wait()", "waitid()", "waitpid()", "write()", "writev()";

* special cases: "os.close()" and "os.dup2()" now ignore "EINTR"
  errors; the syscall is not retried (see the PEP for the rationale);

* "select" functions: "devpoll.poll()", "epoll.poll()",
  "kqueue.control()", "poll.poll()", "select()";

* methods of the "socket" class: "accept()", "connect()" (except for
  non-blocking sockets), "recv()", "recvfrom()", "recvmsg()",
  "send()", "sendall()", "sendmsg()", "sendto()";

* "signal.sigtimedwait()" and "signal.sigwaitinfo()";

* "time.sleep()".

See also:

  **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).


PEP 479: Change StopIteration handling inside generators
--------------------------------------------------------

The interaction of generators and "StopIteration" in Python 3.4 and
earlier was sometimes surprising, and could conceal obscure bugs.
Previously, "StopIteration" raised accidentally inside a generator
function was interpreted as the end of the iteration by the loop
construct driving the generator.

**PEP 479** changes the behavior of generators: when a "StopIteration"
exception is raised inside a generator, it is replaced with a
"RuntimeError" before it exits the generator frame.  The main goal of
this change is to ease debugging in the situation where an unguarded
"next()" call raises "StopIteration" and causes the iteration
controlled by the generator to terminate silently. This is
particularly pernicious in combination with the "yield from"
construct.

This is a backwards incompatible change, so to enable the new
behavior, a *__future__* import is necessary:

   >>> from __future__ import generator_stop

   >>> def gen():
   ...     next(iter([]))
   ...     yield
   ...
   >>> next(gen())
   Traceback (most recent call last):
     File "<stdin>", line 2, in gen
   StopIteration

   The above exception was the direct cause of the following exception:

   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   RuntimeError: generator raised StopIteration

Without a "__future__" import, a "PendingDeprecationWarning" will be
raised whenever a "StopIteration" exception is raised inside a
generator.

See also:

  **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.


PEP 485: A function for testing approximate equality
----------------------------------------------------

**PEP 485** adds the "math.isclose()" and "cmath.isclose()" functions
which tell whether two values are approximately equal or "close" to
each other.  Whether or not two values are considered close is
determined according to given absolute and relative tolerances.
Relative tolerance is the maximum allowed difference between "isclose"
arguments, relative to the larger absolute value:

   >>> import math
   >>> a = 5.0
   >>> b = 4.99998
   >>> math.isclose(a, b, rel_tol=1e-5)
   True
   >>> math.isclose(a, b, rel_tol=1e-6)
   False

It is also possible to compare two values using absolute tolerance,
which must be a non-negative value:

   >>> import math
   >>> a = 5.0
   >>> b = 4.99998
   >>> math.isclose(a, b, abs_tol=0.00003)
   True
   >>> math.isclose(a, b, abs_tol=0.00001)
   False

See also:

  **PEP 485** -- A function for testing approximate equality
     PEP written by Christopher Barker; implemented by Chris Barker
     and Tal Einat.


PEP 486: Make the Python Launcher aware of virtual environments
---------------------------------------------------------------

**PEP 486** makes the Windows launcher (see **PEP 397**) aware of an
active virtual environment. When the default interpreter would be used
and the "VIRTUAL_ENV" environment variable is set, the interpreter in
the virtual environment will be used.

See also:

  **PEP 486** -- Make the Python Launcher aware of virtual
  environments
     PEP written and implemented by Paul Moore.


PEP 488: Elimination of PYO files
---------------------------------

**PEP 488** does away with the concept of ".pyo" files. This means
that ".pyc" files represent both unoptimized and optimized bytecode.
To prevent the 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. "importlib.util.cache_from_source()" has an updated
API to help with this change.

See also:

  **PEP 488** -- Elimination of PYO files
     PEP written and implemented by Brett Cannon.


PEP 489: Multi-phase extension module initialization
----------------------------------------------------

**PEP 489** updates extension module initialization to take advantage
of the two step module loading mechanism introduced by **PEP 451** in
Python 3.4.

This change brings the import semantics of extension modules that opt-
in to using the new mechanism much closer to those of Python source
and bytecode modules, including the ability to use any valid
identifier as a module name, rather than being restricted to ASCII.

See also:

  **PEP 489** -- Multi-phase extension module initialization
     PEP written by Petr Viktorin, Stefan Behnel, and Nick Coghlan;
     implemented by Petr Viktorin.


Other Language Changes
======================

Some smaller changes made to the core Python language are:

* Added the ""namereplace"" error handlers.  The ""backslashreplace""
  error handlers now work with decoding and translating. (Contributed
  by Serhiy Storchaka in bpo-19676 and bpo-22286.)

* The "-b" option now affects comparisons of "bytes" with "int".
  (Contributed by Serhiy Storchaka in bpo-23681.)

* New Kazakh "kz1048" and Tajik "koi8_t" codecs. (Contributed by
  Serhiy Storchaka in bpo-22682 and bpo-22681.)

* Property docstrings are now writable. This is especially useful for
  "collections.namedtuple()" docstrings. (Contributed by Berker Peksag
  in bpo-24064.)

* Circular imports involving relative imports are now supported.
  (Contributed by Brett Cannon and Antoine Pitrou in bpo-17636.)


New Modules
===========


typing
------

The new "typing" *provisional* module provides standard definitions
and tools for function type annotations. See Type Hints for more
information.


zipapp
------

The new "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 bpo-1739468, but which were not
well publicized, 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" and running:

   $ python -m zipapp myapp
   $ python myapp.pyz

The module implementation has been contributed by Paul Moore in
bpo-23491.

See also: **PEP 441** -- Improving Python ZIP Application Support


Improved Modules
================


argparse
--------

The "ArgumentParser" class now allows disabling abbreviated usage of
long options by setting allow_abbrev to "False".  (Contributed by
Jonathan Paugh, Steven Bethard, paul j3 and Daniel Eriksson in
bpo-14910.)


asyncio
-------

Since the "asyncio" module is *provisional*, all changes introduced in
Python 3.5 have also been backported to Python 3.4.x.

Notable changes in the "asyncio" module since Python 3.4.0:

* New debugging APIs: "loop.set_debug()" and "loop.get_debug()"
  methods. (Contributed by Victor Stinner.)

* The proactor event loop now supports SSL. (Contributed by Antoine
  Pitrou and Victor Stinner in bpo-22560.)

* A new "loop.is_closed()" method to check if the event loop is
  closed. (Contributed by Victor Stinner in bpo-21326.)

* A new "loop.create_task()" to conveniently create and schedule a new
  "Task" for a coroutine.  The "create_task" method is also used by
  all asyncio functions that wrap coroutines into tasks, such as
  "asyncio.wait()", "asyncio.gather()", etc. (Contributed by Victor
  Stinner.)

* A new "transport.get_write_buffer_limits()" method to inquire for
  *high-* and *low-* water limits of the flow control. (Contributed by
  Victor Stinner.)

* The "async()" function is deprecated in favor of "ensure_future()".
  (Contributed by Yury Selivanov.)

* New "loop.set_task_factory()" and "loop.get_task_factory()" methods
  to customize the task factory that "loop.create_task()" method uses.
  (Contributed by Yury Selivanov.)

* New "Queue.join()" and "Queue.task_done()" queue methods.
  (Contributed by Victor Stinner.)

* The "JoinableQueue" class was removed, in favor of the
  "asyncio.Queue" class. (Contributed by Victor Stinner.)

Updates in 3.5.1:

* The "ensure_future()" function and all functions that use it, such
  as "loop.run_until_complete()", now accept all kinds of *awaitable
  objects*. (Contributed by Yury Selivanov.)

* New "run_coroutine_threadsafe()" function to submit coroutines to
  event loops from other threads. (Contributed by Vincent Michel.)

* New "Transport.is_closing()" method to check if the transport is
  closing or closed. (Contributed by Yury Selivanov.)

* The "loop.create_server()" method can now accept a list of hosts.
  (Contributed by Yann Sionneau.)

Updates in 3.5.2:

* New "loop.create_future()" method to create Future objects.  This
  allows alternative event loop implementations, such as uvloop, to
  provide a faster "asyncio.Future" implementation. (Contributed by
  Yury Selivanov.)

* New "loop.get_exception_handler()" method to get the current
  exception handler. (Contributed by Yury Selivanov.)

* New "StreamReader.readuntil()" method to read data from the stream
  until a separator bytes sequence appears. (Contributed by Mark
  Korenberg.)

* The "loop.create_connection()" and "loop.create_server()" methods
  are optimized to avoid calling the system "getaddrinfo" function if
  the address is already resolved. (Contributed by A. Jesse Jiryu
  Davis.)

* The "loop.sock_connect(sock, address)" no longer requires the
  *address* to be resolved prior to the call. (Contributed by A. Jesse
  Jiryu Davis.)


bz2
---

The "BZ2Decompressor.decompress" method now accepts an optional
*max_length* argument to limit the maximum size of decompressed data.
(Contributed by Nikolaus Rath in bpo-15955.)


cgi
---

The "FieldStorage" class now supports the *context manager* protocol.
(Contributed by Berker Peksag in bpo-20289.)


cmath
-----

A new function "isclose()" provides a way to test for approximate
equality.  (Contributed by Chris Barker and Tal Einat in bpo-24270.)


code
----

The "InteractiveInterpreter.showtraceback()" method now prints the
full chained traceback, just like the interactive interpreter.
(Contributed by Claudiu Popa in bpo-17442.)


collections
-----------

The "OrderedDict" class is now implemented in C, which makes it 4 to
100 times faster.  (Contributed by Eric Snow in bpo-16991.)

"OrderedDict.items()", "OrderedDict.keys()", "OrderedDict.values()"
views now support "reversed()" iteration. (Contributed by Serhiy
Storchaka in bpo-19505.)

The "deque" class now defines "index()", "insert()", and "copy()", and
supports the "+" and "*" operators. This allows deques to be
recognized as a "MutableSequence" and improves their substitutability
for lists. (Contributed by Raymond Hettinger in bpo-23704.)

Docstrings produced by "namedtuple()" can now be updated:

   Point = namedtuple('Point', ['x', 'y'])
   Point.__doc__ += ': Cartesian coodinate'
   Point.x.__doc__ = 'abscissa'
   Point.y.__doc__ = 'ordinate'

(Contributed by Berker Peksag in bpo-24064.)

The "UserString" class now implements the "__getnewargs__()",
"__rmod__()", "casefold()", "format_map()", "isprintable()", and
"maketrans()" methods to match the corresponding methods of "str".
(Contributed by Joe Jevnik in bpo-22189.)


collections.abc
---------------

The "Sequence.index()" method now accepts *start* and *stop* arguments
to match the corresponding methods of "tuple", "list", etc.
(Contributed by Devin Jeanpierre in bpo-23086.)

A new "Generator" abstract base class. (Contributed by Stefan Behnel
in bpo-24018.)

New "Awaitable", "Coroutine", "AsyncIterator", and "AsyncIterable"
abstract base classes. (Contributed by Yury Selivanov in bpo-24184.)

For earlier Python versions, a backport of the new ABCs is available
in an external PyPI package.


compileall
----------

A new "compileall" option, "-j *N*", allows running *N* workers
simultaneously to perform parallel bytecode compilation. The
"compile_dir()" function has a corresponding "workers" parameter.
(Contributed by Claudiu Popa in bpo-16104.)

Another new option, "-r", allows controlling the maximum recursion
level for subdirectories.  (Contributed by Claudiu Popa in bpo-19628.)

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 "compile_dir()", "compile_file()",
and "compile_path()" can now accept an integer value indicating the
level of output suppression. (Contributed by Thomas Kluyver in
bpo-21338.)


concurrent.futures
------------------

The "Executor.map()" method now accepts a *chunksize* argument to
allow batching of tasks to improve performance when
"ProcessPoolExecutor()" is used. (Contributed by Dan O'Reilly in
bpo-11271.)

The number of workers in the "ThreadPoolExecutor" constructor is
optional now.  The default value is 5 times the number of CPUs.
(Contributed by Claudiu Popa in bpo-21527.)


configparser
------------

"configparser" now provides a way to customize the conversion of
values by specifying a dictionary of converters in the "ConfigParser"
constructor, or by defining them as methods in "ConfigParser"
subclasses.  Converters defined in a parser instance are inherited by
its section proxies.

Example:

   >>> import configparser
   >>> conv = {}
   >>> conv['list'] = lambda v: [e.strip() for e in v.split() if e.strip()]
   >>> cfg = configparser.ConfigParser(converters=conv)
   >>> cfg.read_string("""
   ... [s]
   ... list = a b c d e f g
   ... """)
   >>> cfg.get('s', 'list')
   'a b c d e f g'
   >>> cfg.getlist('s', 'list')
   ['a', 'b', 'c', 'd', 'e', 'f', 'g']
   >>> section = cfg['s']
   >>> section.getlist('list')
   ['a', 'b', 'c', 'd', 'e', 'f', 'g']

(Contributed by Łukasz Langa in bpo-18159.)


contextlib
----------

The new "redirect_stderr()" *context manager* (similar to
"redirect_stdout()") makes it easier for utility scripts to handle
inflexible APIs that write their output to "sys.stderr" and don't
provide any options to redirect it:

   >>> import contextlib, io, logging
   >>> f = io.StringIO()
   >>> with contextlib.redirect_stderr(f):
   ...     logging.warning('warning')
   ...
   >>> f.getvalue()
   'WARNING:root:warning\n'

(Contributed by Berker Peksag in bpo-22389.)


csv
---

The "writerow()" method now supports arbitrary iterables, not just
sequences.  (Contributed by Serhiy Storchaka in bpo-23171.)


curses
------

The new "update_lines_cols()" function updates the "LINES" and "COLS"
environment variables.  This is useful for detecting manual screen
resizing.  (Contributed by Arnon Yaari in bpo-4254.)


dbm
---

"dumb.open" always creates a new database when the flag has the value
""n"".  (Contributed by Claudiu Popa in bpo-18039.)


difflib
-------

The charset of HTML documents generated by "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 bpo-2052.)

The "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 bpo-17445.)


distutils
---------

Both the "build" and "build_ext" commands now accept a "-j" option to
enable parallel building of extension modules. (Contributed by Antoine
Pitrou in bpo-5309.)

The "distutils" module now supports "xz" compression, and can be
enabled by passing "xztar" as an argument to "bdist --format".
(Contributed by Serhiy Storchaka in bpo-16314.)


doctest
-------

The "DocTestSuite()" function returns an empty "unittest.TestSuite" if
*module* contains no docstrings, instead of raising "ValueError".
(Contributed by Glenn Jones in bpo-15916.)


email
-----

A new policy option "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 "compat32"
and "False" for all other policies. (Contributed by Milan Oberkirch in
bpo-20098.)

A new "Message.get_content_disposition()" method provides easy access
to a canonical value for the *Content-Disposition* header.
(Contributed by Abhilash Raj in bpo-21083.)

A new policy option "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 bpo-24211.)

The "mime.text.MIMEText" constructor now accepts a "charset.Charset"
instance. (Contributed by Claude Paroz and Berker Peksag in
bpo-16324.)


enum