Vad är nytt i Python 3.6

Redigerare:

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

I den här artikeln förklaras de nya funktionerna i Python 3.6 jämfört med 3.5. Python 3.6 släpptes den 23 december 2016. Se changelog för en fullständig lista över ändringar.

Se även

PEP 494 - Python 3.6 Utgivningsschema

Sammanfattning – Release highlights

Nya syntaxfunktioner:

  • PEP 498, formaterade stränglitteraler.

  • PEP 515, understrykningstecken i numeriska literaler.

  • PEP 526, syntax för variabelkommentarer.

  • PEP 525, asynkrona generatorer.

  • PEP 530: asynkrona förståelser.

Nya biblioteksmoduler:

Förbättringar av CPython-implementeringen:

Betydande förbättringar i standardbiblioteket:

Förbättringar av säkerheten:

  • Den nya modulen secrets har lagts till för att förenkla genereringen av kryptografiskt starka pseudoslumptal som lämpar sig för hantering av hemligheter som kontoautentisering, tokens och liknande.

  • På Linux blockerar os.urandom() nu tills systemets urandom-entropipool har initialiserats för att öka säkerheten. Se PEP 524 för förklaringen.

  • Modulerna hashlib och ssl har nu stöd för OpenSSL 1.1.0.

  • Standardinställningarna och funktionsuppsättningen för modulen ssl har förbättrats.

  • Modulen hashlib fick stöd för hashalgoritmerna BLAKE2, SHA-3 och SHAKE samt nyckelavledningsfunktionen scrypt().

Förbättringar i Windows:

  • PEP 528 och PEP 529, Windows filsystem och konsolkodning ändras till UTF-8.

  • Startprogrammet py.exe, när det används interaktivt, föredrar inte längre Python 2 framför Python 3 när användaren inte anger någon version (via kommandoradsargument eller en konfigurationsfil). Hanteringen av shebang-rader förblir oförändrad - ”python” hänvisar till Python 2 i det fallet.

  • python.exe och pythonw.exe har markerats som medvetna om långa sökvägar, vilket innebär att sökvägsgränsen på 260 tecken kanske inte längre gäller. Se borttagande av MAX_PATH-begränsningen för mer information.

  • En fil med namnet ._pth kan läggas till för att tvinga fram isolerat läge och fullständigt ange alla sökvägar för att undvika register- och miljöuppslagning. Se dokumentationen för mer information.

  • En python36.zip-fil fungerar nu som ett landmärke för att härleda PYTHONHOME. Se dokumentationen för mer information.

Nya funktioner

PEP 498: Formaterade stränglitteraler

PEP 498 introducerar en ny typ av stränglitteraler: f-strings, eller formaterade stränglitteraler.

Formaterade stränglitteraler har prefixet 'f' och liknar de formatsträngar som accepteras av str.format(). De innehåller ersättningsfält omgivna av hakparenteser. Ersättningsfälten är uttryck som utvärderas vid körning och sedan formateras med hjälp av format()-protokollet:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'

Se även

PEP 498 – Interpolation av bokstavliga strängar.

PEP skrivet och genomfört av Eric V. Smith.

Funktionsdokumentation.

PEP 526: Syntax för variabelannoteringar

PEP 484 introducerade standarden för typannoteringar av funktionsparametrar, även kallat typtips. Denna PEP lägger till syntax till Python för att annotera typerna av variabler inklusive klassvariabler och instansvariabler:

primtal: Lista[int] = []

captain: str # Obs: inget initialt värde!

klass Stjärnskepp:
    statistik: Dict[str, int] = {}

Precis som för funktionsannoteringar lägger Python-tolken inte någon särskild betydelse i variabelannoteringar och lagrar dem endast i attributet __annoteringar__ för en klass eller modul.

I motsats till variabeldeklarationer i statiskt typade språk är målet med annotationssyntaxen att tillhandahålla ett enkelt sätt att ange strukturerade typmetadata för verktyg och bibliotek från tredje part via det abstrakta syntaxträdet och attributet __annotations__.

Se även

PEP 526 – Syntax för variabelannoteringar.

PEP skriven av Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa Roach och Guido van Rossum. Implementerad av Ivan Levkivskyi.

Verktyg som använder eller kommer att använda den nya syntaxen: mypy, pytype, PyCharm, etc.

PEP 515: Underscorer i numeriska bokstäver

PEP 515 lägger till möjligheten att använda understrykningstecken i numeriska literaler för ökad läsbarhet. Till exempel:

>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295

Enstaka understrykningstecken tillåts mellan siffror och efter varje basspecifikator. Ledande, efterföljande eller flera understreck i rad är inte tillåtna.

Språket strängformatering har nu också stöd för alternativet '_' för att signalera att ett understreck används som tusentalsavgränsare för presentationstyper med flyttal och för presentationstypen för heltal 'd'. För heltalspresentationstyperna 'b', 'o', 'x' och 'X' kommer understreck att infogas var 4:e siffra:

>>> '{:_}'.format(1000000)
'1_000_000'
>>> '{:_x}'.format(0xFFFFFFFF)
'ffff_ffff'

Se även

PEP 515 – Understreck i numeriska bokstäver

PEP skriven av Georg Brandl och Serhiy Storchaka.

PEP 525: Asynkrona generatorer

PEP 492 introducerade stöd för inbyggda coroutines och async / await syntax till Python 3.5. En anmärkningsvärd begränsning i Python 3.5-implementeringen är att det inte var möjligt att använda await och yield i samma funktionskropp. I Python 3.6 har denna begränsning tagits bort, vilket gör det möjligt att definiera asynkrona generatorer:

async def ticker(fördröjning, till):
    """Avkastar siffror från 0 till *till* varje *fördröjning* sekund."""
    för i i intervall(till):
        avkastning i
        await asyncio.sleep(fördröjning)

Den nya syntaxen ger snabbare och mer kortfattad kod.

Se även

PEP 525 – Asynkrona generatorer

PEP skrivet och implementerat av Yury Selivanov.

PEP 530: Asynkrona förståelser

PEP 530 lägger till stöd för att använda async for i list-, set-, dict-förståelser och generatoruttryck:

resultat = [i async för i i aiter() if i % 2]

Dessutom stöds await-uttryck i alla typer av förståelser:

resultat = [await fun() for fun in funcs if await condition()]

Se även

PEP 530 – Asynkrona förståelser

PEP skrivet och implementerat av Yury Selivanov.

PEP 487: Enklare anpassning av klassskapande

Det är nu möjligt att anpassa skapandet av underklasser utan att använda en metaklass. Den nya klassmetoden __init_subclass__ kommer att anropas på basklassen när en ny underklass skapas:

klass PluginBase:
    underklasser = []

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.subclasses.append(cls)

klass Plugin1(PluginBase):
    pass

klass Plugin2(PluginBase):
    pass

För att tillåta nollargument super()-anrop att fungera korrekt från __init_subclass__()-implementationer, måste anpassade metaklasser säkerställa att den nya __classcell__-namnrymdsposten sprids till type.__new__ (som beskrivs i Skapa klassobjektet).

Se även

PEP 487 – Enklare anpassning av klassskapande

PEP skrivet och genomfört av Martin Teichmann.

Funktionsdokumentation.

PEP 487: Förbättringar av deskriptorprotokollet

PEP 487 utökar descriptorprotokollet till att omfatta den nya valfria metoden __set_name__(). När en ny klass definieras kommer den nya metoden att anropas på alla deskriptorer som ingår i definitionen och förse dem med en referens till den klass som definieras och det namn som deskriptorn har fått i klassens namnrymd. Med andra ord kan instanser av deskriptorer nu veta attributnamnet på deskriptorn i ägarklassen:

klass IntField:
    def __get__(self, instance, owner):
        return instans.__dict__[self.name]

    def __set__(self, instance, value):
        if not isinstance(värde, int):
            raise ValueError(f'förväntar sig heltal i {self.name}')
        instance.__dict__[self.name] = värde

    # detta är den nya initialiseraren:
    def __set_name__(self, owner, name):
        self.name = namn

klass Modell:
    int_field = IntField()

Se även

PEP 487 – Enklare anpassning av klassskapande

PEP skrivet och genomfört av Martin Teichmann.

Funktionsdokumentation.

PEP 519: Lägga till ett sökvägsprotokoll för filsystem

Filsystemsökvägar har historiskt representerats som str eller bytes objekt. Detta har lett till att personer som skriver kod som använder filsystemsökvägar antar att sådana objekt endast är en av dessa två typer (en int som representerar en filbeskrivning räknas inte eftersom det inte är en filsökväg). Tyvärr förhindrar detta antagande alternativa objektrepresentationer av filsystemsökvägar som pathlib från att fungera med redan existerande kod, inklusive Pythons standardbibliotek.

För att lösa denna situation har ett nytt gränssnitt som representeras av os.PathLike definierats. Genom att implementera metoden __fspath__() signalerar ett objekt att det representerar en sökväg. Ett objekt kan sedan tillhandahålla en lågnivårepresentation av en filsystemssökväg som ett str- eller bytes-objekt. Detta innebär att ett objekt anses vara sökvägsliknande om det implementerar os.PathLike eller är ett str eller bytes objekt som representerar en filsystemssökväg. Kod kan använda os.fspath(), os.fsdecode(), eller os.fsencode() för att explicit få en str och/eller bytes representation av ett sökvägsliknande objekt.

Den inbyggda funktionen open() har uppdaterats för att acceptera os.PathLike-objekt, liksom alla relevanta funktioner i modulerna os och os.path, och de flesta andra funktioner och klasser i standardbiblioteket. Klassen os.DirEntry och relevanta klasser i pathlib har också uppdaterats för att implementera os.PathLike.

