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() och memoryview.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 av yield 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änder sys.stdin och sys.stdout nu felhanteraren surrogateescape istället för felhanteraren strict. (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:

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  lås
coro 2: håller i låset
coro 1: väntar  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.

Se även

  • Dokumentation för modulen typing

  • PEP 484 – Tips om typ

    PEP skriven av Guido van Rossum, Jukka Lehtosalo och Łukasz Langa; implementerad av Guido van Rossum.

  • PEP 483 – Teorin om typhintar

    PEP skriven av Guido van Rossum

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:

  1. Ignorera InterruptedError.

  2. 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:

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 av bytes med int. (Bidrag från Serhiy Storchaka i bpo-23681.)

  • Nya kazakiska kz1048 och tadzjikiska koi8_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:

Uppdateringar i 3.5.1:

Uppdateringar i 3.5.2:

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 Hjälp ‣ Om IDLE-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:

(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 detta 3.

    • <minor> är det mindre numret på Python-versionen; för Python 3.5 är detta 5.

    • <architecture> är den hårdvaruarkitektur som tilläggsmodulen byggdes för att köras på. Det vanligaste är antingen i386 för 32-bitars Intel-plattformar eller x86_64 för 64-bitars Intel (och AMD)-plattformar.

    • <os> är alltid linux-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 är linux-gnu32 (och <architecture> kommer att vara x86_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 detta 3.

    • <minor> är det mindre numret på Python-versionen; för Python 3.5 är detta 5.

    • <platform> är den plattform som tilläggsmodulen byggdes för, antingen win32 för Win32, win_amd64 för Win64, win_ia64 för Windows Itanium 64 och win_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 modulen ftplib 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 antingen ssl.SSLWantReadError eller ssl.SSLWantWriteError på en icke-blockerande socket om operationen skulle blockera. Tidigare skulle den returnera 0. (Bidrag från Nikolaus Rath i bpo-20951.)

  • Generatorernas attribut __name__ anges nu utifrån funktionsnamnet istället för kodnamnet. Använd gen.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 undantaget HTMLParserError har tagits bort. (Bidrag från Ezio Melotti i bpo-15114.) Argumentet convert_charrefs i HTMLParser är nu True 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 kommer find_spec() att returnera None utan att cachelagra None i sys.path_importer_cache, vilket skiljer sig från det typiska fallet (bpo-22834).

  • HTTP-statuskod och meddelanden från http.client och http.server omarbetades till ett gemensamt HTTPStatus enum. Värdena i http.client och http.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å definiera create_module() (ger upphov till en DeprecationWarning nu, kommer att vara ett fel i Python 3.6). Om laddaren ärver från importlib.abc.Loader så finns det inget att göra, annars är det bara att definiera create_module() så att den returnerar None. (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 ger re.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 till key och value, copy() resulterar nu i en Morsel-instans snarare än en dict, och update() kommer nu att ge upphov till ett undantag om någon av nycklarna i uppdateringsordlistan är ogiltig. Dessutom är den odokumenterade parametern LegalChars i set() 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 taggen opt- i .pyc-filnamn. importlib.util.cache_from_source() har fått en optimization -parameter för att hjälpa till att kontrollera taggen opt-. 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 konstanten CAN_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 en int. (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 nu sys.stderr i stället för den tidigare variabeln stderr 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() och str.endswith() returnerar inte längre True 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 modulen pydoc och funktionen help(). (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 ett functools.partial()-objekt eller så kan du skapa en underklass av functools.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 i memoryobject.h måste byggas om.

  • Strukturen PyMemAllocator döptes om till PyMemAllocatorEx och ett nytt fält calloc lades till.

  • Borttaget icke-dokumenterat makro PyObject_REPR() som läckte referenser. Använd formattecknet %R i PyUnicode_FromFormat()-liknande funktioner för att formatera objektets repr(). (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 ett AttributeError i framtiden. (Bidrag från Serhiy Storchaka i bpo-20204.)

  • Som en del av implementeringen av PEP 492, ersattes tp_reserved slot i PyTypeObject med en tp_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.