Similarly to asynchronous iteration, there is a new syntax for asynchronous context managers. The following script:
Coroutine functions are intended to be run inside a compatible event loop, such as the
asyncio loop
.
改进模块
¶
asyncio
¶
由于
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:
Updates in 3.5.1:
Updates in 3.5.2:
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
上下文管理器
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
)。
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()
,和
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 coordinate'
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()
,和
maketrans()
methods to match the corresponding methods of
str
. (Contributed by Joe Jevnik in
bpo-22189
)。
compileall
¶
新的
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()
,和
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.
范例:
>>> 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
¶
新的
redirect_stderr()
上下文管理器
(类似
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
¶
新的
update_lines_cols()
function updates the
LINES
and
COLS
module 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
¶
两者
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
)。
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
)。
新的
Message.get_content_disposition()
method provides easy access to a canonical value for the
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
¶
The
Enum
callable has a new parameter
start
to specify the initial number of enum values if only
名称
有提供:
>>> Animal = enum.Enum('Animal', 'cat dog', start=10)
>>> Animal.cat
<Animal.cat: 10>
>>> Animal.dog
<Animal.dog: 11>
(Contributed by Ethan Furman in
bpo-21706
)。
glob
¶
The
iglob()
and
glob()
functions now support recursive search in subdirectories, using the
"**"
pattern. (Contributed by Serhiy Storchaka in
bpo-13968
)。
gzip
¶
The
mode
argument of the
GzipFile
构造函数现在接受
"x"
to request exclusive creation. (Contributed by Tim Heaney in
bpo-19222
)。
heapq
¶
Element comparison in
merge()
can now be customized by passing a
关键函数
in a new optional
key
keyword argument, and a new optional
reverse
keyword argument can be used to reverse element comparison:
>>> import heapq
>>> a = ['9', '777', '55555']
>>> b = ['88', '6666']
>>> list(heapq.merge(a, b, key=len))
['9', '88', '777', '6666', '55555']
>>> list(heapq.merge(reversed(a), reversed(b), key=len, reverse=True))
['55555', '6666', '777', '88', '9']
(Contributed by Raymond Hettinger in
bpo-13742
)。
http
¶
新的
HTTPStatus
enum that defines a set of HTTP status codes, reason phrases and long descriptions written in English. (Contributed by Demian Brecht in
bpo-21793
)。
http.client
¶
HTTPConnection.getresponse()
now raises a
RemoteDisconnected
exception when a remote server connection is closed unexpectedly. Additionally, if a
ConnectionError
(of which
RemoteDisconnected
is a subclass) is raised, the client socket is now closed automatically, and will reconnect on the next request:
import http.client
conn = http.client.HTTPConnection('www.python.org')
for retries in range(3):
try:
conn.request('GET', '/')
resp = conn.getresponse()
except http.client.RemoteDisconnected:
pass
(Contributed by Martin Panter in
bpo-3566
)。
idlelib and IDLE
¶
Since idlelib implements the IDLE shell and editor and is not intended for import by other programs, it gets improvements with every release. See
Lib/idlelib/NEWS.txt
for a cumulative list of changes since 3.4.0, as well as changes made in future 3.5.x releases. This file is also available from the IDLE
对话框。
imaplib
¶
The
IMAP4
class now supports the
上下文管理器
protocol. When used in a
with
statement, the IMAP4
LOGOUT
command will be called automatically at the end of the block. (Contributed by Tarek Ziadé and Serhiy Storchaka in
bpo-4972
)。
The
imaplib
module now supports
RFC 5161
(ENABLE Extension) and
RFC 6855
(UTF-8 Support) via the
IMAP4.enable()
method. A new
IMAP4.utf8_enabled
attribute tracks whether or not
RFC 6855
support is enabled. (Contributed by Milan Oberkirch, R. David Murray, and Maciej Szulik in
bpo-21800
)。
The
imaplib
module now automatically encodes non-ASCII string usernames and passwords using UTF-8, as recommended by the RFCs. (Contributed by Milan Oberkirch in
bpo-21800
)。
imghdr
¶
The
what()
function now recognizes the
OpenEXR
format (contributed by Martin Vignali and Claudiu Popa in
bpo-20295
), and the
WebP
format (contributed by Fabrice Aneche and Claudiu Popa in
bpo-20197
)。
importlib
¶
The
util.LazyLoader
class allows for lazy loading of modules in applications where startup time is important. (Contributed by Brett Cannon in
bpo-17621
)。
The
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
bpo-21156
)。
新的
util.module_from_spec()
function is now the preferred way to create a new module. As opposed to creating a
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
bpo-20383
)。
inspect
¶
两者
Signature
and
Parameter
classes are now picklable and hashable. (Contributed by Yury Selivanov in
bpo-20726
and
bpo-20334
)。
新的
BoundArguments.apply_defaults()
method provides a way to set default values for missing arguments:
>>> def foo(a, b='ham', *args): pass
>>> ba = inspect.signature(foo).bind('spam')
>>> ba.apply_defaults()
>>> ba.arguments
OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])
(Contributed by Yury Selivanov in
bpo-24190
)。
A new class method
Signature.from_callable()
makes subclassing of
Signature
easier. (Contributed by Yury Selivanov and Eric Snow in
bpo-17373
)。
The
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
bpo-20691
)。
A set of new functions to inspect
coroutine functions
and
coroutine objects
has been added:
iscoroutine()
,
iscoroutinefunction()
,
isawaitable()
,
getcoroutinelocals()
,和
getcoroutinestate()
. (Contributed by Yury Selivanov in
bpo-24017
and
bpo-24400
)。
The
stack()
,
trace()
,
getouterframes()
,和
getinnerframes()
functions now return a list of named tuples. (Contributed by Daniel Shahaf in
bpo-16808
)。
ipaddress
¶
两者
IPv4Network
and
IPv6Network
classes now accept an
(address, netmask)
tuple argument, so as to easily construct network objects from existing addresses:
>>> import ipaddress
>>> ipaddress.IPv4Network(('127.0.0.0', 8))
IPv4Network('127.0.0.0/8')
>>> ipaddress.IPv4Network(('127.0.0.0', '255.0.0.0'))
IPv4Network('127.0.0.0/8')
(Contributed by Peter Moody and Antoine Pitrou in
bpo-16531
)。
新的
reverse_pointer
attribute for the
IPv4Network
and
IPv6Network
classes returns the name of the reverse DNS PTR record:
>>> import ipaddress
>>> addr = ipaddress.IPv4Address('127.0.0.1')
>>> addr.reverse_pointer
'1.0.0.127.in-addr.arpa'
>>> addr6 = ipaddress.IPv6Address('::1')
>>> addr6.reverse_pointer
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa'
(Contributed by Leon Weber in
bpo-20480
)。
json
¶
The
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
bpo-21650
)。
JSON decoder now raises
JSONDecodeError
而不是
ValueError
to provide better context information about the error. (Contributed by Serhiy Storchaka in
bpo-19361
)。
linecache
¶
新的
lazycache()
function can be used to capture information about a non-file-based module to permit getting its lines later via
getline()
. This avoids doing I/O until a line is actually needed, without having to carry the module globals around indefinitely. (Contributed by Robert Collins in
bpo-17911
)。
locale
¶
新的
delocalize()
function can be used to convert a string into a normalized number string, taking the
LC_NUMERIC
settings into account:
>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')
'de_DE.UTF-8'
>>> locale.delocalize('1.234,56')
'1234.56'
>>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.delocalize('1,234.56')
'1234.56'
(Contributed by Cédric Krier in
bpo-13918
)。
logging
¶
All logging methods (
Logger
log()
,
exception()
,
critical()
,
debug()
, etc.), now accept exception instances as an
exc_info
argument, in addition to boolean values and exception tuples:
>>> import logging
>>> try:
... 1/0
... except ZeroDivisionError as ex:
... logging.error('exception', exc_info=ex)
ERROR:root:exception
(Contributed by Yury Selivanov in
bpo-20537
)。
The
handlers.HTTPHandler
class now accepts an optional
ssl.SSLContext
instance to configure SSL settings used in an HTTP connection. (Contributed by Alex Gaynor in
bpo-22788
)。
The
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.)
math
¶
Two new constants have been added to the
math
模块:
inf
and
nan
. (Contributed by Mark Dickinson in
bpo-23185
)。
A new function
isclose()
provides a way to test for approximate equality. (Contributed by Chris Barker and Tal Einat in
bpo-24270
)。
新的
gcd()
function has been added. The
fractions.gcd()
function is now deprecated. (Contributed by Mark Dickinson and Serhiy Storchaka in
bpo-22486
)。
os
¶
新的
scandir()
function returning an iterator of
DirEntry
objects has been added. If possible,
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
bpo-22524
)。
On Windows, a new
stat_result.st_file_attributes
attribute is now available. It corresponds to the
dwFileAttributes
成员对于
BY_HANDLE_FILE_INFORMATION
结构返回通过
GetFileInformationByHandle()
. (Contributed by Ben Hoyt in
bpo-21719
)。
The
urandom()
function now uses the
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
bpo-22181
)。
New
get_blocking()
and
set_blocking()
functions allow getting and setting a file descriptor’s blocking mode (
O_NONBLOCK
.) (Contributed by Victor Stinner in
bpo-22054
)。
The
truncate()
and
ftruncate()
functions are now supported on Windows. (Contributed by Steve Dower in
bpo-23668
)。
There is a new
os.path.commonpath()
function returning the longest common sub-path of each passed pathname. Unlike the
os.path.commonprefix()
function, it always returns a valid path:
>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'
>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'
(Contributed by Rafik Draoui and Serhiy Storchaka in
bpo-10395
)。
pathlib
¶
新的
Path.samefile()
method can be used to check whether the path points to the same file as another path, which can be either another
Path
object, or a string:
>>> import pathlib
>>> p1 = pathlib.Path('/etc/hosts')
>>> p2 = pathlib.Path('/etc/../etc/hosts')
>>> p1.samefile(p2)
True
(Contributed by Vajrasky Kok and Antoine Pitrou in
bpo-19775
)。
The
Path.mkdir()
method now accepts a new optional
exist_ok
argument to match
mkdir -p
and
os.makedirs()
functionality. (Contributed by Berker Peksag in
bpo-21539
)。
There is a new
Path.expanduser()
method to expand
~
and
~user
prefixes. (Contributed by Serhiy Storchaka and Claudiu Popa in
bpo-19776
)。
新的
Path.home()
class method can be used to get a
Path
instance representing the user’s home directory. (Contributed by Victor Salgado and Mayank Tripathi in
bpo-19777
)。
New
Path.write_text()
,
Path.read_text()
,
Path.write_bytes()
,
Path.read_bytes()
methods to simplify read/write operations on files.
The following code snippet will create or rewrite existing file
~/spam42
:
>>> import pathlib
>>> p = pathlib.Path('~/spam42')
>>> p.expanduser().write_text('ham')
3
(Contributed by Christopher Welborn in
bpo-20218
)。
pickle
¶
Nested objects, such as unbound methods or nested classes, can now be pickled using
pickle protocols
older than protocol version 4. Protocol version 4 already supports these cases. (Contributed by Serhiy Storchaka in
bpo-23611
)。
poplib
¶
新的
POP3.utf8()
command enables
RFC 6856
(Internationalized Email) support, if a POP server supports it. (Contributed by Milan OberKirch in
bpo-21804
)。
re
¶
References and conditional references to groups with fixed length are now allowed in lookbehind assertions:
>>> import re
>>> pat = re.compile(r'(a|b).(?<=\1)c')
>>> pat.match('aac')
<_sre.SRE_Match object; span=(0, 3), match='aac'>
>>> pat.match('bbc')
<_sre.SRE_Match object; span=(0, 3), match='bbc'>
(Contributed by Serhiy Storchaka in
bpo-9179
)。
The number of capturing groups in regular expressions is no longer limited to 100. (Contributed by Serhiy Storchaka in
bpo-22437
)。
The
sub()
and
subn()
functions now replace unmatched groups with empty strings instead of raising an exception. (Contributed by Serhiy Storchaka in
bpo-1519638
)。
The
re.error
exceptions have new attributes,
msg
,
pattern
,
pos
,
lineno
,和
colno
, that provide better context information about the error:
>>> re.compile("""
... (?x)
... .++
... """)
Traceback (most recent call last):
...
sre_constants.error: multiple repeat at position 16 (line 3, column 7)
(Contributed by Serhiy Storchaka in
bpo-22578
)。
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
bpo-22940
)。
selectors
¶
新的
DevpollSelector
supports efficient
/dev/poll
polling on Solaris. (Contributed by Giampaolo Rodola’ in
bpo-18931
)。
shutil
¶
The
move()
function now accepts a
copy_function
argument, allowing, for example, the
copy()
function to be used instead of the default
copy2()
if there is a need to ignore file metadata when moving. (Contributed by Claudiu Popa in
bpo-19840
)。
The
make_archive()
function now supports the
xztar
format. (Contributed by Serhiy Storchaka in
bpo-5411
)。
signal
¶
在 Windows,
set_wakeup_fd()
function now also supports socket handles. (Contributed by Victor Stinner in
bpo-22018
)。
Various
SIG*
常量在
signal
module have been converted into
Enums
. This allows meaningful names to be printed during debugging, instead of integer “magic numbers”. (Contributed by Giampaolo Rodola’ in
bpo-21076
)。
smtpd
¶
两者
SMTPServer
and
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
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
被设为
False
,
process_message
method must be prepared to accept keyword arguments. (Contributed by Maciej Szulik in
bpo-19662
)。
The
SMTPServer
class now advertises the
8BITMIME
扩展 (
RFC 6152
) if
decode_data
has been set
True
. If the client specifies
BODY=8BITMIME
在
MAIL
command, it is passed to
SMTPServer.process_message()
via the
mail_options
keyword. (Contributed by Milan Oberkirch and R. David Murray in
bpo-21795
)。
The
SMTPServer
class now also supports the
SMTPUTF8
扩展 (
RFC 6531
: Internationalized Email). If the client specified
SMTPUTF8 BODY=8BITMIME
在
MAIL
command, they are passed to
SMTPServer.process_message()
via the
mail_options
keyword. It is the responsibility of the
process_message
method to correctly handle the
SMTPUTF8
data. (Contributed by Milan Oberkirch in
bpo-21725
)。
It is now possible to provide, directly or via name resolution, IPv6 addresses in the
SMTPServer
constructor, and have it successfully connect. (Contributed by Milan Oberkirch in
bpo-14758
)。
sndhdr
¶
The
what()
and
whathdr()
functions now return a
namedtuple()
. (Contributed by Claudiu Popa in
bpo-18615
)。
socket
¶
Functions with timeouts now use a monotonic clock, instead of a system clock. (Contributed by Victor Stinner in
bpo-22043
)。
新的
socket.sendfile()
method allows sending a file over a socket by using the high-performance
os.sendfile()
function on UNIX, resulting in uploads being from 2 to 3 times faster than when using plain
socket.send()
. (Contributed by Giampaolo Rodola’ in
bpo-17552
)。
The
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
bpo-23853
)。
The
backlog
argument of the
socket.listen()
method is now optional. By default it is set to
SOMAXCONN
or to
128
, whichever is less. (Contributed by Charles-François Natali in
bpo-21455
)。
ssl
¶
内存 BIO 支持
¶
(Contributed by Geert Jansen in
bpo-21965
)。
新的
SSLObject
class has been added to provide SSL protocol support for cases when the network I/O capabilities of
SSLSocket
are not necessary or are suboptimal.
SSLObject
represents an SSL protocol instance, but does not implement any network I/O methods, and instead provides a memory buffer interface. The new
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
SSLSocket
’s readiness model (“select/poll”) is inefficient.
新的
SSLContext.wrap_bio()
method can be used to create a new
SSLObject
实例。
Application-Layer Protocol Negotiation Support
¶
(Contributed by Benjamin Peterson in
bpo-20188
)。
Where OpenSSL support is present, the
ssl
module now implements the
Application-Layer Protocol Negotiation
TLS extension as described in
RFC 7301
.
新的
SSLContext.set_alpn_protocols()
can be used to specify which protocols a socket should advertise during the TLS handshake.
新的
SSLSocket.selected_alpn_protocol()
returns the protocol that was selected during the TLS handshake. The
HAS_ALPN
flag indicates whether ALPN support is present.
Other Changes
¶
There is a new
SSLSocket.version()
method to query the actual protocol version in use. (Contributed by Antoine Pitrou in
bpo-20421
)。
The
SSLSocket
class now implements a
SSLSocket.sendfile()
method. (Contributed by Giampaolo Rodola’ in
bpo-17552
)。
The
SSLSocket.send()
method now raises either the
ssl.SSLWantReadError
or
ssl.SSLWantWriteError
exception on a non-blocking socket if the operation would block. Previously, it would return
0
. (Contributed by Nikolaus Rath in
bpo-20951
)。
The
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
int
. (Contributed by Akira Li in
bpo-19940
)。
New
SSLObject.shared_ciphers()
and
SSLSocket.shared_ciphers()
methods return the list of ciphers sent by the client during the handshake. (Contributed by Benjamin Peterson in
bpo-23186
)。
The
SSLSocket.do_handshake()
,
SSLSocket.read()
,
SSLSocket.shutdown()
,和
SSLSocket.write()
methods of the
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
bpo-23853
)。
The
match_hostname()
function now supports matching of IP addresses. (Contributed by Antoine Pitrou in
bpo-23239
)。
sqlite3
¶
The
Row
class now fully supports the sequence protocol, in particular
reversed()
iteration and slice indexing. (Contributed by Claudiu Popa in
bpo-10203
; by Lucas Sinclair, Jessica McKellar, and Serhiy Storchaka in
bpo-13583
)。
subprocess
¶
新的
run()
function has been added. It runs the specified command and returns a
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
bpo-23342
)。
范例:
>>> subprocess.run(["ls", "-l"]) # doesn't capture output
CompletedProcess(args=['ls', '-l'], returncode=0)
>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')
sys
¶
新的
set_coroutine_wrapper()
function allows setting a global hook that will be called whenever a
协程对象
is created by an
async def
function. A corresponding
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
bpo-24017
)。
新的
is_finalizing()
function can be used to check if the Python interpreter is
关闭
. (Contributed by Antoine Pitrou in
bpo-22696
)。
sysconfig
¶
The name of the user scripts directory on Windows now includes the first two components of the Python version. (Contributed by Paul Moore in
bpo-23437
)。
tarfile
¶
The
mode
argument of the
open()
function now accepts
"x"
to request exclusive creation. (Contributed by Berker Peksag in
bpo-21717
)。
The
TarFile.extractall()
and
TarFile.extract()
methods now take a keyword argument
numeric_owner
。若设为
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
bpo-23193
)。
The
TarFile.list()
now accepts an optional
members
keyword argument that can be set to a subset of the list returned by
TarFile.getmembers()
. (Contributed by Serhiy Storchaka in
bpo-21549
)。
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
,或
sec
. (Contributed by Julian Gindi in
bpo-18983
)。
The
timeit()
function has a new
globals
parameter for specifying the namespace in which the code will be running. (Contributed by Ben Roberts in
bpo-2527
)。
tkinter
¶
The
tkinter._fix
module used for setting up the Tcl/Tk environment on Windows has been replaced by a private function in the
_tkinter
module which makes no permanent changes to environment variables. (Contributed by Zachary Ware in
bpo-20035
)。
unittest
¶
The
TestLoader.loadTestsFromModule()
method now accepts a keyword-only argument
pattern
which is passed to
load_tests
as the third argument. Found packages are now checked for
load_tests
regardless of whether their path matches
pattern
, because it is impossible for a package name to match the default pattern. (Contributed by Robert Collins and Barry A. Warsaw in
bpo-16662
)。
Unittest discovery errors now are exposed in the
TestLoader.errors
属性在
TestLoader
instance. (Contributed by Robert Collins in
bpo-19746
)。
A new command line option
--locals
to show local variables in tracebacks. (Contributed by Robert Collins in
bpo-22936
)。
unittest.mock
¶
The
Mock
class has the following improvements:
-
The class constructor has a new
unsafe
parameter, which causes mock objects to raise
AttributeError
on attribute names starting with
"assert"
. (Contributed by Kushal Das in
bpo-21238
)。
-
新的
Mock.assert_not_called()
method to check if the mock object was called. (Contributed by Kushal Das in
bpo-21262
)。
The
MagicMock
class now supports
__truediv__()
,
__divmod__()
and
__matmul__()
operators. (Contributed by Johannes Baiter in
bpo-20968
, and Håkan Lövdahl in
bpo-23581
and
bpo-23568
)。
It is no longer necessary to explicitly pass
create=True
到
patch()
function when patching builtin names. (Contributed by Kushal Das in
bpo-17660
)。
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
若
Authorization
header is not sent. (Contributed by Matej Cepl in
bpo-19494
and Akshit Khurana in
bpo-7159
)。
新的
quote_via
argument for the
parse.urlencode()
function provides a way to control the encoding of query parts if needed. (Contributed by Samwyse and Arnon Yaari in
bpo-13866
)。
The
request.urlopen()
function accepts an
ssl.SSLContext
object as a
context
argument, which will be used for the HTTPS connection. (Contributed by Alex Gaynor in
bpo-22366
)。
The
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
bpo-22118
)。
wsgiref
¶
The
headers
argument of the
headers.Headers
class constructor is now optional. (Contributed by Pablo Torres Navarrete and SilentGhost in
bpo-5800
)。
zipfile
¶
ZIP output can now be written to unseekable streams. (Contributed by Serhiy Storchaka in
bpo-23252
)。
The
mode
自变量
ZipFile.open()
method now accepts
"x"
to request exclusive creation. (Contributed by Serhiy Storchaka in
bpo-21717
)。