Förhoppningen är att en uppdatering av de grundläggande funktionerna för att hantera sökvägar i filsystemet kommer att leda till att tredjepartskod implicit stöder alla sökvägsliknande objekt utan några kodändringar, eller åtminstone mycket minimala sådana (t.ex. anrop av os.fspath() i början av koden innan ett sökvägsliknande objekt hanteras).

Här är några exempel på hur det nya gränssnittet gör det möjligt att använda pathlib.Path på ett enklare och mer transparent sätt med redan existerande kod:

>>> import pathlib
>>> with open(pathlib.Path("README")) as f:
...     contents = f.read()
...
>>> import os.path
>>> os.path.splitext(pathlib.Path("some_file.txt"))
('some_file', '.txt')
>>> os.path.join("/a/b", pathlib.Path("c"))
'/a/b/c'
>>> import os
>>> os.fspath(pathlib.Path("some_file.txt"))
'some_file.txt'

(Implementerad av Brett Cannon, Ethan Furman, Dusty Phillips och Jelle Zijlstra.)

Se även

PEP 519 – Lägga till ett protokoll för filsystemets sökväg

PEP skriven av Brett Cannon och Koos Zevenhoven.

PEP 495: Förtydligande av lokal tid

På de flesta platser i världen har det funnits och kommer att finnas tillfällen då lokala klockor flyttas tillbaka. Under dessa tider införs intervaller där lokala klockor visar samma tid två gånger under samma dag. I dessa situationer är den information som visas på en lokal klocka (eller lagras i en Python datetime-instans) otillräcklig för att identifiera en viss tidpunkt.

PEP 495 lägger till det nya attributet fold till instanser av klasserna datetime.datetime och datetime.time för att skilja mellan två tidpunkter för vilka de lokala tiderna är desamma:

>>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
>>> for i in range(4):
...     u = u0 + i*HOUR
...     t = u.astimezone(Eastern)
...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
...
04:00:00 UTC = 00:00:00 EDT 0
05:00:00 UTC = 01:00:00 EDT 0
06:00:00 UTC = 01:00:00 EST 1
07:00:00 UTC = 02:00:00 EST 0

Värdena för attributet fold har värdet 0 för alla instanser utom de som representerar det andra (kronologiska) ögonblicket i tiden i ett tvetydigt fall.

Se även

PEP 495 – Förväxling av lokal tid

PEP skriven av Alexander Belopolsky och Tim Peters, implementation av Alexander Belopolsky.

PEP 529: Ändra kodning av Windows-filsystem till UTF-8

Filsystemets sökvägar representeras bäst med str (Unicode) i stället för bytes. Det finns dock vissa situationer där det är tillräckligt och korrekt att använda bytes.

Före Python 3.6 kunde dataförlust uppstå när byte-sökvägar användes i Windows. Med denna ändring stöds nu användning av byte för att representera sökvägar i Windows, förutsatt att dessa byte är kodade med den kodning som returneras av sys.getfilesystemencoding(), som nu har 'utf-8' som standard.

Program som inte använder str för att representera sökvägar bör använda os.fsencode() och os.fsdecode() för att säkerställa att deras byte är korrekt kodade. För att återgå till det tidigare beteendet, ställ in PYTHONLEGACYWINDOWSFSENCODING eller anropa sys._enablelegacywindowsfsencoding().

Se PEP 529 för mer information och diskussion om kodändringar som kan krävas.

PEP 528: Ändra kodningen för Windows-konsolen till UTF-8

Standardkonsolen i Windows accepterar nu alla Unicode-tecken och ger korrekt lästa str-objekt till Python-kod. sys.stdin, sys.stdout och sys.stderr använder nu utf-8-kodning som standard.

Den här ändringen gäller bara när du använder en interaktiv konsol och inte när du omdirigerar filer eller pipes. Om du vill återgå till det tidigare beteendet vid användning av en interaktiv konsol anger du PYTHONLEGACYWINDOWSSTDIO.

Se även

PEP 528 – Ändra kodningen för Windows-konsolen till UTF-8

PEP skrivet och implementerat av Steve Dower.

PEP 520: Bevarande av klassattributets definitionsordning

Attribut i en klassdefinition har en naturlig ordningsföljd: samma ordning som namnen förekommer i källan. Denna ordning bevaras nu i den nya klassens attribut __dict__.

Dessutom är den effektiva standardnamnrymden för klassen execution (returnerad från type.__prepare__()) nu en mappning som bevarar insättningsordningen.

Se även

PEP 520 – Bevarande av klassattributets definitionsordning

PEP skrivet och implementerat av Eric Snow.

PEP 468: Bevara ordningen på nyckelordsargument

**kwargs i en funktionssignatur är nu garanterad att vara en mappning som bevarar insättningsordningen.

Se även

PEP 468 – Bevara ordningen på nyckelordsargument

PEP skrivet och implementerat av Eric Snow.

Ny dict implementation

Typen dict använder nu en ”kompakt” representation baserad på ett förslag av Raymond Hettinger som först implementerades av PyPy. Minnesanvändningen för den nya dict() är mellan 20% aoch 25% smaller jämfört med Python 3.5.

Den orderbevarande aspekten av denna nya implementering betraktas som en implementeringsdetalj och bör inte förlitas på (detta kan ändras i framtiden, men det är önskvärt att ha denna nya dict-implementering i språket för några utgåvor innan språkspecifikationen ändras för att kräva orderbevarande semantik för alla nuvarande och framtida Python-implementeringar; detta hjälper också till att bevara bakåtkompatibilitet med äldre versioner av språket där slumpmässig iterationsordning fortfarande gäller, t.ex. Python 3.5).

(Bidrag från INADA Naoki i bpo-27350. Idé ursprungligen föreslagen av Raymond Hettinger.)

PEP 523: Lägga till ett API för ramutvärdering i CPython

Även om Python ger omfattande stöd för att anpassa hur kod körs, är det ett ställe där det inte har gjort det i utvärderingen av ramobjekt. Om du ville ha något sätt att avlyssna ramutvärdering i Python fanns det verkligen inget sätt utan att direkt manipulera funktionspekare för definierade funktioner.

PEP 523 ändrar detta genom att tillhandahålla ett API för att göra ramutvärdering pluggbar på C-nivå. Detta gör det möjligt för verktyg som debuggers och JITs att fånga upp ramutvärderingen innan exekveringen av Python-koden börjar. Detta gör det möjligt att använda alternativa utvärderingsimplementeringar för Python-kod, spåra ramutvärdering etc.

Detta API är inte en del av det begränsade C API och är markerat som privat för att signalera att användningen av detta API förväntas vara begränsad och endast tillämplig på mycket utvalda användningsfall på låg nivå. Semantiken för API:et kommer att ändras med Python vid behov.

Se även

PEP 523 – Lägga till ett API för bildutvärdering i CPython

PEP skriven av Brett Cannon och Dino Viehland.

PYTHONMALLOC miljövariabel

Den nya miljövariabeln PYTHONMALLOC gör det möjligt att ställa in Pythons minnesallokatorer och installera debug-hooks.

Det är nu möjligt att installera debug-hooks på Python-minnesallokatorer på Python kompilerad i release-läge med PYTHONMALLOC=debug. Effekter av debug-hooks:

  • Nytilldelat minne fylls med byte 0xCB

  • Frigjort minne är fyllt med byte 0xDB

  • Upptäck brott mot Pythons API för minnesallokering. Till exempel, PyObject_Free() anropas på ett minnesblock som allokerats av PyMem_Malloc().

  • Upptäcka skrivningar före början av en buffert (buffer underflows)

  • Upptäcka skrivningar efter slutet av en buffert (buffertöverskridanden)

  • Kontrollera att GIL hålls när allokeringsfunktioner i domänerna PYMEM_DOMAIN_OBJ (ex: PyObject_Malloc()) och PYMEM_DOMAIN_MEM (ex: PyMem_Malloc()) anropas.

Att kontrollera om GIL hålls är också en ny funktion i Python 3.6.

Se funktionen PyMem_SetupDebugHooks() för felsöknings-hooks på Python-minnesallokatorer.

Det är nu också möjligt att tvinga fram användning av C-bibliotekets malloc()-allokering för alla Python-minnesallokeringar genom att använda PYTHONMALLOC=malloc. Detta är användbart när man använder externa minnesdebuggar som Valgrind på en Python kompilerad i release-läge.

Vid fel använder felsöknings-hooks på Pythons minnesallokatorer nu modulen tracemalloc för att få spårningen där ett minnesblock allokerades.

Exempel på fatalt fel vid buffertöverskridning med python3.6 -X tracemalloc=5 (lagra 5 bilder i spår):

Debug-minnesblock  adress p=0x7fbcd41666f8: API 'o'
    4 byte ursprungligen begärda
    De 7 padbytena  p-7 är FORBIDDENBYTE, som förväntat.
    De 8 padbytena vid tail=0x7fbcd41666fc är inte alla FORBIDDENBYTE (0xfb):
        vid tail+0: 0x02 *** OUCH
        vid svans+1: 0xfb
        vid svans+2: 0xfb
        vid tail+3: 0xfb
        vid tail+4: 0xfb
        vid ingång+5: 0xfb
        vid svans+6: 0xfb
        vid svans+7: 0xfb
    Blocket skapades av anrop #1233329 för att felsöka malloc/realloc.
    Data  p: 1a 2b 30 00

Minnesblock allokerat vid (senaste anropet först):
  Fil "test/test_bytes.py", rad 323
  Fil "unittest/case.py", rad 600
  Fil "unittest/case.py", rad 648
  Fil "unittest/suite.py", rad 122
  Fil "unittest/suite.py", rad 84

Fatalt Python-fel: dålig efterföljande pad-byte

Aktuell tråd 0x00007fbcdbd32700 (senaste anropet först):
  Fil "test/test_bytes.py", rad 323 i test_hex
  Fil "unittest/case.py", rad 600 i run
  Fil "unittest/case.py", rad 648 i __call__
  Fil "unittest/suite.py", rad 122 i run
  Fil "unittest/suite.py", rad 84 i __call__
  Fil "unittest/suite.py", rad 122 i run
  Fil "unittest/suite.py", rad 84 i __call__
  ...

