Vad är nytt i Python 3.5¶
- Redigerare:
Elvis Pranskevichus <elvis@magic.io>, Yury Selivanov <yury@magic.io>
I den här artikeln förklaras de nya funktionerna i Python 3.5 jämfört med 3.4. Python 3.5 släpptes den 13 september 2015. Se changelog för en fullständig lista över ändringar.
Se även
PEP 478 - Python 3.5 Utgivningsschema
Sammanfattning – Release highlights¶
Nya syntaxfunktioner:
PEP 492, coroutines med async- och await-syntax.
PEP 465, en ny operator för matrismultiplikation:
a @ b
.PEP 448, ytterligare uppackning av generaliseringar.
Nya biblioteksmoduler:
Nya inbyggda funktioner:
bytes % args
,bytearray % args
: PEP 461 – Lägger till%
formatering till bytes och bytearray.Nya metoder
bytes.hex()
,bytearray.hex()
ochmemoryview.hex()
. (Bidrag från Arnon Yaari i bpo-9951.)memoryview
har nu stöd för tuple-indexering (inklusive flerdimensionell). (Bidrag från Antoine Pitrou i bpo-23632.)Generatorer har ett nytt attribut
gi_yieldfrom
, som returnerar objektet som itereras avyield from
-uttryck. (Bidrag från Benno Leslie och Yury Selivanov i bpo-24450.)Ett nytt
RecursionError
-undantag görs nu när maximalt rekursionsdjup har uppnåtts. (Bidrag från Georg Brandl i bpo-19235.)
Förbättringar av CPython-implementeringen:
När
LC_TYPE
locale är POSIX locale (C
-locale), användersys.stdin
ochsys.stdout
nu felhanterarensurrogateescape
istället för felhanterarenstrict
. (Bidrag från Victor Stinner i bpo-19977.).pyo
-filer används inte längre och har ersatts av ett mer flexibelt system som inkluderar optimeringsnivån explicit i.pyc
-namnet. (Se PEP 488 översikt.)Inbyggda moduler och tilläggsmoduler initialiseras nu i en flerfasprocess, som liknar hur Python-moduler laddas. (Se PEP 489 översikt.)
Betydande förbättringar i standardbiblioteket:
collections.OrderedDict
är nu implemented in C, vilket gör den 4 till 100 gånger snabbare.Modulen
ssl
fick stöd för Memory BIO, som frikopplar SSL-protokollhanteringen från nätverks-IO.Den nya
os.scandir()
-funktionen ger ett bättre och betydligt snabbare sätt att genomkorsa kataloger.functools.lru_cache()
har till största delen reimplementerats i C, vilket ger mycket bättre prestanda.Den nya funktionen
subprocess.run()
ger ett strömlinjeformat sätt att köra underprocesser.Modulen
traceback
har fått en betydande enhanced för att förbättra prestanda och underlätta för utvecklare.
Förbättringar av säkerheten:
SSLv3 är nu inaktiverat i hela standardbiblioteket. Det kan fortfarande aktiveras genom att instansiera en
ssl.SSLContext
manuellt. (Se bpo-22638 för mer information; denna ändring har backporterats till CPython 3.4 och 2.7.)Parsing av HTTP-cookies är nu striktare, för att skydda mot potentiella injektionsattacker. (Bidrag från Antoine Pitrou i bpo-22796.)
Förbättringar i Windows:
Ett nytt installationsprogram för Windows har ersatt det gamla MSI-programmet. Se Använda Python på Windows för mer information.
Windows-versioner använder nu Microsoft Visual C++ 14.0, och tilläggsmoduler bör använda samma sak.
Läs vidare för en omfattande lista över användarorienterade ändringar, inklusive många andra mindre förbättringar, CPython-optimeringar, avskrivningar och potentiella portningsproblem.
Nya funktioner¶
PEP 492 - Coroutines med async- och await-syntax¶
PEP 492 förbättrar kraftigt stödet för asynkron programmering i Python genom att lägga till awaitable objects, coroutine functions, asynchronous iteration, och asynchronous context managers.
Coroutine-funktioner deklareras med hjälp av den nya async def
syntaxen:
>>> async def coro():
... return 'spam'
Inom en coroutine-funktion kan det nya uttrycket await
användas för att avbryta coroutine-exekveringen tills resultatet är tillgängligt. Alla objekt kan vara awaited, så länge som de implementerar awaitable-protokollet genom att definiera __await__()
-metoden.
PEP 492 lägger också till async for
statement för bekväm iteration över asynkrona iterabler.
Ett exempel på en rudimentär HTTP-klient som skrivits med den nya syntaxen:
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()
På samma sätt som för asynkron iteration finns det en ny syntax för asynkrona kontexthanterare. Följande skript:
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()
kommer att mata ut:
coro 2: väntar på lås
coro 2: håller i låset
coro 1: väntar på lås
coro 2: frigör låset
coro 1: håller i låset
coro 1: släpper låset
Observera att både async for
och async with
endast kan användas inuti en coroutine-funktion som deklarerats med async def
.
Coroutine-funktioner är avsedda att köras i en kompatibel händelseslinga, t.ex. asyncio loop.
Anteckning
Ändrad i version 3.5.2: Från och med CPython 3.5.2 kan __aiter__
direkt returnera asynchronous iterators. Att returnera ett awaitable-objekt kommer att resultera i en PendingDeprecationWarning
.
Se mer information i dokumentationsavsnittet Asynkrona Iteratorer.
Se även
- PEP 492 – Coroutines med async- och await-syntax
PEP skrivet och implementerat av Yury Selivanov.
PEP 465 - En dedikerad infixoperator för matrismultiplikation¶
PEP 465 lägger till infixoperatorn @
för matrismultiplikation. För närvarande finns det inga inbyggda Python-typer som implementerar den nya operatorn, men den kan implementeras genom att definiera __matmul__()
, __rmatmul__()
och __imatmul__()
för vanlig, reflekterad och in-place matrismultiplikation. Semantiken för dessa metoder liknar den för metoder som definierar andra aritmetiska operatorer i infix.
Matrismultiplikation är en mycket vanlig operation inom många områden av matematik, vetenskap, teknik och tillägget av @
gör det möjligt att skriva renare kod:
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
istället för:
S = dot((dot(H, beta) - r).T,
dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))
NumPy 1.10 har stöd för den nya operatorn:
>>> 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.])
Se även
- PEP 465 – En dedikerad infixoperator för matrismultiplikation
PEP skriven av Nathaniel J. Smith; implementerad av Benjamin Peterson.
PEP 448 - Ytterligare generaliseringar för uppackning¶
PEP 448 utökar de tillåtna användningarna av *
iterable unpacking operator och **
dictionary unpacking operator. Det är nu möjligt att använda ett godtyckligt antal uppackningar i funktionsanrop:
>>> 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
På samma sätt tillåter tuple-, list-, set- och dictionary-displayer flera uppackningar (se Uttryckslistor och Ordbok visar):
>>> *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}
Se även
- PEP 448 – Ytterligare generaliseringar av uppackning
PEP skriven av Joshua Landau; implementerad av Neil Girdhar, Thomas Wouters och Joshua Landau.
PEP 461 - Stöd för procentformatering för bytes och bytearray¶
PEP 461 lägger till stöd för %
interpolationsoperatorn till bytes
och bytearray
.
Även om interpolering vanligtvis betraktas som en strängoperation finns det fall där interpolering på bytes
eller bytearrays
är meningsfullt, och det arbete som krävs för att kompensera för denna saknade funktionalitet försämrar den övergripande läsbarheten i koden. Denna fråga är särskilt viktig när man hanterar protokoll i trådformat, som ofta är en blandning av binär och ASCII-kompatibel text.
Exempel:
>>> b'Hello %b!' % b'World'
b'Hello World!'
>>> b'x=%i y=%f' % (1, 2.5)
b'x=1 y=2.500000'
Unicode är inte tillåtet för %b
, men det accepteras av %a
(motsvarande 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'"
Observera att konverteringstyperna %s
och %r
, även om de stöds, endast bör användas i kodbaser som behöver kompatibilitet med Python 2.
Se även
- PEP 461 – Lägger till % formatting till bytes och bytearray
PEP skriven av Ethan Furman; implementerad av Neil Schemenauer och Ethan Furman.
PEP 484 - Tips om typ¶
Syntaxen för funktionsannoteringar har varit en Python-funktion sedan version 3.0 (PEP 3107), men semantiken för annoteringar har lämnats odefinierad.
Erfarenheten har visat att de flesta funktionsannoteringar används för att ge typtips till funktionsparametrar och returvärden. Det blev uppenbart att det skulle vara till nytta för Python-användare om standardbiblioteket innehöll basdefinitioner och verktyg för typannoteringar.
PEP 484 introducerar en provisorisk modul för att tillhandahålla dessa standarddefinitioner och verktyg, tillsammans med vissa konventioner för situationer där anteckningar inte är tillgängliga.
Här är till exempel en enkel funktion vars argument och returtyp deklareras i annotationerna:
def greeting(namn: str) -> str:
return 'Hej ' + namn
Även om dessa anteckningar är tillgängliga vid körning genom det vanliga attributet __annotations__
, sker ingen automatisk typkontroll vid körning. Istället antas det att en separat off-line typkontroll (t.ex. mypy) kommer att användas för on-demand källkodsanalys.
Typsystemet stöder unioner, generiska typer och en speciell typ med namnet Any
som är konsekvent med (dvs. kan tilldelas till och från) alla typer.
PEP 471 - os.scandir()-funktionen - en bättre och snabbare katalogiterator¶
PEP 471 lägger till en ny funktion för katalogiteration, os.scandir()
, i standardbiblioteket. Dessutom implementeras nu os.walk()
med scandir
, vilket gör den 3 till 5 gånger snabbare på POSIX-system och 7 till 20 gånger snabbare på Windows-system. Detta uppnås till stor del genom att kraftigt minska antalet anrop till os.stat()
som krävs för att gå igenom ett katalogträd.
Dessutom returnerar scandir
en iterator, i stället för en lista med filnamn, vilket förbättrar minneseffektiviteten vid iteration över mycket stora kataloger.
Följande exempel visar en enkel användning av os.scandir()
för att visa alla filer (exklusive kataloger) i den angivna path som inte börjar med '.'
. Anropet entry.is_file()
kommer i allmänhet inte att göra ytterligare ett systemanrop:
för entry i os.scandir(path):
if not entry.name.startswith('.') and entry.is_file():
print(post.namn)
Se även
- PEP 471 – os.scandir() function – en bättre och snabbare katalogiterator
PEP skrivet och implementerat av Ben Hoyt med hjälp av Victor Stinner.
PEP 475: Försök igen med systemanrop som misslyckas med EINTR¶
En errno.EINTR
-felkod returneras när ett systemanrop, som väntar på I/O, avbryts av en signal. Tidigare skulle Python ge InterruptedError
i sådana fall. Detta innebar att utvecklaren hade två val när han skrev en Python-applikation:
Ignorera
InterruptedError
.Hantera
InterruptedError
och försök att starta om det avbrutna systemanropet på varje anropsplats.
Det första alternativet gör att en applikation misslyckas intermittent. Det andra alternativet lägger till en stor mängd boilerplate som gör koden nästan oläslig. Jämför:
skriv ut("Hello World")
och:
medan True:
try:
print("Hello World")
bryt
except InterruptedError:
fortsätt
PEP 475 implementerar automatisk omprövning av systemanrop vid EINTR
. Detta tar bort bördan av att hantera EINTR
eller InterruptedError
i användarkoden i de flesta situationer och gör Python-program, inklusive standardbiblioteket, mer robusta. Observera att systemanropet bara görs om om signalhanteraren inte ger upphov till ett undantag.
Nedan finns en lista över funktioner som nu prövas på nytt när de avbryts av en signal:
funktioner i modulen
faulthandler
;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()
;specialfall:
os.close()
ochos.dup2()
ignorerar nuEINTR
-fel; syscall-anropet försöker inte igen (se PEP för motivering);select
functions:devpoll.poll()
,epoll.poll()
,kqueue.control()
,poll.poll()
,select()
;metoder för klassen
socket
:accept()
,connect()
(utom för icke-blockerande uttag),recv()
,recvfrom()
,recvmsg()
,send()
,sendall()
,sendmsg()
,sendto()
;tid.sömn()
.
Se även
- PEP 475 – Försök igen med systemanrop som misslyckas med EINTR
PEP och genomförandet skrevs av Charles-François Natali och Victor Stinner, med hjälp av Antoine Pitrou (den franska kopplingen).
PEP 479: Ändra StopIteration-hanteringen i generatorer¶
Samspelet mellan generatorer och StopIteration
i Python 3.4 och tidigare var ibland överraskande och kunde dölja obskyra buggar. Tidigare tolkades StopIteration
som av misstag uppstod inuti en generatorfunktion som slutet på iterationen av den loopkonstruktion som driver generatorn.
PEP 479 ändrar generatorernas beteende: när ett StopIteration
-undantag uppstår inuti en generator ersätts det med ett RuntimeError
innan det lämnar generatorramen. Huvudsyftet med denna ändring är att underlätta felsökning i situationer där ett oskyddat next()
-anrop genererar StopIteration
och orsakar att iterationen som styrs av generatorn avslutas utan meddelande. Detta är särskilt skadligt i kombination med konstruktionen yield from
.
Detta är en bakåtkompatibel ändring, så för att aktivera det nya beteendet krävs en __future__-import:
>>> 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
Utan import av __future__
kommer en PendingDeprecationWarning`
att uppstå när ett StopIteration`
-undantag uppstår i en generator.
Se även
- PEP 479 – Ändra StopIteration-hanteringen i generatorer
PEP skriven av Chris Angelico och Guido van Rossum. Implementerat av Chris Angelico, Yury Selivanov och Nick Coghlan.
PEP 485: En funktion för att testa approximativ likhet¶
PEP 485 lägger till funktionerna math.isclose()
och cmath.isclose()
som anger om två värden är ungefär lika stora eller ”nära” varandra. Huruvida två värden anses ligga nära varandra eller inte bestäms utifrån givna absoluta och relativa toleranser. Relativ tolerans är den maximalt tillåtna skillnaden mellan isclose
-argument, i förhållande till det större absoluta värdet:
>>> 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
Det är också möjligt att jämföra två värden med hjälp av absolut tolerans, som måste vara ett icke-negativt värde:
>>> 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
Se även
- PEP 485 – En funktion för att testa ungefärlig likhet
PEP skriven av Christopher Barker; implementerad av Chris Barker och Tal Einat.
PEP 486: Gör Python Launcher medveten om virtuella miljöer¶
PEP 486 gör Windows-startprogrammet (se PEP 397) medvetet om en aktiv virtuell miljö. När standardtolken skulle användas och miljövariabeln VIRTUAL_ENV
är satt, kommer tolken i den virtuella miljön att användas.
Se även
- PEP 486 – Gör Python Launcher uppmärksam på virtuella miljöer
PEP skrivet och implementerat av Paul Moore.
PEP 488: Eliminering av PYO-filer¶
PEP 488 avskaffar begreppet .pyo
-filer. Detta innebär att .pyc
-filer representerar både optimerad och icke-optimerad bytecode. För att undvika att bytecode-filer måste regenereras hela tiden har .pyc
-filer nu en valfri opt-
-tagg i namnet när bytecoden är optimerad. Detta har som bieffekt att det inte längre uppstår konflikter mellan bytecode-filnamn när man kör under antingen -O
eller -OO
. Följaktligen kan bytecode-filer som genererats från -O
och -OO
nu existera samtidigt. importlib.util.cache_from_source()
har ett uppdaterat API för att underlätta denna förändring.
Se även
- PEP 488 – Eliminering av PYO-filer
PEP skrivet och implementerat av Brett Cannon.
PEP 489: Initialisering av flerfasig tilläggsmodul¶
PEP 489 uppdaterar initialiseringen av tilläggsmoduler för att dra nytta av den tvåstegs modulladdningsmekanism som introducerades av PEP 451 i Python 3.4.
Denna ändring gör att importsemantiken för tilläggsmoduler som väljer att använda den nya mekanismen kommer mycket närmare den för Pythons käll- och bytekodsmoduler, inklusive möjligheten att använda valfri giltig identifierare som modulnamn, i stället för att vara begränsad till ASCII.
Se även
- PEP 489 – Initialisering av flerfasig tilläggsmodul
PEP skriven av Petr Viktorin, Stefan Behnel och Nick Coghlan; implementerad av Petr Viktorin.
Andra språkliga förändringar¶
Några mindre ändringar som gjorts i Python-språkets kärna är:
Lagt till felhanterare för
"namereplace"
. Felhanterarna"backslashreplace"
fungerar nu med avkodning och översättning. (Bidrag från Serhiy Storchaka i bpo-19676 och bpo-22286.)Alternativet
-b
påverkar nu jämförelser avbytes
medint
. (Bidrag från Serhiy Storchaka i bpo-23681.)Nya kazakiska
kz1048
och tadzjikiskakoi8_t
codecs. (Bidrag från Serhiy Storchaka i bpo-22682 och bpo-22681.)Egenskapsdokumentationer är nu skrivbara. Detta är särskilt användbart för
collections.namedtuple()
-dokumentsträngar. (Bidrag från Berker Peksag i bpo-24064.)Cirkulär import som involverar relativ import stöds nu. (Bidrag från Brett Cannon och Antoine Pitrou i bpo-17636.)
Nya moduler¶
typing¶
Den nya modulen typing
provisional innehåller standarddefinitioner och verktyg för funktionstypskommentarer. Se Type Hints för mer information.
zipapp¶
Den nya modulen zipapp
(specificerad i PEP 441) tillhandahåller ett API och kommandoradsverktyg för att skapa körbara Python Zip Applications, som introducerades i Python 2.6 i bpo-1739468, men som inte var särskilt välkända, varken då eller senare.
Med den nya modulen är det så enkelt som att lägga alla filer, inklusive filen __main__.py
, i katalogen myapp
och köra:
$ python -m zipapp myapp
$ python myapp.pyz
Implementeringen av modulen har bidragit av Paul Moore i bpo-23491.
Se även
PEP 441 – Förbättrat stöd för Python ZIP-applikationer
Förbättrade moduler¶
argparse¶
Klassen ArgumentParser
tillåter nu att förkortad användning av långa alternativ inaktiveras genom att sätta tillåt_abbrev till False
. (Bidrag från Jonathan Paugh, Steven Bethard, paul j3 och Daniel Eriksson i bpo-14910.)
asyncio¶
Eftersom modulen asyncio
är provisional, har alla ändringar som introducerades i Python 3.5 också bakåtporterats till Python 3.4.x.
Anmärkningsvärda ändringar i modulen asyncio
sedan Python 3.4.0:
Nya debugging API:er:
loop.set_debug()
ochloop.get_debug()
metoder. (Bidrag från Victor Stinner.)Proactors händelseslinga har nu stöd för SSL. (Bidrag från Antoine Pitrou och Victor Stinner i bpo-22560.)
En ny
loop.is_closed()
-metod för att kontrollera om händelseslingan är stängd. (Bidrag från Victor Stinner i bpo-21326.)En ny
loop.create_task()
för att enkelt skapa och schemalägga en nyTask
för en coroutine. Metodencreate_task
används också av alla asynciofunktioner som omsluter coroutines till tasks, till exempelasyncio.wait()
,asyncio.gather()
, etc. (Bidrag från Victor Stinner.)En ny
transport.get_write_buffer_limits()
-metod för att fråga efter höga och låga vattengränser för flödeskontrollen. (Bidrag från Victor Stinner.)Funktionen
async()
är föråldrad till förmån förensure_future()
. (Bidrag från Yury Selivanov.)Nya metoder
loop.set_task_factory()
ochloop.get_task_factory()
för att anpassa uppgiftsfabriken som metodenloop.create_task()
använder. (Bidrag från Yury Selivanov.)Nya kömetoder
Queue.join()
ochQueue.task_done()
. (Bidrag från Victor Stinner.)Klassen
JoinableQueue
togs bort till förmån för klassenasyncio.Queue
. (Bidrag från Victor Stinner.)
Uppdateringar i 3.5.1:
Funktionen
ensure_future()
och alla funktioner som använder den, till exempelloop.run_until_complete()
, accepterar nu alla typer av awaitable objects. (Bidrag från Yury Selivanov.)Ny
run_coroutine_threadsafe()
-funktion för att skicka coroutines till händelseslingor från andra trådar. (Bidrag från Vincent Michel.)Ny
Transport.is_closing()
-metod för att kontrollera om transporten stängs eller stängs. (Bidrag från Yury Selivanov.)Metoden
loop.create_server()
kan nu acceptera en lista med värdar. (Bidrag från Yann Sionneau.)
Uppdateringar i 3.5.2:
Ny
loop.create_future()
-metod för att skapa Future-objekt. Detta gör det möjligt för alternativa implementationer av händelseslingor, som uvloop, att tillhandahålla en snabbareasyncio.Future
-implementation. (Bidrag från Yury Selivanov.)Ny
loop.get_exception_handler()
-metod för att hämta den aktuella undantagshanteraren. (Bidrag från Yury Selivanov.)Ny
StreamReader.readuntil()
-metod för att läsa data från strömmen tills en separatorbyte-sekvens visas. (Bidrag från Mark Korenberg.)Metoderna
loop.create_connection()
ochloop.create_server()
är optimerade för att undvika att anropa systemets funktiongetaddrinfo
om adressen redan är löst. (Bidrag från A. Jesse Jiryu Davis.)loop.sock_connect(sock, address)
kräver inte längre att adressen löses före anropet. (Bidrag från A. Jesse Jiryu Davis.)
bz2¶
Metoden BZ2Decompressor.decompress
accepterar nu ett valfritt max_length-argument för att begränsa den maximala storleken på dekomprimerade data. (Bidrag från Nikolaus Rath i bpo-15955.)
cgi¶
Klassen FieldStorage
har nu stöd för protokollet context manager. (Bidrag från Berker Peksag i bpo-20289.)
cmath¶
En ny funktion isclose()
ger ett sätt att testa för ungefärlig likhet. (Bidrag från Chris Barker och Tal Einat i bpo-24270.)
kod¶
Metoden InteractiveInterpreter.showtraceback()
skriver nu ut hela den kedjade tracebacken, precis som den interaktiva tolken. (Bidrag från Claudiu Popa i bpo-17442.)
samlingar¶
Klassen OrderedDict
är nu implementerad i C, vilket gör den 4 till 100 gånger snabbare. (Bidrag från Eric Snow i bpo-16991.)
vyerna OrderedDict.items()
, OrderedDict.keys()
, OrderedDict.values()
stöder nu reversed()
iteration. (Bidrag från Serhiy Storchaka i bpo-19505.)
Klassen deque
definierar nu index()
, insert()
, och copy()
, och stöder operatorerna +
och *
. Detta gör att deques kan identifieras som en MutableSequence
och förbättrar deras utbytbarhet mot listor. (Bidrag från Raymond Hettinger i bpo-23704.)
Docstrings producerade av namedtuple()
kan nu uppdateras:
Point = namedtuple('Point', ['x', 'y'])
Point.__doc__ += ': Kartesisk koordinat'
Point.x.__doc__ = 'abscissa'
Point.y.__doc__ = 'ordinat'
(Bidrag från Berker Peksag i bpo-24064.)
Klassen UserString
implementerar nu metoderna __getnewargs__()
, __rmod__()
, casefold()
, format_map()
, isprintable()
och maketrans()
för att matcha motsvarande metoder i str
. (Bidrag från Joe Jevnik i bpo-22189.)
samlingar.abc¶
Metoden Sequence.index()
accepterar nu start och stop argument för att matcha motsvarande metoder i tuple
, list
, etc. (Bidrag från Devin Jeanpierre i bpo-23086.)
En ny Generator
abstrakt basklass. (Bidrag från Stefan Behnel i bpo-24018.)
Nya Awaitable
, Coroutine
, AsyncIterator
, och AsyncIterable
abstrakta basklasser. (Bidrag från Yury Selivanov i bpo-24184.)
För tidigare Python-versioner finns en backport av de nya ABC:erna i ett externt PyPI-paket.
compileall¶
Ett nytt compileall
-alternativ, -j N
, gör det möjligt att köra N arbetare samtidigt för att utföra parallell bytekodkompilering. Funktionen compile_dir()
har en motsvarande parameter för workers
. (Bidrag från Claudiu Popa i bpo-16104.)
Ett annat nytt alternativ, -r
, gör det möjligt att kontrollera den maximala rekursionsnivån för underkataloger. (Bidrag från Claudiu Popa i bpo-19628.)
Kommandoradsalternativet -q
kan nu anges mer än en gång, i vilket fall alla utdata, inklusive fel, kommer att undertryckas. Motsvarande quiet
-parameter i compile_dir()
, compile_file()
och compile_path()
kan nu acceptera ett heltalsvärde som anger nivån på undertryckningen av utdata. (Bidrag från Thomas Kluyver i bpo-21338.)
concurrent.futures¶
Metoden Executor.map()
accepterar nu ett chunksize-argument för att tillåta batchning av uppgifter för att förbättra prestanda när ProcessPoolExecutor()
används. (Bidrag från Dan O’Reilly i bpo-11271.)
Antalet arbetare i ThreadPoolExecutor
-konstruktören är nu valfritt. Standardvärdet är 5 gånger antalet processorer. (Bidrag från Claudiu Popa i bpo-21527.)
configparser¶
configparser
ger nu möjlighet att anpassa konverteringen av värden genom att ange en ordlista med konverterare i konstruktören ConfigParser
, eller genom att definiera dem som metoder i underklasser till ConfigParser
. Omvandlare som definieras i en parserinstans ärvs av dess sektionsproxies.
Exempel:
>>> 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']
(Bidrag från Łukasz Langa i bpo-18159.)
contextlib¶
Den nya redirect_stderr()
context manager (liknande redirect_stdout()
) gör det lättare för verktygsskript att hantera oflexibla API:er som skriver utdata till sys.stderr
och inte ger några alternativ för att omdirigera den:
>>> import contextlib, io, logging
>>> f = io.StringIO()
>>> with contextlib.redirect_stderr(f):
... logging.warning('warning')
...
>>> f.getvalue()
'WARNING:root:warning\n'
(Bidrag från Berker Peksag i bpo-22389.)
csv¶
Metoden writerow()
stöder nu godtyckliga iterabler, inte bara sekvenser. (Bidrag från Serhiy Storchaka i bpo-23171.)
curses¶
Den nya funktionen update_lines_cols()
uppdaterar modulvariablerna LINES
och COLS
. Detta är användbart för att upptäcka manuella skärmstorleksändringar. (Bidrag från Arnon Yaari i bpo-4254.)
dbm¶
dumb.open
skapar alltid en ny databas när flaggan har värdet "n"
. (Bidrag från Claudiu Popa i bpo-18039.)
difflib¶
Teckensnittet för HTML-dokument som genereras av HtmlDiff.make_file()
kan nu anpassas med hjälp av ett nytt charset argument som endast innehåller nyckelord. Standardteckensnittet för HTML-dokument ändrades från "ISO-8859-1"
till "utf-8"
. (Bidrag från Berker Peksag i bpo-2052.)
Funktionen diff_bytes()
kan nu jämföra listor med bytesträngar. Detta åtgärdar en regression från Python 2. (Bidrag från Terry J. Reedy och Greg Ward i bpo-17445.)
distutils¶
Både kommandona build
och build_ext
accepterar nu alternativet -j
för att möjliggöra parallell byggnation av tilläggsmoduler. (Bidrag från Antoine Pitrou i bpo-5309.)
Modulen distutils
stöder nu xz
-komprimering och kan aktiveras genom att skicka xztar
som ett argument till bdist --format
. (Bidrag från Serhiy Storchaka i bpo-16314.)
doctest¶
Funktionen DocTestSuite()
returnerar en tom unittest.TestSuite
om modul inte innehåller några docstrings, istället för att ge upphov till ValueError
. (Bidrag från Glenn Jones i bpo-15916.)
e-post¶
Ett nytt policyalternativ Policy.mangle_from_
styr om rader som börjar med "From"
i e-posttexter ska föregås av ett ">"
-tecken av generatorer. Standardvärdet är True
för compat32
och False
för alla andra policyer. (Bidrag från Milan Oberkirch i bpo-20098.)
En ny Message.get_content_disposition()
-metod ger enkel åtkomst till ett kanoniskt värde för Content-Disposition-huvudet. (Bidrag från Abhilash Raj i bpo-21083.)
Ett nytt policyalternativ EmailPolicy.utf8
kan sättas till True
för att koda e-postrubriker med UTF-8-teckensnittet istället för att använda kodade ord. Detta gör att Messages
kan formateras enligt RFC 6532 och användas med en SMTP-server som stöder tillägget RFC 6531 SMTPUTF8
. (Bidrag från R. David Murray i bpo-24211.)
Konstruktorn mime.text.MIMEText
accepterar nu en instans av charset.Charset
. (Bidrag från Claude Paroz och Berker Peksag i bpo-16324.)
enum¶
Den anropsbara Enum
har en ny parameter start för att ange det initiala antalet enumvärden om endast names anges:
>>> Animal = enum.Enum('Animal', 'cat dog', start=10)
>>> Animal.cat
<Animal.cat: 10>
>>> Animal.dog
<Animal.dog: 11>
(Bidrag från Ethan Furman i bpo-21706.)
felhanterare¶
Funktionerna enable()
, register()
, dump_traceback()
och dump_traceback_later()
accepterar nu filbeskrivare i tillägg till filliknande objekt. (Bidrag från Wei Wu i bpo-23566.)
functools¶
Det mesta av lru_cache()
-maskineriet är nu implementerat i C, vilket gör det betydligt snabbare. (Bidrag från Matt Joiner, Alexey Kachayev och Serhiy Storchaka i bpo-14373.)
klot¶
Funktionerna iglob()
och glob()
stöder nu rekursiv sökning i underkataloger med hjälp av mönstret "**"
. (Bidrag från Serhiy Storchaka i bpo-13968.)
gzip¶
Argumentet mode i GzipFile
-konstruktören accepterar nu "x"
för att begära exklusiv skapelse. (Bidrag från Tim Heaney i bpo-19222.)
heapq¶
Elementjämförelse i merge()
kan nu anpassas genom att skicka en key function i ett nytt valfritt key nyckelordsargument, och ett nytt valfritt reverse nyckelordsargument kan användas för att vända elementjämförelsen:
>>> 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']
(Bidrag från Raymond Hettinger i bpo-13742.)
http¶
En ny HTTPStatus
enum som definierar en uppsättning HTTP-statuskoder, orsaksfraser och långa beskrivningar skrivna på engelska. (Bidrag från Demian Brecht i bpo-21793.)
http.klient¶
HTTPConnection.getresponse()
ger nu upphov till ett RemoteDisconnected
undantag när en fjärrserveranslutning oväntat stängs. Dessutom, om ett ConnectionError
(som RemoteDisconnected
är en underklass till) uppstår, stängs nu klientuttaget automatiskt och återansluts vid nästa begäran:
import http.client
conn = http.client.HTTPConnection('www.python.org')
för retries i intervall(3):
försök:
conn.request('GET', '/')
resp = conn.getresponse()
except http.client.RemoteDisconnected:
pass
(Bidrag från Martin Panter i bpo-3566.)
idlelib och IDLE¶
Eftersom idlelib implementerar IDLE:s skal och redigerare och inte är avsett att importeras av andra program, förbättras det för varje utgåva. Se Lib/idlelib/NEWS.txt
för en kumulativ lista över ändringar sedan 3.4.0, samt ändringar som görs i framtida 3.5.x utgåvor. Den här filen är också tillgänglig från IDLE:s -dialogruta.
imaplib¶
Klassen IMAP4
har nu stöd för protokollet context manager. När det används i en with
-sats kommer IMAP4-kommandot LOGOUT
att anropas automatiskt i slutet av blocket. (Bidrag från Tarek Ziadé och Serhiy Storchaka i bpo-4972.)
Modulen imaplib
stöder nu RFC 5161 (ENABLE Extension) och RFC 6855 (UTF-8 Support) via metoden IMAP4.enable()
. Ett nytt attribut IMAP4.utf8_enabled
spårar om stöd för RFC 6855 är aktiverat eller inte. (Bidrag från Milan Oberkirch, R. David Murray och Maciej Szulik i bpo-21800.)
Modulen imaplib
kodar nu automatiskt användarnamn och lösenord i icke-ASCII-strängar med UTF-8, enligt RFC:s rekommendationer. (Bidrag från Milan Oberkirch i bpo-21800.)
imghdr¶
Funktionen what()
känner nu igen formatet OpenEXR (bidrag från Martin Vignali och Claudiu Popa i bpo-20295) och formatet WebP (bidrag från Fabrice Aneche och Claudiu Popa i bpo-20197)
importlib¶
Klassen util.LazyLoader
möjliggör latladdning av moduler i applikationer där starttiden är viktig. (Bidrag från Brett Cannon i bpo-17621.)
Metoden abc.InspectLoader.source_to_code()
är nu en statisk metod. Detta gör det enklare att initiera ett modulobjekt med kod som kompilerats från en sträng genom att köra exec(code, module.__dict__)
. (Bidrag från Brett Cannon i bpo-21156.)
Den nya funktionen util.module_from_spec()
är nu det föredragna sättet att skapa en ny modul. I motsats till att skapa en types.ModuleType
-instans direkt, kommer den här nya funktionen att ställa in de olika importkontrollerade attributen baserat på det inskickade spec-objektet. (Bidrag från Brett Cannon i bpo-20383.)
inspektera¶
Både klasserna Signature
och Parameter
är nu picklable och hashable. (Bidrag från Yury Selivanov i bpo-20726 och bpo-20334.)
En ny metod BoundArguments.apply_defaults()
ger möjlighet att ange standardvärden för saknade argument:
>>> def foo(a, b='ham', *args): pass
>>> ba = inspect.signature(foo).bind('spam')
>>> ba.apply_defaults()
>>> ba.arguments
OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])
(Bidrag från Yury Selivanov i bpo-24190.)
En ny klassmetod Signature.from_callable()
gör det enklare att underklassa Signature
. (Bidrag från Yury Selivanov och Eric Snow i bpo-17373.)
Funktionen signature()
accepterar nu ett follow_wrapped valfritt nyckelordsargument, som när det sätts till False
inaktiverar automatisk följning av __wrapped__
länkar. (Bidrag från Yury Selivanov i bpo-20691.)
En uppsättning nya funktioner för att inspektera coroutine functions och coroutine objects har lagts till: iscoroutine()
, iscoroutinefunction()
, isawaitable()
, getcoroutinelocals()
, och getcoroutinestate()
. (Bidrag från Yury Selivanov i bpo-24017 och bpo-24400.)
Funktionerna stack()
, trace()
, getouterframes()
och getinnerframes()
returnerar nu en lista med namngivna tupler. (Bidrag från Daniel Shahaf i bpo-16808.)
io¶
En ny BufferedIOBase.readinto1()
-metod, som använder högst ett anrop till den underliggande råströmmens RawIOBase.read()
- eller RawIOBase.readinto()
-metoder. (Bidrag från Nikolaus Rath i bpo-20578.)
ipadress¶
Både klasserna IPv4Network
och IPv6Network
accepterar nu ett tuple-argument (adress, nätmask)
, så att man enkelt kan konstruera nätverksobjekt från befintliga adresser:
>>> 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')
(Bidrag från Peter Moody och Antoine Pitrou i bpo-16531.)
Ett nytt attribut reverse_pointer
för klasserna IPv4Network
och IPv6Network
returnerar namnet på den omvända DNS PTR-posten:
>>> 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'
(Bidrag från Leon Weber i bpo-20480.)
json¶
Kommandoradsgränssnittet json.tool
bevarar nu ordningen på nycklarna i JSON-objekt som skickas som indata. Det nya alternativet --sort-keys
kan användas för att sortera nycklarna i alfabetisk ordning. (Bidrag från Berker Peksag i bpo-21650.)
JSON-avkodaren ger nu upphov till JSONDecodeError
istället för ValueError
för att ge bättre kontextinformation om felet. (Bidrag från Serhiy Storchaka i bpo-19361.)
linecache¶
En ny lazycache()
-funktion kan användas för att fånga information om en icke-filbaserad modul för att göra det möjligt att hämta dess rader senare via getline()
. Detta undviker att göra I/O tills en rad faktiskt behövs, utan att behöva bära med sig modulens globaler på obestämd tid. (Bidrag från Robert Collins i bpo-17911.)
lokal¶
En ny delocalize()
-funktion kan användas för att konvertera en sträng till en normaliserad talsträng, med hänsyn till inställningarna för LC_NUMERIC
:
>>> 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'
(Bidrag från Cédric Krier i bpo-13918.)
loggning¶
Alla logningsmetoder (Logger
log()
, exception()
, critical()
, debug()
, etc.) accepterar nu undantagsinstanser som ett exc_info-argument, förutom booleska värden och undantagstupler:
>>> import logging
>>> try:
... 1/0
... except ZeroDivisionError as ex:
... logging.error('exception', exc_info=ex)
ERROR:root:exception
(Bidrag från Yury Selivanov i bpo-20537.)
Klassen handlers.HTTPHandler
accepterar nu en valfri ssl.SSLContext
-instans för att konfigurera SSL-inställningar som används i en HTTP-anslutning. (Bidrag från Alex Gaynor i bpo-22788.)
Klassen handlers.QueueListener
tar nu ett respect_handler_level nyckelordsargument som, om det sätts till True
, kommer att skicka meddelanden till hanterare som tar hänsyn till hanterarnivåer. (Bidrag från Vinay Sajip.)
lzma¶
Metoden LZMADecompressor.decompress()
accepterar nu ett valfritt max_length-argument för att begränsa den maximala storleken på dekomprimerade data. (Bidrag från Martin Panter i bpo-15955.)
matematik¶
Två nya konstanter har lagts till i modulen math
: inf
och nan
. (Bidrag från Mark Dickinson i bpo-23185.)
En ny funktion isclose()
ger ett sätt att testa för ungefärlig likhet. (Bidrag från Chris Barker och Tal Einat i bpo-24270.)
En ny gcd()
-funktion har lagts till. Funktionen fractions.gcd()
är nu föråldrad. (Bidrag från Mark Dickinson och Serhiy Storchaka i bpo-22486.)
multiprocessing¶
sharedctypes.synchronized()
-objekt stöder nu protokollet context manager. (Bidrag från Charles-François Natali i bpo-21565.)
operator¶
objekten attrgetter()
, itemgetter()
och methodcaller()
har nu stöd för pickling. (Bidrag från Josh Rosenberg och Serhiy Storchaka i bpo-22955.)
Nya matmul()
och imatmul()
funktioner för att utföra matrismultiplikation. (Bidrag från Benjamin Peterson i bpo-21176.)
os¶
Den nya funktionen scandir()
som returnerar en iterator av DirEntry
-objekt har lagts till. Om möjligt extraherar scandir()
filattribut medan en katalog skannas, vilket gör att efterföljande systemanrop inte behöver utföras för att bestämma filtyp eller attribut, vilket kan förbättra prestandan avsevärt. (Bidrag från Ben Hoyt med hjälp av Victor Stinner i bpo-22524.)
I Windows finns nu ett nytt attribut stat_result.st_file_attributes
. Det motsvarar medlemmen dwFileAttributes
i strukturen BY_HANDLE_FILE_INFORMATION
som returneras av GetFileInformationByHandle()
. (Bidrag från Ben Hoyt i bpo-21719.)
Funktionen urandom()
använder nu syscallen getrandom()
på Linux 3.17 eller nyare och getentropy()
på OpenBSD 5.6 eller nyare, vilket tar bort behovet av att använda /dev/urandom
och undviker fel på grund av potentiell uttömning av filbeskrivare. (Bidrag från Victor Stinner i bpo-22181.)
Nya funktionerna get_blocking()
och set_blocking()
gör det möjligt att hämta och ställa in en filbeskrivares blockeringsläge (O_NONBLOCK
.) (Bidrag från Victor Stinner i bpo-22054.)
Funktionerna truncate()
och ftruncate()
stöds nu i Windows. (Bidrag från Steve Dower i bpo-23668.)
Det finns en ny funktion os.path.commonpath()
som returnerar den längsta gemensamma sub-sökvägen för varje passerat sökvägsnamn. Till skillnad från funktionen os.path.commonprefix()
returnerar den alltid en giltig sökväg:
>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'
>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'
(Bidrag från Rafik Draoui och Serhiy Storchaka i bpo-10395.)
sökväg¶
Den nya metoden Path.samefile()
kan användas för att kontrollera om sökvägen pekar på samma fil som en annan sökväg, som kan vara antingen ett annat Path
-objekt eller en sträng:
>>> import pathlib
>>> p1 = pathlib.Path('/etc/hosts')
>>> p2 = pathlib.Path('/etc/../etc/hosts')
>>> p1.samefile(p2)
True
(Bidrag från Vajrasky Kok och Antoine Pitrou i bpo-19775.)
Metoden Path.mkdir()
accepterar nu ett nytt valfritt exist_ok argument för att matcha mkdir -p
och os.makedirs()
funktionalitet. (Bidrag från Berker Peksag i bpo-21539.)
Det finns en ny Path.expanduser()
-metod för att expandera prefixen ~
och ~user
. (Bidrag från Serhiy Storchaka och Claudiu Popa i bpo-19776.)
En ny Path.home()
-klassmetod kan användas för att hämta en Path
-instans som representerar användarens hemkatalog. (Bidrag från Victor Salgado och Mayank Tripathi i bpo-19777.)
Nya metoder Path.write_text()
, Path.read_text()
, Path.write_bytes()
, Path.read_bytes()
för att förenkla läs- och skrivoperationer på filer.
Följande kodavsnitt kommer att skapa eller skriva om den befintliga filen ~/spam42
:
>>> import pathlib
>>> p = pathlib.Path('~/spam42')
>>> p.expanduser().write_text('ham')
3
(Bidrag från Christopher Welborn i bpo-20218.)
gurka¶
Nästlade objekt, t.ex. obundna metoder eller nästlade klasser, kan nu betas med pickle protocols som är äldre än protokollversion 4. Protokollversion 4 stöder redan dessa fall. (Bidrag från Serhiy Storchaka i bpo-23611.)
poplib¶
Ett nytt POP3.utf8()
-kommando aktiverar RFC 6856-stöd (Internationaliserad e-post), om en POP-server stöder det. (Bidrag från Milan OberKirch i bpo-21804.)
re¶
Referenser och villkorliga referenser till grupper med fast längd är nu tillåtna i 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'>
(Bidrag från Serhiy Storchaka i bpo-9179.)
Antalet fångande grupper i reguljära uttryck är inte längre begränsat till 100. (Bidrag från Serhiy Storchaka i bpo-22437.)
Funktionerna sub()
och subn()
ersätter nu omatchade grupper med tomma strängar istället för att skapa ett undantag. (Bidrag från Serhiy Storchaka i bpo-1519638.)
Undantagen i re.error
har nya attribut, msg
, pattern
, pos
, lineno
och colno
, som ger bättre kontextinformation om felet:
>>> re.compile("""
... (?x)
... .++
... """)
Traceback (most recent call last):
...
sre_constants.error: multiple repeat at position 16 (line 3, column 7)
(Bidrag från Serhiy Storchaka i bpo-22578.)
läslinje¶
En ny append_history_file()
-funktion kan användas för att lägga till det angivna antalet efterföljande element i historiken till den angivna filen. (Bidrag från Bruno Cauet i bpo-22940.)
väljare¶
Den nya DevpollSelector
stöder effektiv /dev/poll
polling på Solaris. (Bidrag från Giampaolo Rodola’ i bpo-18931.)
shutil¶
Funktionen move()
accepterar nu ett copy_function-argument, vilket gör att t.ex. funktionen copy()
kan användas istället för standardfunktionen copy2()
om det finns ett behov av att ignorera filmetadata vid flyttning. (Bidrag från Claudiu Popa i bpo-19840.)
Funktionen make_archive()
har nu stöd för formatet xztar. (Bidrag från Serhiy Storchaka i bpo-5411.)
signal¶
I Windows har funktionen set_wakeup_fd()
nu även stöd för socket-handtag. (Bidrag från Victor Stinner i bpo-22018.)
Olika SIG*
-konstanter i modulen signal`
har konverterats till Enums <enum>`
. Detta gör att meningsfulla namn kan skrivas ut under felsökning, istället för heltal ”magiska siffror”. (Bidrag från Giampaolo Rodola’ i bpo-21076.)
smtpd¶
Både klasserna SMTPServer
och SMTPChannel
accepterar nu ett decode_data nyckelordsargument för att avgöra om DATA
-delen av SMTP-transaktionen avkodas med hjälp av "utf-8"
-codec eller istället tillhandahålls till metoden SMTPServer.process_message()
som en byte-sträng. Standardvärdet är True
av bakåtkompatibilitetsskäl, men kommer att ändras till False
i Python 3.6. Om decode_data är satt till False
, måste metoden process_message
vara förberedd för att acceptera nyckelordsargument. (Bidrag från Maciej Szulik i bpo-19662.)
Klassen SMTPServer
annonserar nu tillägget 8BITMIME
(RFC 6152) om decode_data har satts till True
. Om klienten anger BODY=8BITMIME
på kommandot MAIL
, skickas det till SMTPServer.process_message()
via nyckelordet mail_options. (Bidrag från Milan Oberkirch och R. David Murray i bpo-21795.)
Klassen SMTPServer
stöder nu även tillägget SMTPUTF8
(RFC 6531: Internationalized Email). Om klienten specificerade SMTPUTF8 BODY=8BITMIME
på kommandot MAIL
, skickas de till SMTPServer.process_message()
via nyckelordet mail_options. Det är metoden process_message
ansvar att korrekt hantera SMTPUTF8
data. (Bidrag från Milan Oberkirch i bpo-21725.)
Det är nu möjligt att, direkt eller via namnupplösning, ange IPv6-adresser i SMTPServer
-konstruktören och få den att ansluta framgångsrikt. (Bidrag från Milan Oberkirch i bpo-14758.)
smtplib¶
En ny SMTP.auth()
-metod ger ett bekvämt sätt att implementera anpassade autentiseringsmekanismer. (Bidrag från Milan Oberkirch i bpo-15014.)
Metoden SMTP.set_debuglevel()
accepterar nu ytterligare en debug-nivå (2), vilket möjliggör tidsstämplar i debug-meddelanden. (Bidrag från Gavin Chappell och Maciej Szulik i bpo-16914.)
Både metoderna SMTP.sendmail()
och SMTP.send_message()
stöder nu RFC 6531 (SMTPUTF8). (Bidrag från Milan Oberkirch och R. David Murray i bpo-22027.)
sndhdr¶
Funktionerna what()
och whathdr()
returnerar nu en namedtuple()
. (Bidrag från Claudiu Popa i bpo-18615.)
kortplats¶
Funktioner med timeouts använder nu en monoton klocka istället för en systemklocka. (Bidrag från Victor Stinner i bpo-22043.)
En ny socket.sendfile()
-metod gör det möjligt att skicka en fil över en socket med hjälp av den högpresterande os.sendfile()
-funktionen på UNIX, vilket resulterar i att uppladdningar blir 2 till 3 gånger snabbare än när man använder vanlig socket.send()
. (Bidrag från Giampaolo Rodola’ i bpo-17552.)
Metoden socket.sendall()
återställer inte längre timeouten för uttaget varje gång byte tas emot eller skickas. Socket timeout är nu den maximala totala tiden det tar att skicka all data. (Bidrag från Victor Stinner i bpo-23853.)
Argumentet backlog i metoden socket.listen()
är nu valfritt. Som standard är det satt till SOMAXCONN
eller till 128
, beroende på vilket som är minst. (Bidrag från Charles-François Natali i bpo-21455.)
ssl¶
Stöd för BIO-minne¶
(Bidrag från Geert Jansen i bpo-21965.)
Den nya klassen SSLObject
har lagts till för att ge stöd för SSL-protokoll i de fall då nätverks-I/O-funktionerna i SSLSocket
inte är nödvändiga eller inte är optimala. SSLObject
representerar en SSL-protokollinstans, men implementerar inte några nätverks-I/O-metoder utan tillhandahåller istället ett minnesbuffertgränssnitt. Den nya MemoryBIO
-klassen kan användas för att skicka data mellan Python och en SSL-protokollinstans.
BIO SSL-stödet för minne är främst avsett att användas i ramverk som implementerar asynkron I/O för vilka SSLSocket
beredskapsmodell (”select/poll”) är ineffektiv.
En ny SSLContext.wrap_bio()
-metod kan användas för att skapa en ny SSLObject
-instans.
Stöd för förhandling av protokoll i applikationslager¶
(Bidrag från Benjamin Peterson i bpo-20188.)
Där OpenSSL-stöd finns, implementerar modulen ssl
nu TLS-tillägget Application-Layer Protocol Negotiation enligt beskrivningen i RFC 7301.
Den nya SSLContext.set_alpn_protocols()
kan användas för att ange vilka protokoll ett uttag ska annonsera under TLS-handskakningen.
Den nya SSLSocket.selected_alpn_protocol()
returnerar det protokoll som valdes under TLS-handskakningen. Flaggan HAS_ALPN
anger om ALPN-stöd finns.
Övriga förändringar¶
Det finns en ny SSLSocket.version()
-metod för att fråga den faktiska protokollversionen som används. (Bidrag från Antoine Pitrou i bpo-20421.)
Klassen SSLSocket
implementerar nu en SSLSocket.sendfile()
metod. (Bidrag från Giampaolo Rodola’ i bpo-17552.)
Metoden SSLSocket.send()
ger nu upphov till antingen undantaget ssl.SSLWantReadError
eller ssl.SSLWantWriteError
på ett icke-blockerande uttag om åtgärden skulle blockera. Tidigare skulle den returnera 0
. (Bidrag från Nikolaus Rath i bpo-20951.)
Funktionen cert_time_to_seconds()
tolkar nu inmatad tid som UTC och inte som lokal tid, enligt RFC 5280. Dessutom är returvärdet alltid en int
. (Bidrag från Akira Li i bpo-19940.)
Nya metoderna SSLObject.shared_ciphers()
och SSLSocket.shared_ciphers()
returnerar listan över chiffer som skickas av klienten under handskakningen. (Bidrag från Benjamin Peterson i bpo-23186.)
Metoderna SSLSocket.do_handshake()
, SSLSocket.read()
, SSLSocket.shutdown()
, och SSLSocket.write()
metoderna i SSLSocket
klassen återställer inte längre socket timeout varje gång byte tas emot eller skickas. Socket timeout är nu den maximala totala varaktigheten för metoden. (Bidrag från Victor Stinner i bpo-23853.)
Funktionen match_hostname()
stöder nu matchning av IP-adresser. (Bidrag från Antoine Pitrou i bpo-23239.)
sqlite3¶
Klassen Row
har nu fullt stöd för sekvensprotokollet, i synnerhet reversed()
iteration och slice-indexering. (Bidrag från Claudiu Popa i bpo-10203; av Lucas Sinclair, Jessica McKellar och Serhiy Storchaka i bpo-13583.)
delprocess¶
Den nya funktionen run()
har lagts till. Den kör det angivna kommandot och returnerar ett CompletedProcess
-objekt, som beskriver en avslutad process. Det nya API:et är mer konsekvent och är det rekommenderade tillvägagångssättet för att anropa subprocesser i Python-kod som inte behöver upprätthålla kompatibilitet med tidigare Python-versioner. (Bidrag från Thomas Kluyver i bpo-23342.)
Exempel:
>>> 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')
system¶
En ny set_coroutine_wrapper()
-funktion gör det möjligt att ställa in en global hook som kommer att anropas när en coroutine object skapas av en async def
-funktion. En motsvarande get_coroutine_wrapper()
kan användas för att erhålla en för närvarande inställd wrapper. Båda funktionerna är provisional och är endast avsedda för felsökningsändamål. (Bidrag från Yury Selivanov i bpo-24017.)
En ny is_finalizing()
-funktion kan användas för att kontrollera om Python-tolken stänger ner. (Bidrag från Antoine Pitrou i bpo-22696.)
sysconfig¶
Namnet på katalogen för användarskript i Windows innehåller nu de två första komponenterna i Python-versionen. (Bidrag från Paul Moore i bpo-23437.)
tarfil¶
Argumentet mode i funktionen open()
accepterar nu "x"
för att begära exklusiv skapelse. (Bidrag från Berker Peksag i bpo-21717.)
Metoderna TarFile.extractall()
och TarFile.extract()
tar nu ett nyckelordsargument numeric_owner. Om det sätts till True
kommer de extraherade filerna och katalogerna att ägas av de numeriska uid
och gid
från tarfilen. Om inställningen är False
(standard och beteendet i versioner före 3.5) kommer de att ägas av den namngivna användaren och gruppen i tarfilen. (Bidrag från Michael Vogt och Eric Smith i bpo-23193.)
TarFile.list()
accepterar nu ett valfritt members nyckelordsargument som kan ställas in till en delmängd av listan som returneras av TarFile.getmembers()
. (Bidrag från Serhiy Storchaka i bpo-21549.)
gängning¶
Både metoderna Lock.acquire()
och RLock.acquire()
använder nu en monoton klocka för timeout-hantering. (Bidrag från Victor Stinner i bpo-22043.)
tid¶
Funktionen monotonic()
är nu alltid tillgänglig. (Bidrag från Victor Stinner i bpo-22043.)
tidsinställning¶
Ett nytt kommandoradsalternativ -u
eller --unit=U
kan användas för att ange tidsenheten för timerutmatningen. Alternativ som stöds är usec
, msec
eller sec
. (Bidrag från Julian Gindi i bpo-18983.)
Funktionen timeit()
har en ny globals-parameter för att ange namnrymden där koden kommer att köras. (Bidrag från Ben Roberts i bpo-2527.)
tkinter¶
Modulen tkinter._fix
som används för att ställa in Tcl/Tk-miljön i Windows har ersatts av en privat funktion i modulen _tkinter
som inte gör några permanenta ändringar i miljövariabler. (Bidrag från Zachary Ware i bpo-20035.)
spårning¶
Nya walk_stack()
och walk_tb()
funktioner för att enkelt korsa frame och traceback objects. (Bidrag från Robert Collins i bpo-17911.)
Nya lättviktsklasser: TracebackException
, StackSummary
, och FrameSummary
. (Bidrag från Robert Collins i bpo-17911.)
Både funktionerna print_tb()
och print_stack()
stöder nu negativa värden för argumentet limit. (Bidrag från Dmitry Kazakov i bpo-22619.)
typer¶
En ny coroutine()
-funktion för att omvandla generator och generatorliknande
-objekt till awaitables. (Bidrag från Yury Selivanov i bpo-24017.)
En ny typ kallad CoroutineType
, som används för coroutine-objekt som skapas av async def
-funktioner. (Bidrag från Yury Selivanov i bpo-24400.)
unicodedata¶
Modulen unicodedata
använder nu data från Unicode 8.0.0.
unittest¶
Metoden TestLoader.loadTestsFromModule()
accepterar nu ett nyckelordsspecifikt argument pattern som skickas till load_tests
som det tredje argumentet. Hittade paket kontrolleras nu för load_tests
oavsett om deras sökväg matchar pattern, eftersom det är omöjligt för ett paketnamn att matcha standardmönstret. (Bidrag från Robert Collins och Barry A. Warsaw i bpo-16662.)
Unittest discovery errors visas nu i attributet TestLoader.errors
i instansen TestLoader
. (Bidrag från Robert Collins i bpo-19746.)
Ett nytt kommandoradsalternativ --locals
för att visa lokala variabler i spårningar. (Bidrag från Robert Collins i bpo-22936.)
unittest.mock¶
Klassen Mock
har följande förbättringar:
Klassens konstruktor har en ny unsafe parameter, som gör att mock-objekt ger upphov till
AttributeError
på attributnamn som börjar med"assert"
. (Bidrag från Kushal Das i bpo-21238.)En ny
Mock.assert_not_called()
metod för att kontrollera om mock-objektet anropades. (Bidrag från Kushal Das i bpo-21262.)
Klassen MagicMock
stöder nu operatorerna __truediv__()
, __divmod__()
och __matmul__()
. (Bidrag från Johannes Baiter i bpo-20968, och Håkan Lövdahl i bpo-23581 och bpo-23568.)
Det är inte längre nödvändigt att uttryckligen skicka create=True
till patch()
-funktionen när man patchar inbyggda namn. (Bidrag från Kushal Das i bpo-17660.)
urllib¶
En ny request.HTTPPasswordMgrWithPriorAuth
gör det möjligt att hantera HTTP Basic Authentication-autentiseringsuppgifter för att eliminera onödig hantering av 401
-svar, eller för att villkorslöst skicka autentiseringsuppgifter vid den första begäran för att kommunicera med servrar som returnerar ett 404
-svar istället för ett 401
-svar om Authorization
-rubriken inte skickas. (Bidrag från Matej Cepl i bpo-19494 och Akshit Khurana i bpo-7159.)
Ett nytt quote_via-argument för funktionen parse.urlencode()
ger ett sätt att kontrollera kodningen av frågans delar om det behövs. (Bidrag från Samwyse och Arnon Yaari i bpo-13866.)
Funktionen request.urlopen()
accepterar ett ssl.SSLContext
-objekt som ett context-argument, vilket kommer att användas för HTTPS-anslutningen. (Bidrag från Alex Gaynor i bpo-22366.)
parse.urljoin()
uppdaterades för att använda RFC 3986 semantiken för upplösning av relativa URL:er, snarare än RFC 1808 och RFC 2396. (Bidrag från Demian Brecht och Senthil Kumaran i bpo-22118.)
wsgiref¶
Argumentet headers i klasskonstruktören headers.Headers
är nu valfritt. (Bidrag från Pablo Torres Navarrete och SilentGhost i bpo-5800.)
xmlrpc¶
Klassen client.ServerProxy
stöder nu protokollet context manager. (Bidrag från Claudiu Popa i bpo-20627.)
Konstruktorn client.ServerProxy
accepterar nu en valfri instans av ssl.SSLContext
. (Bidrag från Alex Gaynor i bpo-22960.)
xml.sax¶
SAX-parsers stöder nu en teckenström av xmlreader.InputSource
-objektet. (Bidrag från Serhiy Storchaka i bpo-2175.)
parseString()
accepterar nu en str
-instans. (Bidrag från Serhiy Storchaka i bpo-10590.)
zip-fil¶
ZIP-utdata kan nu skrivas till oseekbara strömmar. (Bidrag från Serhiy Storchaka i bpo-23252.)
Argumentet mode i metoden ZipFile.open()
accepterar nu "x"
för att begära exklusiv skapelse. (Bidrag från Serhiy Storchaka i bpo-21717.)
Andra ändringar på modulnivå¶
Många funktioner i modulerna mmap
, ossaudiodev
, socket
, ssl
och codecs
accepterar nu skrivbara bytesliknande objekt. (Bidrag från Serhiy Storchaka i bpo-23001.)
Optimeringar¶
Funktionen os.walk()
har snabbats upp med 3-5 gånger på POSIX-system och med 7-20 gånger på Windows. Detta gjordes med hjälp av den nya funktionen os.scandir()
, som exponerar filinformation från de underliggande systemanropen readdir
eller FindFirstFile
/FindNextFile
. (Bidrag från Ben Hoyt med hjälp av Victor Stinner i bpo-23605.)
Konstruktionen av bytes(int)
(fylld med nollbytes) är snabbare och använder mindre minne för stora objekt. calloc()
används istället för malloc()
för att allokera minne för dessa objekt. (Bidrag från Victor Stinner i bpo-21233.)
Vissa operationer på ipaddress
IPv4Network
och IPv6Network
har blivit kraftigt påskyndade, såsom subnets()
, supernet()
, summarize_address_range()
, collapse_addresses()
. Hastigheten kan variera från 3 till 15 gånger. (Bidrag från Antoine Pitrou, Michel Albert och Markus i bpo-21486, bpo-21487, bpo-20826, bpo-23266.)
Pickling av ipaddress
-objekt har optimerats för att ge betydligt mindre utdata. (Bidrag från Serhiy Storchaka i bpo-23133.)
Många operationer på io.BytesIO
är nu 50% to 100% faster. (Bidrag från Serhiy Storchaka i bpo-15381 och David Wilson i bpo-22003.)
Funktionen marshal.dumps()
är nu snabbare: 65–85% med version 3 och 4, 20–25% med version 0 till 2 på typiska data, och upp till 5 gånger i bästa fall. (Bidrag från Serhiy Storchaka i bpo-20416 och bpo-23344.)
UTF-32-kodaren är nu 3 till 7 gånger snabbare. (Bidrag från Serhiy Storchaka i bpo-15027.)
Reguljära uttryck analyseras nu upp till 10% faster. (Bidrag från Serhiy Storchaka i bpo-19380.)
Funktionen json.dumps()
optimerades för att köras med ensure_ascii=False
lika snabbt som med ensure_ascii=True
. (Bidrag från Naoki Inada i bpo-23206.)
Funktionerna PyObject_IsInstance()
och PyObject_IsSubclass()
har snabbas upp i det vanliga fallet att det andra argumentet har type
som sin metaklass. (Bidrag från Georg Brandl i bpo-22540.)
Cachelagringen av metoder förbättrades något, vilket gav upp till 5% p% bättre prestanda i vissa benchmarks. (Bidrag från Antoine Pitrou i bpo-22847.)
Objekt från modulen random
använder nu 50% less minne i 64-bitarsversioner. (Bidrag från Serhiy Storchaka i bpo-23488.)
Anropen till property()
getter är upp till 25% faster. (Bidrag från Joe Jevnik i bpo-23910.)
Instantiering av fractions.Fraction
är nu upp till 30% faster. (Bidrag från Stefan Behnel i bpo-22464.)
Strängmetoderna find()
, rfind()
, split()
, partition()
och strängoperatorn in
är nu betydligt snabbare för sökning av substrängar med 1 tecken. (Bidrag från Serhiy Storchaka i bpo-23573.)
Ändringar i Build och C API¶
Nya calloc
-funktioner har lagts till:
(Bidrag från Victor Stinner i bpo-21233.)
Nya hjälpfunktioner för kodning/avkodning:
Py_DecodeLocale()
(ersatte_Py_char2wchar()
)),Py_EncodeLocale()
(ersatte_Py_wchar2char()
)).
(Bidrag från Victor Stinner i bpo-18395.)
En ny PyCodec_NameReplaceErrors()
-funktion för att ersätta unicode-kodningsfelet med \N{...}
escapes. (Bidrag från Serhiy Storchaka i bpo-19676.)
En ny PyErr_FormatV()
funktion som liknar PyErr_Format()
, men accepterar ett va_list
argument. (Bidrag från Antoine Pitrou i bpo-18711.)
Ett nytt PyExc_RecursionError
undantag. (Bidrag från Georg Brandl i bpo-19235.)
Nya PyModule_FromDefAndSpec()
, PyModule_FromDefAndSpec2()
, och PyModule_ExecDef()
funktioner införda av PEP 489 – initialisering av tilläggsmoduler i flera faser. (Bidrag från Petr Viktorin i bpo-24268.)
Nya PyNumber_MatrixMultiply()
och PyNumber_InPlaceMatrixMultiply()
funktioner för att utföra matrismultiplikation. (Bidrag från Benjamin Peterson i bpo-21176. Se även PEP 465 för detaljer)
Platsen PyTypeObject.tp_finalize
är nu en del av det stabila ABI:et.
Windows-versioner kräver nu Microsoft Visual C++ 14.0, som finns tillgängligt som en del av Visual Studio 2015.
Tilläggsmoduler innehåller nu en plattformsinformationstagg i sitt filnamn på vissa plattformar (taggen är valfri och CPython importerar tillägg utan den, men om taggen finns och inte stämmer överens kommer tillägget inte att laddas):
På Linux slutar filnamn för tilläggsmoduler med
.cpython-<major><minor>m-<architecture>-<os>.pyd
:<major>
är huvudnumret för Python-versionen; för Python 3.5 är detta3
.<minor>
är det mindre numret på Python-versionen; för Python 3.5 är detta5
.<architecture>
är den hårdvaruarkitektur som tilläggsmodulen byggdes för att köras på. Det vanligaste är antingeni386
för 32-bitars Intel-plattformar ellerx86_64
för 64-bitars Intel (och AMD)-plattformar.<os>
är alltidlinux-gnu
, förutom för tillägg som är byggda för att prata med 32-bitars ABI på 64-bitars plattformar, i vilket fall det ärlinux-gnu32
(och<architecture>
kommer att varax86_64
).
I Windows slutar filnamnen för tilläggsmoduler med
<debug>.cp<major><minor>-<platform>.pyd
:<major>
är huvudnumret för Python-versionen; för Python 3.5 är detta3
.<minor>
är det mindre numret på Python-versionen; för Python 3.5 är detta5
.<platform>
är den plattform som tilläggsmodulen byggdes för, antingenwin32
för Win32,win_amd64
för Win64,win_ia64
för Windows Itanium 64 ochwin_arm
för Windows on ARM.Om den är byggd i debugläge kommer
<debug>
att vara_d
, annars kommer den att vara tom.
På OS X-plattformar slutar filnamnen för tilläggsmoduler nu med
-darwin.so
.På alla andra plattformar är filnamnen för tilläggsmoduler desamma som de var med Python 3.4.
Föråldrat¶
Nya nyckelord¶
async
och await
rekommenderas inte att användas som variabel-, klass-, funktions- eller modulnamn. De introducerades av PEP 492 i Python 3.5 och kommer att bli riktiga nyckelord i Python 3.7.
Föråldrat Python-beteende¶
Om man väcker StopIteration
-undantaget inuti en generator kommer det nu att generera en tyst PendingDeprecationWarning
, som kommer att bli en icke-tyst deprecation-varning i Python 3.6 och kommer att utlösa ett RuntimeError
i Python 3.7. Se PEP 479: Ändra StopIteration-hanteringen i generatorer för detaljer.
Operativsystem som inte stöds¶
Windows XP stöds inte längre av Microsoft, vilket innebär att CPython 3.5 enligt PEP 11 inte längre stöds officiellt på detta operativsystem.
Föråldrade Python-moduler, -funktioner och -metoder¶
Modulen formatter
har nu blivit helt föråldrad och är fortfarande planerad att tas bort i Python 3.6.
Funktionen asyncio.async()
är utfasad till förmån för ensure_future()
.
Modulen smtpd
har tidigare alltid avkodat DATA-delen av e-postmeddelanden med hjälp av codec utf-8
. Detta kan nu kontrolleras med det nya nyckelordet decode_data i SMTPServer
. Standardvärdet är True
, men detta standardvärde är föråldrat. Ange nyckelordet decode_data med ett lämpligt värde för att undvika deprecation-varningen.
Att direkt tilldela värden till key
, value
och coded_value
av http.cookies.Morsel
-objekt är föråldrat. Använd istället metoden set()
. Dessutom är den odokumenterade parametern LegalChars i set()
föråldrad och ignoreras nu.
Att skicka en formatsträng som nyckelordsargument format_string till format()
-metoden i string.Formatter
-klassen har utgått. (Bidrag från Serhiy Storchaka i bpo-23671.)
Funktionerna platform.dist()
och platform.linux_distribution()
är nu föråldrade. Linuxdistributioner använder för många olika sätt att beskriva sig själva, så funktionaliteten lämnas till ett paket. (Bidrag från Vajrasky Kok och Berker Peksag i bpo-1322.)
De tidigare odokumenterade metoderna from_function
och from_builtin
i inspect.Signature
är avförda. Använd den nya Signature.from_callable()
-metoden istället. (Bidrag från Yury Selivanov i bpo-24248.)
Funktionen inspect.getargspec()
är föråldrad och planeras att tas bort i Python 3.6. (Se bpo-20438 för detaljer.)
Funktionerna inspect
getfullargspec()
, getcallargs()
och formatargspec()
har utgått till förmån för API:t inspect.signature()
. (Bidrag från Yury Selivanov i bpo-20438.)
funktionerna getargvalues()
och formatargvalues()
markerades oavsiktligt som föråldrade i och med lanseringen av Python 3.5.0.
Användning av flaggan re.LOCALE
med str-mönster eller re.ASCII
är nu föråldrad. (Bidrag från Serhiy Storchaka i bpo-22407.)
Användning av oigenkända specialsekvenser bestående av '\'
och en ASCII-bokstav i mönster för reguljära uttryck och ersättningsmönster ger nu upphov till en varning för föråldring och kommer att förbjudas i Python 3.6. (Bidrag från Serhiy Storchaka i bpo-23622.)
Det odokumenterade och inofficiella use_load_tests standardargumentet i metoden unittest.TestLoader.loadTestsFromModule()
är nu föråldrat och ignoreras. (Bidrag från Robert Collins och Barry A. Warsaw i bpo-16662.)
Borttagen¶
Borttagning av API och funktioner¶
Följande föråldrade och tidigare utfasade API:er och funktioner har tagits bort:
Attributet
__version__
har tagits bort från e-postpaketet. E-postkoden har inte levererats separat från stdlib på länge och strängen__version__
har inte uppdaterats under de senaste utgåvorna.Den interna klassen
Netrc
i modulenftplib
var föråldrad i 3.4 och har nu tagits bort. (Bidrag från Matt Chaput i bpo-6623.)Konceptet med
.pyo
-filer har tagits bort.Klassen JoinableQueue i den provisoriska modulen
asyncio
var föråldrad i 3.4.4 och är nu borttagen. (Bidrag från A. Jesse Jiryu Davis i bpo-23464.)
Portning till Python 3.5¶
I det här avsnittet listas tidigare beskrivna ändringar och andra buggfixar som kan kräva ändringar i din kod.
Förändringar i Pythons beteende¶
På grund av ett förbiseende accepterade tidigare Python-versioner felaktigt följande syntax:
f(1 för x i [1], *args) f(1 för x i [1], **kwargs)
Python 3.5 utlöser nu korrekt ett
SyntaxError
, eftersom generatoruttryck måste sättas inom parentes om de inte är det enda argumentet till en funktion.
Ändringar i Python API¶
PEP 475: Systemanrop återupptas nu när de avbryts av en signal istället för att ge upphov till
InterruptedError
om Pythons signalhanterare inte ger upphov till ett undantag.Före Python 3.5 ansågs ett
datetime.time
-objekt vara falskt om det representerade midnatt i UTC. Detta beteende ansågs obskyrt och felbenäget och har tagits bort i Python 3.5. Se bpo-13936 för fullständiga detaljer.Metoden
ssl.SSLSocket.send()
ger nu antingenssl.SSLWantReadError
ellerssl.SSLWantWriteError
på en icke-blockerande socket om operationen skulle blockera. Tidigare skulle den returnera0
. (Bidrag från Nikolaus Rath i bpo-20951.)Generatorernas attribut
__name__
anges nu utifrån funktionsnamnet istället för kodnamnet. Användgen.gi_code.co_name
för att hämta kodnamnet. Generatorer har också ett nytt attribut__qualname__
, det kvalificerade namnet, som nu används för att representera en generator (repr(gen)
). (Bidrag från Victor Stinner i bpo-21205.)Det föråldrade läget och argumentet ”strict” i
HTMLParser
,HTMLParser.error()
och undantagetHTMLParserError
har tagits bort. (Bidrag från Ezio Melotti i bpo-15114.) Argumentet convert_charrefs iHTMLParser
är nuTrue
som standard. (Bidrag från Berker Peksag i bpo-21047.)Även om det inte formellt är en del av API:et, är det värt att notera för portningsändamål (dvs: fixa tester) att felmeddelanden som tidigare var av formen ”’sometype’ stöder inte buffertprotokollet” nu är av formen ”en bytesliknande objekt krävs, inte ’sometype’”. (Bidrag från Ezio Melotti i bpo-16518.)
Om den aktuella katalogen är inställd på en katalog som inte längre finns kommer
FileNotFoundError
inte längre att uppstå och istället kommerfind_spec()
att returneraNone
utan att cachelagraNone
isys.path_importer_cache
, vilket skiljer sig från det typiska fallet (bpo-22834).HTTP-statuskod och meddelanden från
http.client
ochhttp.server
omarbetades till ett gemensamtHTTPStatus
enum. Värdena ihttp.client
ochhttp.server
förblir tillgängliga för bakåtkompatibilitet. (Bidrag från Demian Brecht i bpo-21793.)När en importladdare definierar
importlib.machinery.Loader.exec_module()
förväntas den nu också definieracreate_module()
(ger upphov till enDeprecationWarning
nu, kommer att vara ett fel i Python 3.6). Om laddaren ärver frånimportlib.abc.Loader
så finns det inget att göra, annars är det bara att definieracreate_module()
så att den returnerarNone
. (Bidrag från Brett Cannon i bpo-23014.)Funktionen
re.split()
ignorerade alltid tomma mönstermatchningar, så mönstret"x*"
fungerade på samma sätt som"x+"
, och mönstret"\b"
fungerade aldrig. Nu gerre.split()
upphov till en varning om mönstret kan matcha en tom sträng. För kompatibilitet, använd mönster som aldrig matchar en tom sträng (t.ex."x+"
istället för"x*"
). Mönster som bara kunde matcha en tom sträng (t.ex."\b"
) ger nu upphov till ett fel. (Bidrag från Serhiy Storchaka i bpo-22818.)Det diktliknande gränssnittet
http.cookies.Morsel
har gjorts självkonsistent: Morsel-jämförelse tar nu hänsyn tillkey
ochvalue
,copy()
resulterar nu i enMorsel
-instans snarare än endict
, ochupdate()
kommer nu att ge upphov till ett undantag om någon av nycklarna i uppdateringsordlistan är ogiltig. Dessutom är den odokumenterade parametern LegalChars iset()
föråldrad och ignoreras nu. (Bidrag från Demian Brecht i bpo-2211.)PEP 488 har tagit bort
.pyo
-filer från Python och infört den valfria taggenopt-
i.pyc
-filnamn.importlib.util.cache_from_source()
har fått en optimization -parameter för att hjälpa till att kontrollera taggenopt-
. På grund av detta är parametern debug_override i funktionen nu föråldrad..pyo
-filer stöds inte längre som filargument till Python-tolken och har därför ingen funktion när de distribueras separat (dvs. distribution av källkod utan källkod). Eftersom det magiska talet för bytecode har ändrats i Python 3.5 är alla gamla.pyo
-filer från tidigare versioner av Python ogiltiga, oavsett denna PEP.Modulen
socket
exporterar nu konstantenCAN_RAW_FD_FRAMES
på linux 3.6 och senare.Funktionen
ssl.cert_time_to_seconds()
tolkar nu inmatad tid som UTC och inte som lokal tid, enligt RFC 5280. Dessutom är returvärdet alltid enint
. (Bidrag från Akira Li i bpo-19940.)Verktyget
pygettext.py
använder nu standardformatet +NNNN för tidszoner i rubriken POT-Creation-Date.Modulen
smtplib
använder nusys.stderr
i stället för den tidigare variabelnstderr
på modulnivå för felsökningsutdata. Om ditt (test)program är beroende av att du patchar variabeln på modulnivå för att fånga upp felsökningsutdata, måste du uppdatera det så att det fångar upp sys.stderr istället.Metoderna
str.startswith()
ochstr.endswith()
returnerar inte längreTrue
när de hittar den tomma strängen och indexen är helt utanför intervallet. (Bidrag från Serhiy Storchaka i bpo-24284.)Funktionen
inspect.getdoc()
returnerar nu dokumentationssträngar som ärvts från basklasser. Dokumentationssträngar behöver inte längre dupliceras om den ärvda dokumentationen är lämplig. För att undertrycka en ärvd sträng måste en tom sträng anges (eller så kan dokumentationen fyllas i). Denna ändring påverkar utdata från modulenpydoc
och funktionenhelp()
. (Bidrag från Serhiy Storchaka i bpo-15582.)Nästade
functools.partial()
-anrop är nu utplattade. Om du förlitade dig på det tidigare beteendet kan du nu antingen lägga till ett attribut till ettfunctools.partial()
-objekt eller så kan du skapa en underklass avfunctools.partial()
. (Bidrag från Alexander Belopolsky i bpo-7830.)
Förändringar i C API¶
Den odokumenterade
format
-medlemmen i den (icke-publika)PyMemoryViewObject
-strukturen har tagits bort. Alla tillägg som förlitar sig på de relevanta delarna imemoryobject.h
måste byggas om.Strukturen
PyMemAllocator
döptes om tillPyMemAllocatorEx
och ett nytt fältcalloc
lades till.Borttaget icke-dokumenterat makro
PyObject_REPR()
som läckte referenser. Använd formattecknet%R
iPyUnicode_FromFormat()
-liknande funktioner för att formatera objektetsrepr()
. (Bidrag från Serhiy Storchaka i bpo-22453.)Eftersom avsaknaden av attributet
__module__
bryter mot pickling och introspektion, utfärdas nu en varning om föråldring för inbyggda typer utan attributet__module__
. Detta kommer att vara ettAttributeError
i framtiden. (Bidrag från Serhiy Storchaka i bpo-20204.)Som en del av implementeringen av PEP 492, ersattes
tp_reserved
slot iPyTypeObject
med entp_as_async
slot. Se Coroutine-objekt för nya typer, strukturer och funktioner.
Viktiga ändringar i Python 3.5.4¶
Nytt byggmål för make regen-all
¶
För att förenkla korskompilering och säkerställa att CPython kan kompileras på ett tillförlitligt sätt utan att det krävs att en befintlig version av Python redan finns tillgänglig, försöker det autotools-baserade byggsystemet inte längre att implicit kompilera om genererade filer baserat på filändringstider.
Istället har ett nytt make regen-all
-kommando lagts till för att tvinga fram regenerering av dessa filer när så önskas (t.ex. efter att en första version av Python redan har byggts baserat på de förgenererade versionerna).
Mer selektiva regenereringsmål definieras också - se Makefile.pre.in för detaljer.
(Bidrag från Victor Stinner i bpo-23404.)
Tillagd i version 3.5.4.
Borttagning av byggmålet make touch
¶
Byggmålet make touch
som tidigare användes för att begära implicit regenerering av genererade filer genom att uppdatera deras modifieringstider har tagits bort.
Det har ersatts av det nya målet make regen-all
.
(Bidrag från Victor Stinner i bpo-23404.)
Ändrad i version 3.5.4.