(Bidrag från Victor Stinner i bpo-26516 och bpo-26564.)

Stöd för DTrace- och SystemTap-probing

Python kan nu byggas --med-dtrace vilket möjliggör statiska markörer för följande händelser i tolken:

  • funktion anrop/retur

  • skräpinsamling påbörjad/avslutad

  • rad av kod som exekveras.

Detta kan användas för att instrumentera tolkar som körs i produktion, utan att behöva kompilera om specifika debug builds eller tillhandahålla programspecifik profilerings-/debuggningskod.

Mer information finns i Instrumentering av CPython med DTrace och SystemTap.

Den nuvarande implementeringen testas på Linux och macOS. Ytterligare markörer kan komma att läggas till i framtiden.

(Bidrag från Łukasz Langa i bpo-21590, baserat på korrigeringar av Jesús Cea Avión, David Malcolm och Nikhil Benesch.)

Andra språkliga förändringar

Några mindre ändringar som gjorts i Python-språkets kärna är:

  • Ett globalt eller icke-lokalt uttalande måste nu textuellt visas före den första användningen av det berörda namnet i samma scope. Tidigare var detta en SyntaxWarning.

  • Det är nu möjligt att sätta en specialmetod till None för att ange att motsvarande operation inte är tillgänglig. Till exempel, om en klass sätter __iter__() till None, är klassen inte iterabel. (Bidrag från Andrew Barnert och Ivan Levkivskyi i bpo-25958.)

  • Långa sekvenser av upprepade spårningsrader förkortas nu som "[Föregående rad upprepad {count} gånger till]" (se spårning för ett exempel). (Bidrag från Emanuel Barry i bpo-26823.)

  • Import ger nu det nya undantaget ModuleNotFoundError (underklass till ImportError) när den inte kan hitta en modul. Kod som för närvarande kontrollerar för ImportError (i try-except) kommer fortfarande att fungera. (Bidrag från Eric Snow i bpo-15767.)

  • Klassmetoder som förlitar sig på super() med nollargument fungerar nu korrekt när de anropas från metaklassmetoder under skapandet av en klass. (Bidrag från Martin Teichmann i bpo-23722.)

Nya moduler

hemligheter

Huvudsyftet med den nya modulen secrets är att tillhandahålla ett uppenbart sätt att på ett tillförlitligt sätt generera kryptografiskt starka pseudoslumpmässiga värden som är lämpliga för hantering av hemligheter, t.ex. kontoautentisering, tokens och liknande.

Varning

Observera att pseudoslumpgeneratorerna i modulen random * INTE* ska användas för säkerhetsändamål. Använd secrets på Python 3.6+ och os.urandom() på Python 3.5 och tidigare.

Se även

PEP 506 – Att lägga till en hemlighetsmodul i standardbiblioteket

PEP skrivet och genomfört av Steven D’Aprano.

Förbättrade moduler

array

Utmattade iteratorer av array.array kommer nu att förbli utmattade även om den itererade arrayen utökas. Detta överensstämmer med beteendet hos andra muterbara sekvenser.

Bidrag från Serhiy Storchaka i bpo-26492.

ast

Den nya ast.Constant AST-noden har lagts till. Den kan användas av externa AST-optimerare i syfte att vika konstanter.

Bidrag från Victor Stinner i bpo-26146.

asyncio

Från och med Python 3.6 är modulen asyncio inte längre provisorisk och dess API anses vara stabilt.

Noterbara ändringar i modulen asyncio sedan Python 3.5.0 (alla backporterade till 3.5.x på grund av den preliminära statusen):

  • Funktionen get_event_loop() har ändrats så att den alltid returnerar den pågående loopen när den anropas från coroutines och callbacks. (Bidrag från Yury Selivanov i bpo-28613.)

  • Funktionen ensure_future() och alla funktioner som använder den, till exempel loop.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.)

  • 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 snabbare asyncio.Future-implementation. (Bidrag från Yury Selivanov i bpo-27041.)

  • Ny loop.get_exception_handler()-metod för att hämta den aktuella undantagshanteraren. (Bidrag från Yury Selivanov i bpo-27040.)

  • Ny StreamReader.readuntil()-metod för att läsa data från strömmen tills en separatorbyte-sekvens visas. (Bidrag från Mark Korenberg.)

  • Prestandan för StreamReader.readexactly() har förbättrats. (Bidrag från Mark Korenberg i bpo-28370.)

  • Metoden loop.getaddrinfo() är optimerad för att undvika att anropa systemets funktion getaddrinfo om adressen redan är löst. (Bidrag från A. Jesse Jiryu Davis.)

  • Metoden loop.stop() har ändrats så att den stoppar loopen omedelbart efter den aktuella iterationen. Alla nya återuppringningar som schemalagts som ett resultat av den senaste iterationen kommer att kasseras. (Bidrag från Guido van Rossum i bpo-25593.)

  • Future.set_exception kommer nu att ge upphov till TypeError när en instans av undantaget StopIteration skickas. (Bidrag från Chris Angelico i bpo-26221.)

  • Ny loop.connect_accepted_socket() metod att användas av servrar som accepterar anslutningar utanför asyncio, men som använder asyncio för att hantera dem. (Bidrag från Jim Fulton i bpo-27392.)

  • flaggan TCP_NODELAY är nu inställd som standard för alla TCP-transporter. (Bidrag från Yury Selivanov i bpo-27456.)

  • Ny loop.shutdown_asyncgens() för att korrekt stänga väntande asynkrona generatorer innan loopen stängs. (Bidrag från Yury Selivanov i bpo-28003.)

  • klasserna Future och Task har nu en optimerad C-implementation som gör asynciokoden upp till 30% faster. (Bidrag från Yury Selivanov och INADA Naoki i bpo-26081 och bpo-28544.)

binascii

Funktionen b2a_base64() accepterar nu ett valfritt newline nyckelordsargument för att kontrollera om newline-tecknet skall läggas till i returvärdet. (Bidrag från Victor Stinner i bpo-25357.)

cmath

Den nya konstanten cmath.tau (τ) har lagts till. (Bidrag från Lisa Roach i bpo-12345, se PEP 628 för detaljer.)

Nya konstanter: cmath.inf och cmath.nan för att matcha math.inf och math.nan, och även cmath.infj och cmath.nanj för att matcha det format som används av complex repr. (Bidrag från Mark Dickinson i bpo-23229.)

samlingar

Den nya abstrakta basklassen Collection har lagts till för att representera stora iterabla containerklasser. (Bidrag från Ivan Levkivskyi, dokument av Neil Girdhar i bpo-27598.)

Den nya abstrakta basklassen Reversible representerar iterabla klasser som också tillhandahåller metoden __reversed__(). (Bidrag från Ivan Levkivskyi i bpo-25987.)

Den nya AsyncGenerator abstrakta basklassen representerar asynkrona generatorer. (Bidrag från Yury Selivanov i bpo-28720.)

Funktionen namedtuple() accepterar nu ett valfritt nyckelordsargument module, som när det anges används för attributet __module__ i den returnerade namngivna tuple-klassen. (Bidrag från Raymond Hettinger i bpo-17941.)

Argumenten verbose och rename för namedtuple() är nu endast nyckelord. (Bidrag från Raymond Hettinger i bpo-25628.)

Rekursiva collections.deque-instanser kan nu picklas. (Bidrag från Serhiy Storchaka i bpo-26482.)

concurrent.futures

Klassens ThreadPoolExecutor-konstruktor accepterar nu ett valfritt thread_name_prefix-argument för att göra det möjligt att anpassa namnen på de trådar som skapas av poolen. (Bidrag från Gregory P. Smith i bpo-27664.)

contextlib

Klassen contextlib.AbstractContextManager har lagts till för att tillhandahålla en abstrakt basklass för kontexthanterare. Den tillhandahåller en förnuftig standardimplementation för __enter__() som returnerar self och lämnar __exit__() som en abstrakt metod. En matchande klass har lagts till i modulen typing som typing.ContextManager. (Bidrag från Brett Cannon i bpo-25609.)

datatid

Klasserna datetime och time har det nya attributet fold som används för att särskilja lokal tid när det behövs. Många funktioner i datetime har uppdaterats för att stödja entydighet av lokal tid. Se Local Time Disambiguation avsnittet för mer information. (Bidrag från Alexander Belopolsky i bpo-24773.)

Metoderna datetime.strftime() och date.strftime() stöder nu ISO 8601-datadirektiven %G, %u och %V. (Bidrag från Ashley Anderson i bpo-12006.)

Funktionen datetime.isoformat() accepterar nu ett valfritt timespec-argument som anger antalet ytterligare komponenter i tidsvärdet som ska inkluderas. (Bidrag från Alessandro Cucci och Alexander Belopolsky i bpo-19475.)

datetime.combine() accepterar nu ett valfritt tzinfo-argument. (Bidrag från Alexander Belopolsky i bpo-27661.)

decimal

Ny Decimal.as_integer_ratio()-metod som returnerar ett par (n, d) heltal som representerar den givna Decimal-instansen som ett bråk, i lägsta termer och med en positiv nämnare:

>>> Decimal('-3.14').as_integer_ratio()
(-157, 50)

(Bidrag från Stefan Krah och Mark Dickinson i bpo-25928.)

distutils

Attributet default_format har tagits bort från distutils.command.sdist.sdist och attributet formats har ['gztar'] som standard. Även om det inte är förväntat, kan all kod som förlitar sig på förekomsten av default_format behöva anpassas. Se bpo-27819 för mer information.

e-post

Det nya API:et för e-post, som aktiveras via nyckelordet policy i olika konstruktörer, är inte längre provisoriskt. Dokumentationen för email har omorganiserats och skrivits om för att fokusera på det nya API:et, medan den gamla dokumentationen för det äldre API:et har behållits. (Bidrag från R. David Murray i bpo-24277.)

Klasserna email.mime accepterar nu alla ett valfritt nyckelord policy. (Bidrag från Berker Peksag i bpo-27331.)

DecodedGenerator har nu stöd för nyckelordet policy.

Det finns ett nytt attribut policy, message_factory, som styr vilken klass som används som standard när parsern skapar nya meddelandeobjekt. För policyn email.policy.compat32 är detta Message, för de nya policyerna är det EmailMessage. (Bidrag från R. David Murray i bpo-20476.)

kodningar

I Windows har kodningen 'oem lagts till för att använda CP_OEMCP, och aliaset 'ansi för den befintliga kodningen 'mbcs, som använder kodsidan CP_ACP. (Bidrag från Steve Dower i bpo-27959.)

enum

Två nya basklasser för uppräkning har lagts till i modulen enum: Flag och IntFlags. Båda används för att definiera konstanter som kan kombineras med bitvisa operatorer. (Bidrag från Ethan Furman i bpo-23591.)

Många standardbiblioteksmoduler har uppdaterats så att de använder klassen IntFlags för sina konstanter.

Det nya enum.auto-värdet kan användas för att automatiskt tilldela värden till enum-medlemmar:

>>> from enum import Enum, auto
>>> class Color(Enum):
...     red = auto()
...     blue = auto()
...     green = auto()
...
>>> list(Color)
[<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]

felhanterare

I Windows installerar modulen faulthandler nu en hanterare för Windows-undantag: se faulthandler.enable(). (Bidrag från Victor Stinner i bpo-23848.)

filinmatning

hook_encoded() stöder nu argumentet errors. (Bidrag från Joseph Hackman i bpo-25788.)

hashlib

hashlib stöder OpenSSL 1.1.0. Den minsta rekommenderade versionen är 1.0.2. (Bidrag från Christian Heimes i bpo-26470.)

BLAKE2-hashfunktioner lades till i modulen. blake2b() och blake2s() är alltid tillgängliga och stöder hela funktionsuppsättningen i BLAKE2. (Bidrag från Christian Heimes i bpo-26798 baserat på kod av Dmitry Chestnykh och Samuel Neves. Dokumentation skriven av Dmitry Chestnykh)

SHA-3-hashfunktionerna sha3_224(), sha3_256(), sha3_384(), sha3_512(), och SHAKE-hashfunktionerna shake_128() och shake_256() lades till. (Bidrag från Christian Heimes i bpo-16113. Keccak kodpaket av Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche och Ronny Van Keer)

Den lösenordsbaserade nyckelfunktionen scrypt() är nu tillgänglig med OpenSSL 1.1.0 och nyare. (Bidrag från Christian Heimes i bpo-27928.)

http.klient

HTTPConnection.request() och endheaders() stöder nu båda chunked encoding request bodies. (Bidrag från Demian Brecht och Rolf Krahl i bpo-12319.)

idlelib och IDLE

Paketet idlelib moderniseras och omarbetas för att IDLE ska se bättre ut och fungera bättre och för att koden ska bli lättare att förstå, testa och förbättra. En del i att få IDLE att se bättre ut, särskilt på Linux och Mac, är att använda ttk-widgetar, främst i dialogrutorna. Som ett resultat av detta körs IDLE inte längre med tcl/tk 8.4. Nu krävs tcl/tk 8.5 eller 8.6. Vi rekommenderar att du kör den senaste versionen av någon av dessa.

”Moderniseringen” omfattar namnbyte och konsolidering av idlelib-moduler. Omdöpningen av filer med delvis versala namn liknar omdöpningen av till exempel Tkinter och TkFont till tkinter och tkinter.font i 3.0. Som ett resultat av detta kommer import av idlelib-filer som fungerade i 3.5 vanligtvis inte att fungera i 3.6. Åtminstone en ändring av modulnamnet kommer att behövas (se idlelib/README.txt), ibland mer. (Namnändringar som Al Swiegart och Terry Reedy bidrog med i bpo-24225. De flesta idlelib-patchar sedan dess har varit och kommer att vara en del av processen)

Som kompensation blir det slutliga resultatet att vissa idlelib-klasser blir enklare att använda, med bättre API:er och dokument som förklarar dem. Ytterligare användbar information kommer att läggas till i idlelib när den är tillgänglig.

Nytt i 3.6.2:

Flera korrigeringar för autokomplettering. (Bidrag från Louie Lu i bpo-15786.)

Nytt i 3.6.3:

Modulbläddraren (på Arkiv-menyn, tidigare kallad Klassbläddraren) visar nu nästlade funktioner och klasser utöver funktioner och klasser på toppnivå. (Bidrag från Guilherme Polo, Cheryl Sabella och Terry Jan Reedy i bpo-1612262.)

De IDLE-funktioner som tidigare implementerades som tillägg har nu implementerats som vanliga funktioner. Deras inställningar har flyttats från fliken Extensions till andra dialogflikar. (Bidrag från Charles Wohlganger och Terry Jan Reedy i bpo-27099.)

Dialogrutan Inställningar (Alternativ, Konfigurera IDLE) har delvis skrivits om för att förbättra både utseende och funktion. (Bidrag från Cheryl Sabella och Terry Jan Reedy i flera utgåvor)

Nytt i 3.6.4:

Teckensnittsexemplet innehåller nu ett urval av icke-latinska tecken så att användarna bättre kan se effekten av att välja ett visst teckensnitt. (Bidrag från Terry Jan Reedy i bpo-13802.) Exemplet kan redigeras för att inkludera andra tecken. (Bidrag från Serhiy Storchaka i bpo-31860.)

Nytt i 3.6.6:

Redigeringsalternativet för kodkontext reviderat. Rutan visar alla kontextlinjer upp till maxlinjer. Om du klickar på en kontextlinje hoppar redigeraren till den linjen. Kontextfärger för anpassade teman har lagts till på fliken Höjdpunkter i dialogrutan Inställningar. (Bidrag från Cheryl Sabella och Terry Jan Reedy i bpo-33642, bpo-33768, och bpo-33679.)

I Windows säger ett nytt API-anrop till Windows att tk skalar för DPI. På Windows 8.1+ eller 10, med oförändrade DPI-kompatibilitetsegenskaper för Python-binären och en skärmupplösning som är större än 96 DPI, bör detta göra text och linjer skarpare. I övrigt bör det inte ha någon effekt. (Bidrag från Terry Jan Reedy i bpo-33656.)

Nytt i 3.6.7:

Utdata över N rader (50 som standard) pressas ner till en knapp. N kan ändras i avsnittet PyShell på sidan Allmänt i dialogrutan Inställningar. Färre, men eventuellt extra långa, rader kan pressas genom att högerklicka på utmatningen. Pressad utdata kan expanderas på plats genom att dubbelklicka på knappen eller till urklippet eller ett separat fönster genom att högerklicka på knappen. (Bidrag från Tal Einat i bpo-1529353.)

importlib

Import ger nu upphov till det nya undantaget ModuleNotFoundError (underklass till ImportError) när den inte kan hitta en modul. Kod som för närvarande kontrollerar för ImportError (i try-except) kommer fortfarande att fungera. (Bidrag från Eric Snow i bpo-15767.)

importlib.util.LazyLoader anropar nu create_module() på den inkapslade laddaren, vilket tar bort begränsningen att importlib.machinery.BuiltinImporter och importlib.machinery.ExtensionFileLoader inte kunde användas med importlib.util.LazyLoader.

importlib.util.cache_from_source(), importlib.util.source_from_cache(), och importlib.util.spec_from_file_location() accepterar nu en path-like object.

inspektera

Funktionen inspect.signature() <inspect.signature>`() rapporterar nu de implicita .0-parametrarna som genereras av kompilatorn för förståelse- och generatoruttrycksomfång som om de vore enbart positionella parametrar med namnet implicit0. (Bidrag från Jelle Zijlstra i bpo-19611.)

För att minska kodförlusten vid uppgradering från Python 2.7 och det äldre inspect.getargspec() API:et, har den tidigare dokumenterade utfasningen av inspect.getfullargspec() återställts. Även om denna funktion är bekväm för Python 2/3-kodbaser med en enda källa, är det rikare inspect.signature()-gränssnittet fortfarande det rekommenderade tillvägagångssättet för ny kod. (Bidrag från Nick Coghlan i bpo-27172)

json

json.load() och json.loads() stöder nu binär indata. Kodad JSON bör representeras med antingen UTF-8, UTF-16 eller UTF-32. (Bidrag från Serhiy Storchaka i bpo-17909.)

loggning

Den nya WatchedFileHandler.reopenIfNeeded() metoden har lagts till för att ge möjlighet att kontrollera om loggfilen behöver öppnas igen. (Bidrag från Marian Horban i bpo-24884.)

matematik

Tau (τ)-konstanten har lagts till i modulerna math och cmath. (Bidrag från Lisa Roach i bpo-12345, se PEP 628 för detaljer)

multiprocessing

Proxyobjekt som returneras av multiprocessing.Manager() kan nu nästlas. (Bidrag från Davin Potts i bpo-6766.)

os

Se sammanfattningen av PEP 519 för detaljer om hur modulerna os och os.path nu stöder path-like object.

scandir() stöder nu bytes sökvägar på Windows.

En ny metod close() gör det möjligt att explicit stänga en scandir() iterator. Iteratorn scandir() har nu stöd för protokollet context manager. Om en scandir() iterator varken är uttömd eller explicit stängd kommer en ResourceWarning att skickas ut i dess destruktor. (Bidrag från Serhiy Storchaka i bpo-25994.)

På Linux blockerar os.urandom() nu tills systemets urandom-entropipool har initialiserats för att öka säkerheten. Se PEP 524 för förklaringen.

Linux getrandom() syscall (hämta slumpmässiga byte) är nu exponerad som den nya os.getrandom() funktionen. (Bidrag från Victor Stinner, en del av PEP 524)

sökväg

pathlib stöder nu path-like object. (Bidrag från Brett Cannon i bpo-27186.)

Se sammanfattningen av PEP 519 för mer information.

pdb

Klassens Pdb-konstruktor har ett nytt valfritt readrc-argument för att styra om .pdbrc-filer ska läsas.

gurka

Objekt som behöver __new__ anropas med nyckelordsargument kan nu picklas med pickle protocols äldre än protokollversion 4. Protokollversion 4 stöder redan detta fall. (Bidrag från Serhiy Storchaka i bpo-24164.)

pickletools

pickletools.dis() skriver nu ut det implicita memoindexet för MEMOIZE-opkoden. (Bidrag från Serhiy Storchaka i bpo-25382.)

pydoc

Modulen pydoc har lärt sig att respektera miljövariabeln MANPAGER. (Bidrag från Matthias Klose i bpo-8637.)

help() och pydoc kan nu lista namngivna tupelfält i den ordning de definierades istället för i alfabetisk ordning. (Bidrag från Raymond Hettinger i bpo-24879.)

slumpvis

Den nya funktionen choices() returnerar en lista med element av angiven storlek från den givna populationen med valfria vikter. (Bidrag från Raymond Hettinger i bpo-18844.)

re

Stöd för modifieringsspann i reguljära uttryck har lagts till. Exempel på detta: '(?i:p)ython' matchar 'python' och 'Python', men inte 'PYTHON'; '(?i)g(?-i:v)r' matchar 'GvR' och 'gvr', men inte 'GVR'. (Bidrag från Serhiy Storchaka i bpo-433028.)

Grupper av matchningsobjekt kan nås med __getitem__, vilket motsvarar group(). Så mo['name'] är nu likvärdigt med mo.group('name'). (Bidrag från Eric Smith i bpo-24454.)

Match-objekt stöder nu indexliknande objekt som gruppindex. (Bidrag från Jeroen Demeyer och Xiang Zhang i bpo-27177.)

läslinje

Lagt till set_auto_history() för att aktivera eller inaktivera automatiskt tillägg av indata till historiklistan. (Bidrag från Tyler Crompton i bpo-26870.)

rlcompleter

Privata och speciella attributnamn utelämnas nu om inte prefixet börjar med understrykningstecken. Ett mellanslag eller en kolon läggs till efter vissa avslutade nyckelord. (Bidrag från Serhiy Storchaka i bpo-25011 och bpo-25209.)

shlex

shlex har mycket förbättrad skalkompatibilitet genom det nya argumentet punctuation_chars för att kontrollera vilka tecken som behandlas som skiljetecken. (Bidrag från Vinay Sajip i bpo-1521950.)

plats

När du anger sökvägar att lägga till i sys.path i en .pth-fil, kan du nu ange filsökvägar ovanpå kataloger (t.ex. zip-filer). (Bidrag från Wolfgang Langner i bpo-26587).

sqlite3

sqlite3.Cursor.lastrowid stöder nu REPLACE-satsen. (Bidrag från Alex LordThorsen i bpo-16864.)

kortplats

Funktionen ioctl() har nu stöd för kontrollkoden SIO_LOOPBACK_FAST_PATH. (Bidrag från Daniel Stokes i bpo-26536.)

Konstanterna getsockopt`() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC och SO_PASSSEC stöds nu. (Bidrag från Christian Heimes i bpo-26907.)

setsockopt() stöder nu formen setsockopt(level, optname, None, optlen: int). (Bidrag från Christian Heimes i bpo-27744.)

Socket-modulen har nu stöd för adressfamiljen AF_ALG för gränssnitt mot Linux Kernel crypto API. ALG_*, SOL_ALG och sendmsg_afalg() lades till. (Bidrag från Christian Heimes i bpo-27744 med stöd från Victor Stinner.)

Nya Linux-konstanter TCP_USER_TIMEOUT och TCP_CONGESTION lades till. (Bidrag från Omar Sandoval, bpo-26273).

socketserver

Servrar baserade på modulen socketserver, inklusive de som definieras i http.server, xmlrpc.server och wsgiref.simple_server, stöder nu protokollet context manager. (Bidrag från Aviv Palivoda i bpo-26404.)

Attributet wfile i klasserna StreamRequestHandler implementerar nu det skrivbara gränssnittet io.BufferedIOBase. I synnerhet är anrop av write() nu garanterat att skicka data i sin helhet. (Bidrag från Martin Panter i bpo-26721.)

ssl

ssl stöder OpenSSL 1.1.0. Den minsta rekommenderade versionen är 1.0.2. (Bidrag från Christian Heimes i bpo-26470.)

3DES har tagits bort från standardchiffersviterna och ChaCha20 Poly1305-chiffersviter har lagts till. (Bidrag från Christian Heimes i bpo-27850 och bpo-27766.)

SSLContext har bättre standardkonfiguration för alternativ och chiffer. (Bidrag från Christian Heimes i bpo-28043.)

SSL-session kan kopieras från en anslutning på klientsidan till en annan med den nya SSLSession-klassen. TLS session resumption can speed up the initial handshake, reduce latency and improve performance (Bidrag från Christian Heimes i bpo-19500 baserat på ett utkast av Alex Warhawk.)

Den nya metoden get_ciphers() kan användas för att få en lista över aktiverade chiffer i prioritetsordning.

Alla konstanter och flaggor har konverterats till IntEnum och IntFlags. (Bidrag från Christian Heimes i bpo-28025.)

Server- och klientsidespecifika TLS-protokoll för SSLContext lades till. (Bidrag från Christian Heimes i bpo-28085.)

Lagt till ssl.SSLContext.post_handshake_auth för att aktivera och ssl.SSLSocket.verify_client_post_handshake() för att initiera TLS 1.3 post-handshake-autentisering. (Bidrag från Christian Heimes i gh-78851.)

statistik

En ny harmonic_mean()-funktion har lagts till. (Bidrag från Steven D’Aprano i bpo-27181.)

struktur

struct stöder nu IEEE 754 halvprecisionsflottor via formatspecificeraren 'e'. (Bidrag från Eli Stevens, Mark Dickinson i bpo-11734.)

delprocess

subprocess.Popen destructor avger nu en ResourceWarning-varning om underordnad process fortfarande körs. Använd kontexthanterarprotokollet (with proc: ...) eller anropa explicit metoden wait() för att läsa barnprocessens utgångsstatus. (Bidrag från Victor Stinner i bpo-26741.)

Konstruktorn subprocess.Popen och alla funktioner som skickar argument till den accepterar nu argumenten encoding och errors. Om något av dessa anges aktiveras textläge för strömmarna stdin, stdout och stderr. (Bidrag från Steve Dower i bpo-6135.)

system

Den nya funktionen getfilesystemencodeerrors() returnerar namnet på det felläge som används för att konvertera mellan Unicode-filnamn och bytes-filnamn. (Bidrag från Steve Dower i bpo-27781.)

I Windows innehåller returvärdet för funktionen getwindowsversion() nu fältet platform_version som innehåller den exakta huvudversionen, minoritetsversionen och byggnumret för det aktuella operativsystemet, snarare än den version som emuleras för processen (Bidrag från Steve Dower i bpo-27932.)

telnetlib

telnetlib.Telnet är nu en kontexthanterare (bidrag från Stéphane Wirtel i bpo-25485).

tid

Attributen struct_time tm_gmtoff och tm_zone är nu tillgängliga på alla plattformar.

tidsinställning

Den nya Timer.autorange() bekvämlighetsmetoden har lagts till för att anropa Timer.timeit() upprepade gånger så att den totala körtiden är större än eller lika med 200 millisekunder. (Bidrag från Steven D’Aprano i bpo-6422.)

timeit varnar nu när det finns en betydande (4x) varians mellan bästa och sämsta tid. (Bidrag från Serhiy Storchaka i bpo-23552.)

tkinter

Lagt till metoderna trace_add(), trace_remove() och trace_info() i klassen tkinter.Variable. De ersätter gamla metoder trace_variable(), trace(), trace_vdelete() och trace_vinfo() som använder föråldrade Tcl-kommandon och kanske inte fungerar i framtida versioner av Tcl. (Bidrag från Serhiy Storchaka i bpo-22115).

spårning

Både spårningsmodulen och tolkens inbyggda undantagsvisning förkortar nu långa sekvenser av upprepade rader i spårningar som visas i följande exempel:

>>> def f(): f()
...
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  [Previous line repeated 995 more times]
RecursionError: maximum recursion depth exceeded

(Bidrag från Emanuel Barry i bpo-26823.)

tracemalloc

Modulen tracemalloc stöder nu spårning av minnesallokeringar i flera olika adressrymder.

Den nya filterklassen DomainFilter har lagts till för att filtrera blockspårningar efter deras adressutrymme (domän).

(Bidrag från Victor Stinner i bpo-26588.)

typing

Eftersom modulen typing är provisional, har alla ändringar som introducerades i Python 3.6 också backporterats till Python 3.5.x.

Modulen typing har ett mycket förbättrat stöd för generiska typalias. Till exempel är Dict[str, Tuple[S, T]] nu en giltig typannotering. (Bidrag från Guido van Rossum i Github #195.)

Klassen typing.ContextManager har lagts till för att representera contextlib.AbstractContextManager. (Bidrag från Brett Cannon i bpo-25609.)

Klassen typing.Collection har lagts till för att representera collections.abc.Collection. (Bidrag från Ivan Levkivskyi i bpo-27598.)

Typkonstruktionen typing.ClassVar har lagts till för att markera klassvariabler. Som introducerades i PEP 526, indikerar en variabelannotation som är inlindad i ClassVar att ett givet attribut är avsett att användas som en klassvariabel och inte bör ställas in på instanser av den klassen. (Bidrag från Ivan Levkivskyi i Github #280.)

En ny TYPE_CHECKING-konstant som antas vara True av de statiska typkontrollerna, men är False vid körning. (Bidrag från Guido van Rossum i Github #230.)

En ny NewType() hjälpfunktion har lagts till för att skapa lätta distinkta typer för annoteringar:

från typing import NewType

UserId = NewType('UserId', int)
some_id = UserId(524313)

Den statiska typkontrollen kommer att behandla den nya typen som om den vore en underklass av den ursprungliga typen. (Bidrag från Ivan Levkivskyi i Github #189.)

unicodedata

Modulen unicodedata använder nu data från Unicode 9.0.0. (Bidrag från Benjamin Peterson.)

unittest.mock

Klassen Mock har följande förbättringar:

urllib.request

Om en HTTP-förfrågan har en fil eller en iterabel kropp (annat än ett bytes-objekt) men ingen Content-Length header, istället för att kasta ett fel, faller AbstractHTTPHandler nu tillbaka till att använda chunked transfer encoding. (Bidrag från Demian Brecht och Rolf Krahl i bpo-12319.)

urllib.robotparser

RobotFileParser stöder nu tillägget Crawl-delay och Request-rate. (Bidrag från Nikolay Bogoychev i bpo-16099.)

ven

venv accepterar en ny parameter --prompt. Denna parameter ger ett alternativt prefix för den virtuella miljön. (Föreslagen av Łukasz Balcerzak och portad till 3.6 av Stéphane Wirtel i bpo-22829)

varningar

En ny valfri source parameter har lagts till i funktionen warnings.warn_explicit(): det förstörda objektet som gav upphov till en ResourceWarning. Ett source-attribut har också lagts till i warnings.WarningMessage (bidrag från Victor Stinner i bpo-26568 och bpo-26567).

När en ResourceWarning-varning loggas, används nu tracemalloc-modulen för att försöka hämta den traceback där det förstörda objektet allokerades.

Exempel med skriptet example.py:

import warnings

def func():
    return open(__file__)

f = func()
f = None

Utdata från kommandot python3.6 -Wd -X tracemalloc=5 example.py:

exempel.py:7: ResourceWarning: oavslutad fil <_io.TextIOWrapper name='example.py' mode='r' encoding='UTF-8'>
  f = Ingen
Objekt allokerat vid (senaste anropet först):
  Fil "example.py", lineno 4
    return open(__file__)
  Fil "exempel.py", lineno 6
    f = func()

Spårningen ”Objekt allokerat vid” är ny och visas endast om tracemalloc spårar Python-minnesallokeringar och om modulen warnings redan har importerats.

winreg

Lagt till 64-bitars heltalstypen REG_QWORD. (Bidrag från Clement Rouault i bpo-23026.)

winsound

Tillät nyckelordsargument att skickas till Beep, MessageBeep, och PlaySound (bpo-27982).

xmlrpc.klient

Modulen xmlrpc.client stöder nu avmarshalling av ytterligare datatyper som används av Apache XML-RPC-implementeringen för numeriska värden och None. (Bidrag från Serhiy Storchaka i bpo-26885.)

zip-fil

En ny klassmetod ZipInfo.from_file() gör det möjligt att skapa en ZipInfo-instans från en fil i filsystemet. En ny ZipInfo.is_dir()-metod kan användas för att kontrollera om ZipInfo-instansen representerar en katalog. (Bidrag från Thomas Kluyver i bpo-26039.)

Metoden ZipFile.open() kan nu användas för att skriva in data i en ZIP-fil, samt för att extrahera data. (Bidrag från Thomas Kluyver i bpo-26039.)

zlib

Funktionerna compress() och decompress() accepterar nu nyckelordsargument. (Bidrag från Aviv Palivoda i bpo-26243 respektive Xiang Zhang i bpo-16764)

Optimeringar

  • Python-tolken använder nu en 16-bitars ordkod istället för bytekod vilket möjliggjorde ett antal opcode-optimeringar. (Bidrag från Demur Rumed med input och recensioner från Serhiy Storchaka och Victor Stinner i bpo-26647 och bpo-28050.)

  • Klassen asyncio.Future har nu en optimerad C-implementering. (Bidrag från Yury Selivanov och INADA Naoki i bpo-26081.)

  • Klassen asyncio.Task har nu en optimerad C-implementering. (Bidrag från Yury Selivanov i bpo-28544.)

  • Olika implementeringsförbättringar i modulen typing (t.ex. cachelagring av generiska typer) ger upp till 30 gånger bättre prestanda och minskat minnesavtryck.

  • ASCII-avkodaren är nu upp till 60 gånger så snabb för felhanterarna surrogateescape, ignore och replace (Bidrag från Victor Stinner i bpo-24870).

  • ASCII- och Latin1-kodarna är nu upp till 3 gånger så snabba för felhanteraren surrogateescape (Bidrag från Victor Stinner i bpo-25227).

  • UTF-8-kodaren är nu upp till 75 gånger så snabb för felhanterarna ignore, replace, surrogateescape, surrogatepass (Bidrag från Victor Stinner i bpo-25267).

  • UTF-8-avkodaren är nu upp till 15 gånger så snabb för felhanterarna ignore, replace och surrogateescape (Bidrag från Victor Stinner i bpo-25301).

  • bytes % args är nu upp till 2 gånger snabbare. (Bidrag från Victor Stinner i bpo-25349).

  • bytearray % args är nu mellan 2,5 och 5 gånger snabbare. (Bidrag från Victor Stinner i bpo-25399).

  • Optimera bytes.fromhex() och bytearray.fromhex(): de är nu mellan 2x och 3,5x snabbare. (Bidrag från Victor Stinner i bpo-25401).

  • Optimera bytes.replace(b'', b'.'') och bytearray.replace(b'', b'.''): upp till 80% faster. (Bidrag från Josh Snider i bpo-26574).

  • Allokeringsfunktioner i PyMem_Malloc()-domänen (PYMEM_DOMAIN_MEM) använder nu pymalloc memory allocator istället för malloc()-funktionen i C-biblioteket. Allokeringsfunktionen pymalloc är optimerad för objekt som är mindre än eller lika med 512 byte och har kort livslängd, medan malloc() används för större minnesblock. (Bidrag från Victor Stinner i bpo-26249).

  • pickle.load() och pickle.loads() är nu upp till 10% faster när många små objekt deserialiseras (Bidrag från Victor Stinner i bpo-27056).

  • Att skicka keyword arguments till en funktion har en overhead i jämförelse med att skicka positional arguments. I tilläggsfunktioner som implementeras med hjälp av Argument Clinic minskar nu denna overhead avsevärt. (Bidrag från Serhiy Storchaka i bpo-27574).

  • Optimerade glob() och iglob() funktioner i glob modulen; de är nu ca 3–6 gånger snabbare. (Bidrag från Serhiy Storchaka i bpo-25596).

  • Optimerade globbing i pathlib genom att använda os.scandir(); det är nu ca 1,5–4 gånger snabbare. (Bidrag från Serhiy Storchaka i bpo-26032).

  • xml.etree.ElementTree prestanda för parsning, iteration och deepcopy har förbättrats avsevärt. (Bidrag från Serhiy Storchaka i bpo-25638, bpo-25873, och bpo-25869.)

  • Skapandet av fractions.Fraction-instanser från floats och decimaler är nu 2 till 3 gånger snabbare. (Bidrag från Serhiy Storchaka i bpo-25971.)

Ändringar i Build och C API

Övriga förbättringar

  • När --version (kortform: -V) anges två gånger, skriver Python ut sys.version för detaljerad information.

    $ ./python -VV
    Python 3.6.0b4+ (3.6:223967b49e49+, 21 nov 2016, 20:55:04)
    [GCC 4.2.1 Kompatibel Apple LLVM 8.0.0 (clang-800.0.42.1)]
    

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. Från och med Python 3.6 kommer användningen av async eller await som namn att generera en DeprecationWarning.

Föråldrat Python-beteende

Om man väcker StopIteration-undantaget inuti en generator kommer det nu att generera en DeprecationWarning, och kommer att utlösa en RuntimeError i Python 3.7. Se PEP 479: Ändra StopIteration-hanteringen i generatorer för detaljer.

Metoden __aiter__() förväntas nu returnera en asynkron iterator direkt istället för att returnera en awaitable som tidigare. Att göra det förra kommer att utlösa en DeprecationWarning. Bakåtkompatibiliteten kommer att tas bort i Python 3.7. (Bidrag från Yury Selivanov i bpo-27243.)

Ett backslash-teckenpar som inte är en giltig escape-sekvens genererar nu en DeprecationWarning. Även om detta så småningom kommer att bli ett SyntaxError, kommer det inte att ske förrän efter flera Python-utgåvor. (Bidrag från Emanuel Barry i bpo-27364.)

När man utför en relativ import och använder __name__ och __path__ från den anropande modulen när __spec__ eller __package__ inte är definierade, utlöses nu en ImportWarning. (Bidrag från Rose Ames i bpo-25791.)

Föråldrade Python-moduler, -funktioner och -metoder

asynchatt

asynchat har utgått till förmån för asyncio. (Bidrag från Mariatta i bpo-25002.)

asynkron

asyncore har utgått till förmån för asyncio. (Bidrag från Mariatta i bpo-25002.)

dbm

Till skillnad från andra dbm-implementationer skapar dbm.dumb-modulen databaser med läget 'rw' och tillåter modifiering av databasen som öppnats med läget 'r'. Detta beteende är nu föråldrat och kommer att tas bort i 3.8. (Bidrag från Serhiy Storchaka i bpo-21708.)

distutils

Det odokumenterade extra_path-argumentet till distutils.Distribution-konstruktören anses nu vara föråldrat och kommer att ge upphov till en varning om det anges. Stöd för denna parameter kommer att tas bort i en framtida Python-version. Se bpo-27919 för detaljer.

grp

Stödet för argument som inte är heltal i getgrgid() har tagits bort. (Bidrag från Serhiy Storchaka i bpo-26129.)

importlib

Metoderna importlib.machinery.SourceFileLoader.load_module() och importlib.machinery.SourcelessFileLoader.load_module() är nu föråldrade. De var de enda återstående implementationerna av importlib.abc.Loader.load_module() i importlib som inte hade blivit avförda i tidigare versioner av Python till förmån för importlib.abc.Loader.exec_module().

Klassen importlib.machinery.WindowsRegistryFinder är nu föråldrad. Från och med 3.6.0 läggs den fortfarande till i sys.meta_path som standard (på Windows), men detta kan ändras i framtida versioner.

os

Odokumenterat stöd för allmänna bytesliknande objekt som sökvägar i os-funktioner, compile() och liknande funktioner är nu avfört. (Bidrag från Serhiy Storchaka i bpo-25791 och bpo-26754.)

re

Stöd för inline-flaggor (?letters) mitt i det reguljära uttrycket har föråldrats och kommer att tas bort i en framtida Python-version. Flaggor i början av ett reguljärt uttryck är fortfarande tillåtna. (Bidrag från Serhiy Storchaka i bpo-22493.)

ssl

OpenSSL 0.9.8, 1.0.0 och 1.0.1 är föråldrade och stöds inte längre. I framtiden kommer modulen ssl att kräva minst OpenSSL 1.0.2 eller 1.1.0.

SSL-relaterade argument som certfile, keyfile och check_hostname i ftplib, http.client, imaplib, poplib och smtplib har utgått till förmån för context. (Bidrag från Christian Heimes i bpo-28022.)

Ett par protokoll och funktioner i modulen ssl är nu föråldrade. Vissa funktioner kommer inte längre att vara tillgängliga i framtida versioner av OpenSSL. Andra funktioner är utfasade till förmån för ett annat API. (Bidrag från Christian Heimes i bpo-28022 och bpo-26470.)

tkinter

Modulen tkinter.tix är nu föråldrad. tkinter-användare bör använda tkinter.ttk istället.

ven

Skriptet pyvenv har utgått till förmån för python3 -m venv. Detta förhindrar förvirring om vilken Python-tolk pyvenv är ansluten till och därmed vilken Python-tolk som kommer att användas av den virtuella miljön. (Bidrag från Brett Cannon i bpo-25154.)

xml

  • Som en åtgärd mot hämtning av DTD:er och externa entiteter bearbetar modulerna xml.dom.minidom och xml.sax inte längre externa entiteter som standard. (Bidrag från Christian Heimes i gh-61441.)

Föråldrade funktioner och typer i C API

Odokumenterade funktioner PyUnicode_AsEncodedObject(), PyUnicode_AsDecodedObject(), PyUnicode_AsEncodedUnicode() och PyUnicode_AsDecodedUnicode() är nu föråldrade. Använd generisk codec-baserad API istället.

Föråldrade byggalternativ

Konfigurationsflaggan --with-system-ffi är nu aktiverad som standard på UNIX-plattformar som inte är macOS. Den kan inaktiveras genom att använda --without-system-ffi, men att använda flaggan är föråldrat och kommer inte att accepteras i Python 3.7. macOS påverkas inte av denna ändring. Observera att många OS-distributörer redan använder flaggan --with-system-ffi när de bygger sina Python-system.

Borttagen

Borttagning av API och funktioner

  • Okända escapes bestående av '\' och en ASCII-bokstav i reguljära uttryck kommer nu att orsaka ett fel. I ersättningsmallar för re.sub() är de fortfarande tillåtna, men föråldrade. Flaggan re.LOCALE kan nu endast användas med binära mönster.

  • inspect.getmoduleinfo() togs bort (var föråldrad sedan CPython 3.3). inspect.getmodulename() bör användas för att få fram modulnamnet för en given sökväg. (Bidrag från Yury Selivanov i bpo-13248.)

  • klassen traceback.Ignore och metoderna traceback.usage, traceback.modname, traceback.fullmodname, traceback.find_lines_from_code, traceback.find_lines, traceback.find_strings, traceback.find_executable_lines togs bort från modulen traceback. De var odokumenterade metoder som utgått sedan Python 3.2 och motsvarande funktionalitet är tillgänglig från privata metoder.

  • Dummy-metoderna tk_menuBar() och tk_bindForTraversal() i widgetklasserna tkinter togs bort (motsvarande Tk-kommandon var föråldrade sedan Tk 4.0).

  • Metoden open() i klassen zipfile.ZipFile stöder inte längre läget 'U' (har inte använts sedan Python 3.4). Använd io.TextIOWrapper för att läsa komprimerade textfiler i universal newlines-läge.

  • De odokumenterade modulerna IN, CDROM, DLFCN, TYPES, CDIO och STROPTS har tagits bort. De har funnits tillgängliga i de plattformsspecifika katalogerna Lib/plat-*/, men var kroniskt föråldrade, inkonsekvent tillgängliga på olika plattformar och ounderhållna. Skriptet som skapade dessa moduler finns fortfarande tillgängligt i källdistributionen på Tools/scripts/h2py.py.

  • Den föråldrade klassen asynchat.fifo har tagits bort.

Portning till Python 3.6

I det här avsnittet listas tidigare beskrivna ändringar och andra buggfixar som kan kräva ändringar i din kod.

Ändringar i beteendet för kommandot ”python

  • Utdata från en speciell Python-byggnad med definierade makron COUNT_ALLOCS, SHOW_ALLOC_COUNT eller SHOW_TRACK_COUNT är nu avstängd som standard. Det kan återaktiveras med alternativet -X showalloccount. Det matas nu ut till stderr istället för stdout. (Bidrag från Serhiy Storchaka i bpo-23034.)

Ändringar i Python API

  • open() tillåter inte längre att kombinera lägesflaggan 'U' med '+'. (Bidrag från Jeff Balogh och John O’Connor i bpo-2091.)

  • sqlite3 genomför inte längre implicit en öppen transaktion före DDL-satser.

  • På Linux blockerar os.urandom() nu tills systemets urandom-entropipool har initialiserats för att öka säkerheten.

  • När importlib.abc.Loader.exec_module() definieras måste även importlib.abc.Loader.create_module() definieras.

  • PyErr_SetImportError() sätter nu TypeError när dess msg-argument inte är satt. Tidigare returnerades endast NULL.

  • Formatet för attributet co_lnotab för kodobjekt ändrades för att stödja ett negativt radnummerdelta. Som standard emitterar Python inte bytekod med ett negativt radnummerdelta. Funktioner som använder frame.f_lineno, PyFrame_GetLineNumber() eller PyCode_Addr2Line() påverkas inte. Funktioner som direkt avkodar co_lnotab bör uppdateras för att använda en signerad 8-bitars heltalstyp för radnummerdeltaet, men detta krävs endast för att stödja applikationer som använder ett negativt radnummerdelta. Se Objects/lnotab_notes.txt för co_lnotab-formatet och hur man avkodar det, och se PEP 511 för motiveringen.

  • Funktionerna i modulen compileall returnerar nu booleaner istället för 1 eller 0 för att representera framgång respektive misslyckande. Tack vare att booleans är en underklass till heltal, bör detta endast vara ett problem om du gör identitetskontroller för 1 eller 0. Se bpo-25768.

  • Att läsa attributet port av resultaten urllib.parse.urlsplit() och urlparse() ger nu upphov till ValueError för värden utanför intervallet, istället för att returnera None. Se bpo-20059.

  • Modulen imp ger nu upphov till en DeprecationWarning istället för PendingDeprecationWarning.

  • Följande moduler har fått saknade API:er tillagda i sina __all__-attribut för att matcha de dokumenterade API:erna: calendar, cgi, csv, ElementTree, enum, fileinput, ftplib, logging, mailbox, mimetypes, optparse, plistlib, smtpd, subprocess, tarfile, threading och wave. Detta innebär att de kommer att exportera nya symboler när import * används. (Bidrag från Joel Taddei och Jacek Kołodziej i bpo-23883.)

  • Vid relativ import, om __package__ inte jämför lika med __spec__.parent så kommer ImportWarning att visas. (Bidrag från Brett Cannon i bpo-25791.)

  • När en relativ import utförs och inget överordnat paket är känt, kommer ImportError att visas. Tidigare kunde SystemError visas. (Bidrag från Brett Cannon i bpo-18018.)

  • Servrar som baseras på modulen socketserver, inklusive de som definieras i http.server, xmlrpc.server och wsgiref.simple_server, fångar nu bara upp undantag som härrör från Exception. Därför, om en request hanterare ger upphov till ett undantag som SystemExit eller KeyboardInterrupt, anropas inte längre handle_error(), och undantaget kommer att stoppa en enkeltrådad server. (Bidrag från Martin Panter i bpo-23430.)

  • spwd.getspnam() ger nu upphov till PermissionError istället för KeyError om användaren inte har behörighet.

  • Metoden socket.socket.close() ger nu upphov till ett undantag om ett fel (t.ex. EBADF) rapporterades av det underliggande systemanropet. (Bidrag från Martin Panter i bpo-26685.)

  • Argumentet decode_data för konstruktörerna smtpd.SMTPChannel och smtpd.SMTPServer är nu False som standard. Detta innebär att argumentet som skickas till process_message() nu är ett bytes-objekt som standard, och process_message() kommer att skickas nyckelordsargument. Kod som redan har uppdaterats i enlighet med deprecation-varningen som genererades av 3.5 kommer inte att påverkas.

  • Alla valfria argument i funktionerna dump(), dumps(), load() och loads() och klasskonstruktörerna JSONEncoder och JSONDecoder i modulen json är nu keyword-only. (Bidrag från Serhiy Storchaka i bpo-18726.)

  • Underklasser till type som inte åsidosätter type.__new__ får inte längre använda formuläret med ett argument för att få fram typen av ett objekt.

  • Som en del av PEP 487, är hanteringen av nyckelordsargument som skickas till type (andra än metaklasstipset, metaclass) nu konsekvent delegerad till object.__init_subclass__(). Detta innebär att type.__new__() och type.__init__() båda nu accepterar godtyckliga nyckelordsargument, men object.__init_subclass__() (som anropas från type.__new__()) kommer att avvisa dem som standard. Anpassade metaklasser som accepterar ytterligare nyckelordsargument kommer att behöva justera sina anrop till type.__new__() (antingen direkt eller via super) i enlighet med detta.

  • I distutils.command.sdist.sdist har attributet default_format tagits bort och används inte längre. Istället är det gzippade tarfilformatet standard på alla plattformar och inget plattformsspecifikt val görs. I miljöer där distributioner byggs på Windows och zip-distributioner krävs, konfigurerar du projektet med en setup.cfg-fil som innehåller följande:

    [sdist]
    format=zip
    

    Detta beteende har också backporterats till tidigare Python-versioner av Setuptools 26.0.0.

  • I urllib.request-modulen och http.client.HTTPConnection.request()-metoden, om inget Content-Length-huvudfält har angetts och begäran är ett filobjekt, skickas det nu med HTTP 1.1 chunked-kodning. Om ett filobjekt måste skickas till en HTTP 1.0-server måste nu Content-Length-värdet anges av den som anropar. (Bidrag från Demian Brecht och Rolf Krahl med tweaks från Martin Panter i bpo-12319.)

  • DictReader returnerar nu rader av typen OrderedDict. (Bidrag från Steve Holden i bpo-27842.)

  • crypt.METHOD_CRYPT kommer inte längre att läggas till i crypt.methods om den inte stöds av plattformen. (Bidrag från Victor Stinner i bpo-25287.)

  • Argumenten verbose och rename för namedtuple() är nu endast nyckelord. (Bidrag från Raymond Hettinger i bpo-25628.)

  • På Linux letar ctypes.util.find_library() nu i LD_LIBRARY_PATH efter delade bibliotek. (Bidrag från Vinay Sajip i bpo-9998.)

  • Klassen imaplib.IMAP4 hanterar nu flaggor som innehåller tecknet ']' i meddelanden som skickas från servern för att förbättra kompatibiliteten i verkligheten. (Bidrag från Lita Cho i bpo-21815.)

  • Funktionen mmap.write() returnerar nu antalet byte som skrivits, precis som andra skrivmetoder. (Bidrag från Jakub Stasiak i bpo-26335.)

  • Funktionerna pkgutil.iter_modules() och pkgutil.walk_packages() returnerar nu ModuleInfo namngivna tuples. (Bidrag från Ramchandra Apte i bpo-17211.)

  • re.sub() ger nu upphov till ett felmeddelande för ogiltiga numeriska gruppreferenser i ersättningsmallar även om mönstret inte finns i strängen. Felmeddelandet för ogiltiga gruppreferenser innehåller nu gruppindex och referensens position. (Bidrag från SilentGhost, Serhiy Storchaka i bpo-25953.)

  • zipfile.ZipFile kommer nu att ge upphov till NotImplementedError för okända komprimeringsvärden. Tidigare gavs ett vanligt RuntimeError. Dessutom kommer anrop av ZipFile-metoder på en stängd ZipFile eller anrop av write()-metoden på en ZipFile skapad med läge 'r' att ge upphov till ett ValueError. Tidigare gavs ett RuntimeError i dessa scenarier.

  • när anpassade metaklasser kombineras med nollargument super() eller direkta referenser från metoder till den implicita __class__ stängningsvariabeln, måste den implicita __classcell__ namnrymdsposten nu skickas upp till type.__new__ för initialisering. Om detta inte görs kommer det att resultera i en DeprecationWarning i Python 3.6 och en RuntimeError i Python 3.8.

  • Med introduktionen av ModuleNotFoundError, kan importsystemkonsumenter börja förvänta sig att importsystemersättare ska lyfta det mer specifika undantaget när det är lämpligt, snarare än det mindre specifika ImportError. För att ge framtida kompatibilitet med sådana konsumenter måste implementatörer av alternativa importsystem som helt ersätter __import__() uppdatera sina implementationer så att de ger upphov till den nya underklassen när en modul inte kan hittas alls. Implementatörer av kompatibla tillägg till standardimportsystemet bör inte behöva göra några ändringar, eftersom standardimportsystemet kommer att visa den nya underklassen när så är lämpligt.

Förändringar i C API

  • Allokeringsfamiljen PyMem_Malloc() använder nu pymalloc allocator istället för systemets malloc(). Program som anropar PyMem_Malloc() utan att ha GIL:en kan nu krascha. Sätt miljövariabeln PYTHONMALLOC till debug för att validera användningen av minnesallokatorer i ditt program. Se bpo-26249.

  • Py_Exit() (och huvudtolken) åsidosätter nu utgångsstatusen med 120 om spolningen av buffrade data misslyckades. Se bpo-5319.

CPython bytecode-ändringar

Det har skett flera stora förändringar av bytecode i Python 3.6.

  • Python-tolken använder nu en 16-bitars ordkod istället för bytekod. (Bidrag från Demur Rumed med input och recensioner från Serhiy Storchaka och Victor Stinner i bpo-26647 och bpo-28050.)

  • De nya opkoderna FORMAT_VALUE och BUILD_STRING som en del av implementationen formatted string literal. (Bidrag från Eric Smith i bpo-25483 och Serhiy Storchaka i bpo-27078.)

  • Den nya BUILD_CONST_KEY_MAP opcode för att optimera skapandet av ordböcker med konstanta nycklar. (Bidrag från Serhiy Storchaka i bpo-27140.)

  • Opkoderna för funktionsanrop har omarbetats kraftigt för bättre prestanda och enklare implementering. Opkoderna MAKE_FUNCTION, CALL_FUNCTION, CALL_FUNCTION_KW och BUILD_MAP_UNPACK_WITH_CALL har modifierats, de nya CALL_FUNCTION_EX och BUILD_TUPLE_UNPACK_WITH_CALL har lagts till, och opkoderna CALL_FUNCTION_VAR, CALL_FUNCTION_VAR_KW och MAKE_CLOSURE har tagits bort. (Bidrag från Demur Rumed i bpo-27095, och Serhiy Storchaka i bpo-27213, bpo-28257.)

  • De nya opkoderna SETUP_ANNOTATIONS och STORE_ANNOTATION har lagts till för att stödja den nya syntaxen variable annotation. (Bidrag från Ivan Levkivskyi i bpo-27985.)

Viktiga ändringar i Python 3.6.2

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

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

Viktiga ändringar i Python 3.6.4

Singletonen PyExc_RecursionErrorInst som var en del av det publika API:et har tagits bort eftersom dess medlemmar aldrig rensas och detta kan orsaka ett segfault under slutförandet av tolken. (Bidrag från Xavier de Gaye i bpo-22898 och bpo-30697.)

Viktiga ändringar i Python 3.6.5

Funktionen locale.localeconv() ställer nu temporärt in LC_CTYPE locale till LC_NUMERIC locale i vissa fall. (Bidrag från Victor Stinner i bpo-31900.)

Viktiga ändringar i Python 3.6.7

modulerna xml.dom.minidom och xml.sax bearbetar inte längre externa enheter som standard. Se även gh-61441.

I 3.6.7 ger modulen tokenize nu implicit ut en NEWLINE-token när den förses med indata som inte har en efterföljande ny rad. Detta beteende matchar nu vad C-tokenizer gör internt. (Bidrag från Ammar Askar i bpo-33899.)

Anmärkningsvärda ändringar i Python 3.6.10

På grund av betydande säkerhetsproblem stöds inte längre parametern reuse_address i asyncio.loop.create_datagram_endpoint(). Detta beror på beteendet hos socket-alternativet SO_REUSEADDR i UDP. För mer information, se dokumentationen för loop.create_datagram_endpoint(). (Bidrag från Kyle Stanley, Antoine Pitrou och Yury Selivanov i bpo-37228.)

Viktiga ändringar i Python 3.6.13

Tidigare Python-versioner tillät användning av både ; och & som separatorer för frågeparametrar i urllib.parse.parse_qs() och urllib.parse.parse_qsl(). På grund av säkerhetsproblem och för att överensstämma med nyare W3C-rekommendationer har detta ändrats så att endast en enda separatornyckel tillåts, med & som standard. Denna ändring påverkar även cgi.parse() och cgi.parse_multipart() eftersom de använder de berörda funktionerna internt. För mer information, se deras respektive dokumentation. (Bidrag från Adam Goldschmidt, Senthil Kumaran och Ken Jin i bpo-42967.)

Viktiga ändringar i Python 3.6.14

En säkerhetsfix ändrar ftplib.FTP-beteendet så att det inte litar på den IPv4-adress som skickas från fjärrservern när en passiv datakanal sätts upp. Vi återanvänder istället ftp-serverns IP-adress. För ovanlig kod som kräver det gamla beteendet, ställ in attributet trust_server_pasv_ipv4_address på din FTP-instans till True. (Se gh-87451)

Förekomsten av newline- eller tabb-tecken i delar av en URL möjliggör vissa former av attacker. I enlighet med WHATWG-specifikationen som uppdaterar RFC 3986, tas ASCII-tecken för ny rad n, r och tabb t bort från URL:en av parsern urllib.parse() för att förhindra sådana attacker. De borttagna tecknen styrs av en ny variabel på modulnivå, urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE. (Se gh-88048)