Vad är nytt i Python 3.4

Författare:

R. David Murray <rdmurray@bitdance.com> (redaktör)

I den här artikeln förklaras de nya funktionerna i Python 3.4 jämfört med 3.3. Python 3.4 släpptes den 16 mars 2014. För fullständig information, se changelog.

Se även

PEP 429 – Python 3.4 Utgivningsschema

Sammanfattning – Release Highlights

Nya syntaxfunktioner:

  • Inga nya syntaxfunktioner har lagts till i Python 3.4.

Andra nya funktioner:

Nya biblioteksmoduler:

Betydligt förbättrade biblioteksmoduler:

Förbättringar av säkerheten:

Förbättringar av CPython-implementeringen:

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 453: Explicit bootstrapping av PIP i Python-installationer

Bootstrapping pip som standard

Den nya modulen ensurepip (definierad i PEP 453) tillhandahåller en plattformsoberoende standardmekanism för att starta upp pip-installationsprogrammet i Python-installationer och virtuella miljöer. Den version av pip som ingår i Python 3.4.0 är pip 1.5.4, och framtida underhållsutgåvor av 3.4.x kommer att uppdatera den medföljande versionen till den senaste versionen av pip som är tillgänglig vid tidpunkten för skapandet av releasekandidat.

Som standard installeras kommandona pipX och pipX.Y på alla plattformar (där X.Y står för versionen av Python-installationen), tillsammans med Python-paketet pip och dess beroenden. I Windows och i virtuella miljöer på alla plattformar installeras även det oversionerade kommandot pip. På andra plattformar hänvisar det systemomfattande kommandot pip unversioned vanligtvis till den separat installerade Python 2-versionen.

Kommandoradsverktyget pyvenv och modulen venv` använder modulen ensurepip` för att göra pip lättillgängligt i virtuella miljöer. När kommandoradsverktyget används installeras pip som standard, medan installation av pip måste begäras uttryckligen när modulen venv API används.

För CPython source builds på POSIX-system, bootstrappar kommandona make install och make altinstall pip som standard. Detta beteende kan kontrolleras genom configure-alternativ och åsidosättas genom Makefile-alternativ.

På Windows och Mac OS X installerar CPython-installatörerna nu som standard pip tillsammans med CPython själv (användare kan välja bort att installera det under installationsprocessen). Windows-användare måste välja de automatiska PATH-ändringarna för att pip ska vara tillgängligt från kommandoraden som standard, annars kan det fortfarande nås via Python-startprogrammet för Windows som py -m pip.

Som diskuteras i PEP kan plattformspaketörer välja att inte installera dessa kommandon som standard, så länge som de, när de anropas, ger tydliga och enkla anvisningar om hur de installeras på den plattformen (vanligtvis med hjälp av systempakethanteraren).

Anteckning

För att undvika konflikter mellan parallella Python 2- och Python 3-installationer startas endast de versionerade kommandona pip3 och pip3.4 som standard när ensurepip anropas direkt - alternativet --default-pip behövs för att även begära det oversionerade kommandot pip. pyvenv och Windows-installationsprogrammet säkerställer att det okvalificerade kommandot pip görs tillgängligt i dessa miljöer, och pip kan alltid anropas via -m-omkopplaren istället för direkt för att undvika tvetydighet på system med flera Python-installationer.

Förändringar i dokumentation

Som en del av denna förändring har avsnitten Installera Python-moduler och Distribuera Python-moduler i dokumentationen helt omarbetats till korta dokument om att komma igång och vanliga frågor. Den mesta förpackningsdokumentationen har nu flyttats ut till Python Packaging Authoritys underhållna Python Packaging User Guide och dokumentationen för de enskilda projekten.

Men eftersom den här migreringen för närvarande fortfarande är ofullständig, finns de äldre versionerna av dessa guider fortfarande tillgängliga som Bygga C- och C++-tillägg med setuptools och Bygga C- och C++-tillägg med setuptools.

Se även

PEP 453 – Explicit bootstrapping av pip i Python-installationer

PEP skriven av Donald Stufft och Nick Coghlan, implementerad av Donald Stufft, Nick Coghlan, Martin von Löwis och Ned Deily.

PEP 446: Nyskapade filbeskrivare är inte ärftliga

PEP 446 gör nyskapade filbeskrivare icke-ärftliga. I allmänhet är detta det beteende som ett program vill ha: när en ny process startas kan det leda till alla möjliga svårfunna buggar och potentiellt till säkerhetsproblem om filer som för närvarande är öppna också är öppna i den nya processen.

Det finns dock tillfällen då arv är önskvärt. För att stödja dessa fall finns följande nya funktioner och metoder tillgängliga:

Se även

PEP 446 – Gör nyskapade filbeskrivare icke-ärftliga

PEP skrivet och implementerat av Victor Stinner.

Förbättringar av Codec-hantering

Sedan den först introducerades har modulen codecs alltid varit avsedd att fungera som ett typneutralt dynamiskt kodnings- och avkodningssystem. Men dess nära koppling till Pythons textmodell, särskilt de typbegränsade bekvämlighetsmetoderna för de inbyggda typerna str, bytes och bytearray, har historiskt sett dolt detta faktum.

Som ett viktigt steg i att klargöra situationen är bekvämlighetsfunktionerna codecs.encode() och codecs.decode() nu korrekt dokumenterade i Python 2.7, 3.3 och 3.4. Dessa funktioner har funnits i modulen codecs (och har täckts av regressionstestsviten) sedan Python 2.4, men var tidigare endast upptäckbara genom introspektion under körning.

Till skillnad från bekvämlighetsmetoderna för str, bytes och bytearray stöder codecs bekvämlighetsfunktioner godtyckliga codecs i både Python 2 och Python 3, snarare än att vara begränsade till Unicode-textkodningar (i Python 3) eller basstrings <-> basstrings-konverteringar (i Python 2).

I Python 3.4 kan tolken identifiera de kända icke-textkodningar som finns i standardbiblioteket och hänvisa användare till dessa allmänna bekvämlighetsfunktioner när det är lämpligt:

>>> b"abcdef".decode("hex")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs

>>> "hello".encode("rot13")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'rot13' is not a text encoding; use codecs.encode() to handle arbitrary codecs

>>> open("foo.txt", encoding="hex")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'hex' is not a text encoding; use codecs.open() to handle arbitrary codecs

I en relaterad ändring, när det är möjligt utan att bryta bakåtkompatibiliteten, är undantag som uppstår under kodnings- och avkodningsoperationer inslagna i ett kedjat undantag av samma typ som nämner namnet på den codec som är ansvarig för att producera felet:

>>> import codecs

>>> codecs.decode(b"abcdefgh", "hex")
Traceback (most recent call last):
  File "/usr/lib/python3.4/encodings/hex_codec.py", line 20, in hex_decode
    return (binascii.a2b_hex(input), len(input))
binascii.Error: Non-hexadecimal digit found

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

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
binascii.Error: decoding with 'hex' codec failed (Error: Non-hexadecimal digit found)

>>> codecs.encode("hello", "bz2")
Traceback (most recent call last):
  File "/usr/lib/python3.4/encodings/bz2_codec.py", line 17, in bz2_encode
    return (bz2.compress(input), len(input))
  File "/usr/lib/python3.4/bz2.py", line 498, in compress
    return comp.compress(data) + comp.flush()
TypeError: 'str' does not support the buffer interface

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

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: encoding with 'bz2' codec failed (TypeError: 'str' does not support the buffer interface)

Slutligen, som exemplen ovan visar, har dessa förbättringar gjort det möjligt att återställa de praktiska alias för icke-Unicode-codecs som själva återställdes i Python 3.2. Detta innebär att kodning av binära data till och från dess hexadecimala representation (till exempel) nu kan skrivas som:

>>> from codecs import encode, decode
>>> encode(b"hello", "hex")
b'68656c6c6f'
>>> decode(b"68656c6c6f", "hex")
b'hello'

De binär- och texttransformationer som finns i standardbiblioteket beskrivs närmare i Binära transformationer och Text omvandlas.

(Bidrag från Nick Coghlan i bpo-7475, bpo-17827, bpo-17828 och bpo-19619.)

PEP 451: En ModuleSpec-typ för importsystemet

PEP 451 tillhandahåller en inkapsling av informationen om en modul som importmaskineriet kommer att använda för att ladda den (det vill säga en modulspecifikation). Detta hjälper till att förenkla både importimplementationen och flera importrelaterade API:er. Ändringen är också en språngbräda för flera framtida importrelaterade förbättringar.

De ändringar från PEP som vänder sig till allmänheten är helt bakåtkompatibla. Dessutom bör de vara transparenta för alla utom importörsförfattare. Metoderna för nyckelsökare och laddare har utgått, men de kommer att fortsätta att fungera. Nya importörer bör använda de nya metoder som beskrivs i PEP. Befintliga importörer bör uppdateras för att implementera de nya metoderna. Se avsnittet Föråldrat för en lista över metoder som bör ersättas och deras ersättare.

Andra språkliga förändringar

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

  • Unicode-databasen uppdaterad till UCD version 6.3.

  • min() och max() accepterar nu ett default nyckelordsargument som kan användas för att ange det värde de returnerar om den iterabel de utvärderar inte har några element. (Bidrag från Julian Berman i bpo-18111.)

  • Modulobjekt är nu svagt refererbara.

  • Modulens __file__-attribut (och relaterade värden) ska nu alltid innehålla absoluta sökvägar som standard, med undantag för __main__.__file__ när ett skript har exekverats direkt med en relativ sökväg. (Bidrag från Brett Cannon i bpo-18416.)

  • Alla UTF-*-codecs (utom UTF-7) avvisar nu surrogat under både kodning och avkodning om inte felhanteraren surrogatepass används, med undantag för UTF-16-avkodaren (som accepterar giltiga surrogatpar) och UTF-16-kodaren (som producerar dem vid kodning av icke-BMP-tecken). (Bidrag från Victor Stinner, Kang-Hao (Kenny) Lu och Serhiy Storchaka i bpo-12892.)

  • Ny tysk EBCDIC codec cp273. (Bidrag från Michael Bierenfeld och Andrew Kuchling i bpo-1097797.)

  • Ny ukrainsk codec cp1125. (Bidrag från Serhiy Storchaka i bpo-19668.)

  • bytes.join() och bytearray.join() accepterar nu godtyckliga buffertobjekt som argument. (Bidrag från Antoine Pitrou i bpo-15958.)

  • Konstruktorn int accepterar nu alla objekt som har en __index__-metod för sitt base-argument. (Bidrag från Mark Dickinson i bpo-16772.)

  • Frame-objekt har nu en clear()-metod som rensar alla referenser till lokala variabler från ramen. (Bidrag från Antoine Pitrou i bpo-17934.)

  • memoryview är nu registrerad som en Sequence, och stödjer reversed() builtin. (Bidrag från Nick Coghlan och Claudiu Popa i bpo-18690 och bpo-19078.)

  • Signaturer som rapporteras av help() har modifierats och förbättrats i flera fall som ett resultat av införandet av Argument Clinic och andra ändringar i modulerna inspect och pydoc.

  • __length_hint__() är nu en del av den formella språkspecifikationen (se PEP 424). (Bidrag från Armin Ronacher i bpo-16148.)

Nya moduler

asyncio

Den nya modulen asyncio (definierad i PEP 3156) tillhandahåller en standardiserad pluggbar modell för händelseslingor i Python, vilket ger ett gediget stöd för asynkron IO i standardbiblioteket och gör det enklare för andra implementeringar av händelseslingor att samverka med standardbiblioteket och varandra.

För Python 3.4 anses denna modul vara ett provisoriskt API.

Se även

PEP 3156 – Asynkront IO-stöd återstartat: modulen ”asyncio”

PEP skrivs och genomförandet leds av Guido van Rossum.

säkerställa pip

Den nya modulen ensurepip är den primära infrastrukturen för implementeringen av PEP 453. I normala fall behöver slutanvändarna inte interagera med den här modulen, men den kan användas för att manuellt starta upp pip om den automatiska uppstarten till en installation eller virtuell miljö inte fungerar.

ensurepip innehåller en buntad kopia av pip, uppdaterad från och med den första releasekandidaten för den version av CPython som den levereras med (detta gäller både underhållsreleaser och funktionsreleaser). ensurepip har inte tillgång till internet. Om installationen har tillgång till Internet, efter att ensurepip har körts, kan den medföljande pip användas för att uppgradera pip till en nyare version än den medföljande. (Observera att en sådan uppgraderad version av pip anses vara ett separat installerat paket och kommer inte att tas bort om Python avinstalleras)

Modulen heter ensure pip eftersom den inte gör någonting om den anropas när pip redan är installerat. Den har också ett alternativ --upgrade som gör att den installerar den medföljande kopian av pip om den befintliga installerade versionen av pip är äldre än den medföljande kopian.

enum

Den nya modulen enum (definierad i PEP 435) ger en standardimplementering av uppräkningstyper, vilket gör att andra moduler (t.ex. socket) kan ge mer informativa felmeddelanden och bättre felsökningsstöd genom att ersätta opaka heltalskonstanter med bakåtkompatibla uppräkningsvärden.

Se även

PEP 435 – Lägga till en Enum-typ i Pythons standardbibliotek

PEP skriven av Barry Warsaw, Eli Bendersky och Ethan Furman, implementerad av Ethan Furman.

sökväg

Den nya modulen pathlib erbjuder klasser som representerar sökvägar i filsystemet med semantik som är lämplig för olika operativsystem. Sökvägsklasserna är uppdelade i rena sökvägar, som tillhandahåller rena beräkningsoperationer utan I/O, och konkreta sökvägar, som ärver från rena sökvägar men också tillhandahåller I/O-operationer.

För Python 3.4 anses denna modul vara ett provisoriskt API.

Se även

PEP 428 – Pathlib-modulen – objektorienterade sökvägar i filsystemet

PEP skrivet och genomfört av Antoine Pitrou.

väljare

Den nya modulen selectors (skapad som en del av implementeringen av PEP 3156) möjliggör högnivå och effektiv I/O-multiplexering, byggd på select-modulens primitiver.

statistik

Den nya modulen statistics (definierad i PEP 450) erbjuder en del grundläggande statistikfunktioner direkt i standardbiblioteket. Denna modul stöder beräkning av medelvärde, median, läge, varians och standardavvikelse för en dataserie.

Se även

PEP 450 – Lägga till en statistikmodul i standardbiblioteket

PEP skrivet och implementerat av Steven D’Aprano

tracemalloc

Den nya modulen tracemalloc (definierad i PEP 454) är ett felsökningsverktyg för att spåra minnesblock som allokerats av Python. Den ger följande information:

  • Spåra var ett objekt allokerades

  • Statistik över allokerade minnesblock per filnamn och radnummer: total storlek, antal och genomsnittlig storlek på allokerade minnesblock

  • Beräkna skillnaderna mellan två ögonblicksbilder för att upptäcka minnesläckor

Se även

PEP 454 – Lägg till en ny tracemalloc-modul för att spåra Python-minnesallokeringar

PEP skrivet och implementerat av Victor Stinner

Förbättrade moduler

abc

Ny funktion abc.get_cache_token() kan användas för att veta när cacher som påverkas av ändringar i objektgrafen ska ogiltigförklaras. (Bidrag från Łukasz Langa i bpo-16832.)

Den nya klassen ABC har ABCMeta som metaklass. Att använda ABC som basklass har i stort sett samma effekt som att ange metaclass=abc.ABCMeta, men är enklare att skriva och lättare att läsa. (Bidrag från Bruno Dupuis i bpo-16049.)

aifc

Metoden getparams() returnerar nu en namngiven tupel istället för en vanlig tupel. (Bidrag från Claudiu Popa i bpo-17818.)

aifc.open() har nu stöd för kontexthanteringsprotokollet: när det används i ett with-block kommer close()-metoden för det returnerade objektet att anropas automatiskt i slutet av blocket. (Bidrag från Serhiy Storchacha i bpo-16486.)

Metoderna writeframesraw() och writeframes() accepterar nu alla bytes-like object. (Bidrag från Serhiy Storchaka i bpo-8311.)

argparse

Klassen FileType accepterar nu encoding och errors argument, som skickas vidare till open(). (Bidrag från Lucas Maystre i bpo-11175.)

audioop

audioop stöder nu 24-bitars samplingar. (Bidrag från Serhiy Storchaka i bpo-12866.)

Ny byteswap()-funktion konverterar big-endian-samplingar till little-endian och vice versa. (Bidrag från Serhiy Storchaka i bpo-19641.)

Alla audioop-funktioner accepterar nu alla bytesliknande objekt. Strängar accepteras inte: de fungerade inte tidigare, nu ger de upphov till ett fel direkt. (Bidrag från Serhiy Storchaka i bpo-16685.)

base64

Kodnings- och avkodningsfunktionerna i base64 accepterar nu alla bytesliknande objekt i fall där det tidigare krävdes en instans av bytes eller bytearray. (Bidrag från Nick Coghlan i bpo-17839.)

Nya funktioner a85encode(), a85decode(), b85encode(), och b85decode() ger möjlighet att koda och avkoda binärdata från och till Ascii85 respektive git/mercurial Base85-formaten. Funktionerna i a85 har alternativ som kan användas för att göra dem kompatibla med olika varianter av kodningen Ascii85, inklusive Adobe-varianten. (Bidrag från Martin Morrison, Mercurial-projektet, Serhiy Storchaka och Antoine Pitrou i bpo-17618.)

samlingar

Metoden ChainMap.new_child() accepterar nu ett m-argument som anger den underordnade mappningen som ska läggas till i kedjan. Detta gör att en befintlig mappning och/eller en anpassad mappningstyp kan användas för barnet. (Bidrag från Vinay Sajip i bpo-16613.)

färgämnen

Antalet siffror i koefficienterna för RGB — YIQ-konverteringarna har utökats så att de stämmer överens med FCC NTSC-versionerna. Förändringen i resultat bör vara mindre än 1% a och kan bättre matcha resultat som finns på andra ställen. (Bidrag från Brian Landers och Serhiy Storchaka i bpo-14323.)

contextlib

Den nya contextlib.suppress kontexthanteraren hjälper till att klargöra avsikten med kod som avsiktligt undertrycker undantag från ett enda uttalande. (Bidrag från Raymond Hettinger i bpo-15806 och Zero Piraeus i bpo-19266.)

Den nya kontexthanteraren contextlib.redirect_stdout() gör det enklare för verktygsskript att hantera oflexibla API:er som skriver utdata till sys.stdout och inte ger några alternativ för att omdirigera den. Med hjälp av kontexthanteraren kan utdata från sys.stdout omdirigeras till valfri annan ström eller, i kombination med io.StringIO, till en sträng. Det senare kan vara särskilt användbart, till exempel för att fånga utdata från en funktion som skrevs för att implementera ett kommandoradsgränssnitt. Det rekommenderas endast för verktygsskript eftersom det påverkar det globala tillståndet för sys.stdout. (Bidrag från Raymond Hettinger i bpo-15805.)

Dokumentationen contextlib har också uppdaterats med en discussion om skillnaderna mellan single use, reusable och reentrant context managers.

dbm

dbm.open()-objekt har nu stöd för kontexthanteringsprotokollet. När det används i en with-sats kommer databasobjektets close-metod att anropas automatiskt i slutet av blocket. (Bidrag från Claudiu Popa och Nick Coghlan i bpo-19282.)

dis

Funktionerna show_code(), dis(), distb() och disassemble() accepterar nu ett file-argument som endast innehåller nyckelord och som styr var de skriver sina utdata.

Modulen dis är nu uppbyggd kring en klass Instruction som ger objektorienterad tillgång till detaljerna i varje enskild bytecode-operation.

En ny metod, get_instructions(), tillhandahåller en iterator som emitterar instruktionsflödet för en viss del av Python-koden. Det är alltså nu möjligt att skriva ett program som inspekterar och manipulerar ett bytecode-objekt på andra sätt än de som tillhandahålls av dis-modulen själv. Till exempel:

>>> import dis
>>> for instr in dis.get_instructions(lambda x: x + 1):
...     print(instr.opname)
LOAD_FAST
LOAD_CONST
BINARY_ADD
RETURN_VALUE

De olika visningsverktygen i modulen dis har skrivits om för att använda dessa nya komponenter.

Dessutom finns en ny applikationsvänlig klass Bytecode som ger ett objektorienterat API för att inspektera bytecode i både läsbar form och för att iterera över instruktioner. Konstruktorn Bytecode tar samma argument som get_instruction() gör (plus en valfri current_offset), och det resulterande objektet kan itereras för att producera Instruction-objekt. Men den har också en dis-metod, som motsvarar anropet dis på konstruktörsargumentet, men returneras som en sträng med flera rader:

>>> bytecode = dis.Bytecode(lambda x: x + 1, current_offset=3)
>>> for instr in bytecode:
...     print('{} ({})'.format(instr.opname, instr.opcode))
LOAD_FAST (124)
LOAD_CONST (100)
BINARY_ADD (23)
RETURN_VALUE (83)
>>> bytecode.dis().splitlines()
['  1           0 LOAD_FAST                0 (x)',
 '      -->     3 LOAD_CONST               1 (1)',
 '              6 BINARY_ADD',
 '              7 RETURN_VALUE']

Bytecode har också en klassmetod, from_traceback(), som ger möjlighet att manipulera en traceback (det vill säga, print(Bytecode.from_traceback(tb).dis()) är likvärdigt med distb(tb)).

(Bidrag från Nick Coghlan, Ryan Kelly och Thomas Kluyver i bpo-11816 och Claudiu Popa i bpo-17916.)

Ny funktion stack_effect() beräknar effekten på Python-stacken av en given opcode och argument, information som inte är tillgänglig på annat sätt. (Bidrag från Larry Hastings i bpo-19722.)

doctest

En ny alternativflagga, FAIL_FAST, stoppar testkörningen så snart det första felet upptäcks. (Bidrag från R. David Murray och Daniel Urban i bpo-16522.)

Kommandoradsgränssnittet doctest använder nu argparse och har två nya alternativ, -o och -f. med -o kan doctest options anges på kommandoraden, och -f är en förkortning för -o FAIL_FAST (för att motsvara det liknande alternativ som stöds av unittest CLI). (Bidrag från R. David Murray i bpo-11390.)

doctest kommer nu att hitta doctests i tilläggsmodulen __doc__ strängar. (Bidrag från Zachary Ware i bpo-3158.)

e-post

as_string() accepterar nu ett policy-argument för att åsidosätta standardpolicyn för meddelandet när en strängrepresentation av det genereras. Detta innebär att as_string nu kan användas under fler omständigheter, istället för att behöva skapa och använda en generator för att skicka formateringsparametrar till dess flatten-metod. (Bidrag från R. David Murray i bpo-18600.)

Ny metod as_bytes() tillagd för att producera en bytesrepresentation av meddelandet på ett sätt som liknar hur as_string producerar en strängrepresentation. Den accepterar inte maxheaderlen-argumentet, men däremot unixfrom- och policy-argumenten. Metoden Message __bytes__() anropar den, vilket innebär att bytes(mymsg) nu kommer att ge det intuitiva resultatet: ett bytesobjekt som innehåller det fullständigt formaterade meddelandet. (Bidrag från R. David Murray i bpo-18600.)

Meddelandet Message.set_param() accepterar nu ett replace nyckelordsargument. När det anges kommer den associerade rubriken att uppdateras utan att ändra dess plats i listan över rubriker. För bakåtkompatibilitet är standardinställningen False. (Bidrag från R. David Murray i bpo-18891.)

Ett par nya underklasser till Message har lagts till (EmailMessage och MIMEPart), tillsammans med en ny undermodul, contentmanager och ett nytt policy-attribut content_manager. All dokumentation finns för närvarande i den nya modulen, som läggs till som en del av email:s nya provisional API. Dessa klasser tillhandahåller ett antal nya metoder som gör det mycket enklare att extrahera innehåll från och infoga innehåll i e-postmeddelanden. För detaljer, se contentmanager dokumentation och email: Exempel. Dessa API-tillägg fullbordar huvuddelen av det arbete som planerades som en del av email6-projektet. Det nuvarande provisoriska API:et är planerat att bli slutgiltigt i Python 3.5 (eventuellt med några mindre tillägg inom området felhantering). (Bidrag från R. David Murray i bpo-18891.)

filecmp

En ny clear_cache()-funktion gör det möjligt att rensa filecmp-jämförelsecachen, som använder os.stat()-information för att avgöra om filen har ändrats sedan den senaste jämförelsen. Detta kan till exempel användas om filen kan ha ändrats och kontrollerats igen på kortare tid än upplösningen av ett visst filsystems fält för filändringstid. (Bidrag från Mark Levitt i bpo-18149.)

Det nya modulattributet DEFAULT_IGNORES innehåller en lista över kataloger som används som standardvärde för parametern ignore i funktionen dircmp(). (Bidrag från Eli Bendersky i bpo-15442.)

functools

Den nya deskriptorn partialmethod() gör det möjligt att använda partiella argument i deskriptorer, precis som partial() gör för vanliga anropsbara metoder. Den nya deskriptorn gör det också lättare att få godtyckliga anropbara metoder (inklusive partial()-instanser) att bete sig som normala instansmetoder när de ingår i en klassdefinition. (Bidrag från Alon Horev och Nick Coghlan i bpo-4331.)

Den nya singledispatch()-dekoratorn ger stöd för generiska funktioner med enkel distribution till Pythons standardbibliotek. Där objektorienterad programmering fokuserar på att gruppera flera operationer på en gemensam uppsättning data i en klass, fokuserar en generisk funktion på att gruppera flera implementeringar av en operation som gör att den kan arbeta med olika typer av data.

Se även

PEP 443 – Generiska funktioner för enstaka leverans

PEP skrivet och genomfört av Łukasz Langa.

total_ordering() stöder nu ett returvärde av NotImplemented från den underliggande jämförelsefunktionen. (Bidrag från Katie Miller i bpo-10042.)

En ren Python-version av partial()-funktionen finns nu i stdlib; i CPython åsidosätts den av den C-accelererade versionen, men den är tillgänglig för andra implementationer att använda. (Bidrag från Brian Thorne i bpo-12428.)

gc

Den nya funktionen get_stats() returnerar en lista med tre lexikon per generation som innehåller statistik över samlingar sedan tolken startades. (Bidrag från Antoine Pitrou i bpo-16351.)

klot

En ny funktion escape() ger ett sätt att undkomma specialtecken i ett filnamn så att de inte blir en del av globbing-expansionen utan istället matchas bokstavligen. (Bidrag från Serhiy Storchaka i bpo-8402.)

hashlib

En ny hashlib.pbkdf2_hmac()-funktion tillhandahåller PKCS#5 lösenordsbaserad nyckeldrivningsfunktion 2. (Bidrag från Christian Heimes i bpo-18582.)

Attributet name för hashlib-hashobjekt är nu ett gränssnitt som stöds formellt. Det har alltid funnits i CPythons hashlib (även om det inte returnerade gemena namn för alla hashar som stöds), men det var inte ett offentligt gränssnitt och därför har vissa andra Python-implementationer inte tidigare stött det. (Bidrag från Jason R. Coombs i bpo-18532.)

hmac

hmac accepterar nu bytearray såväl som bytes för argumentet key till funktionen new(), och parametern msg till både funktionen new() och metoden update() accepterar nu alla typer som stöds av modulen hashlib. (Bidrag från Jonas Borgström i bpo-18240.)

Argumentet digestmod till funktionen hmac.new() kan nu vara vilket hash digest-namn som helst som känns igen av hashlib. Dessutom är det nuvarande beteendet där värdet på digestmod är standardvärdet MD5 föråldrat: i en framtida version av Python kommer det inte att finnas något standardvärde. (Bidrag från Christian Heimes i bpo-17276.)

Med tillägget av attributen block_size och name (och den formella dokumentationen av attributet digest_size), överensstämmer nu modulen hmac helt med API:t PEP 247. (Bidrag från Christian Heimes i bpo-18775.)

html

Ny funktion unescape() konverterar HTML5-teckenreferenser till motsvarande Unicode-tecken. (Bidrag från Ezio Melotti i bpo-2927.)

HTMLParser accepterar ett nytt nyckelordsargument convert_charrefs som, när det är True, automatiskt konverterar alla teckenreferenser. För bakåtkompatibilitet är dess värde som standard False, men det kommer att ändras till True i en framtida version av Python, så du uppmanas att ställa in det uttryckligen och uppdatera din kod för att använda den här nya funktionen. (Bidrag från Ezio Melotti i bpo-13633.)

Argumentet strict i HTMLParser är nu föråldrat. (Bidrag från Ezio Melotti i bpo-15114.)

http

send_error() accepterar nu en valfri ytterligare explain parameter som kan användas för att ge en utökad felbeskrivning, som åsidosätter den hårdkodade standardbeskrivningen om det finns en sådan. Denna utökade felbeskrivning formateras med hjälp av attributet error_message_format och skickas som brödtext i felsvaret. (Bidrag från Karl Cow i bpo-12921.)

http.server kommandoradsgränssnitt har nu ett -b/--bind-alternativ som gör att servern lyssnar på en specifik adress. (Bidrag från Malte Swart i bpo-17764.)

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.3.0, samt ändringar som görs i framtida 3.4.x utgåvor. Denna fil är också tillgänglig från IDLE:s Hjälp ‣ Om IDLE dialogruta.

importlib

ABC:s InspectLoader definierar en ny metod, source_to_code() som accepterar källdata och en sökväg och returnerar ett kodobjekt. Standardimplementeringen är likvärdig med compile(data, path, 'exec', dont_inherit=True). (Bidrag från Eric Snow och Brett Cannon i bpo-15627.)

InspectLoader har nu också en standardimplementation för metoden get_code(). Det kommer dock normalt att vara önskvärt att åsidosätta standardimplementationen av prestandaskäl. (Bidrag från Brett Cannon i bpo-18072.)

Funktionen reload() har flyttats från imp till importlib som en del av imp modulen deprecation. (Bidrag från Berker Peksag i bpo-18193.)

importlib.util har nu ett MAGIC_NUMBER-attribut som ger tillgång till bytekodsversionsnumret. Detta ersätter funktionen get_magic() i den utfasade modulen imp. (Bidrag från Brett Cannon i bpo-18192.)

De nya funktionerna importlib.util cache_from_source() och source_from_cache() ersätter funktionerna med samma namn i den föråldrade modulen imp. (Bidrag från Brett Cannon i bpo-18194.)

importlib bootstrap NamespaceLoader överensstämmer nu med InspectLoader ABC, vilket innebär att runpy och python -m nu kan användas med namespace-paket. (Bidrag från Brett Cannon i bpo-18058.)

importlib.util har en ny funktion decode_source() som avkodar källkod från bytes med hjälp av universal newline processing. Detta är användbart för att implementera InspectLoader.get_source()-metoder.

importlib.machinery.ExtensionFileLoader har nu en get_filename()-metod. Detta utelämnades oavsiktligt i den ursprungliga implementationen. (Bidrag från Eric Snow i bpo-19152.)

inspektera

Modulen inspect erbjuder nu ett grundläggande kommandoradsgränssnitt för att snabbt visa källkod och annan information för moduler, klasser och funktioner. (Bidrag från Claudiu Popa och Nick Coghlan i bpo-18626.)

unwrap() gör det enkelt att lösa upp kedjor av omslagsfunktioner som skapats av functools.wraps() (och alla andra API:er som sätter attributet __wrapped__ på en omslagsfunktion). (Bidrag från Daniel Urban, Aaron Iles och Nick Coghlan i bpo-13266.)

Som en del av implementeringen av den nya modulen enum har modulen inspect nu betydligt bättre stöd för anpassade __dir__-metoder och dynamiska klassattribut som tillhandahålls genom metaklasser. (Bidrag från Ethan Furman i bpo-18929 och bpo-19030.)

getfullargspec() och getargspec() använder nu API:et signature(). Detta gör att de kan stödja ett mycket bredare spektrum av anropbara objekt, inklusive sådana med attributet __signature__, sådana med metadata som tillhandahålls av argumentkliniken, functools.partial()-objekt och mer. Observera att till skillnad från signature() ignorerar dessa funktioner fortfarande attributen __wrapped__ och rapporterar det redan bundna första argumentet för bundna metoder, så det är fortfarande nödvändigt att uppdatera din kod för att använda signature() direkt om dessa funktioner önskas. (Bidrag från Yury Selivanov i bpo-17481.)

signature() har nu stöd för CPython-funktioner av typen duck, vilket ger stöd för funktioner kompilerade med Cython. (Bidrag från Stefan Behnel och Yury Selivanov i bpo-17159.)

ipadress

ipaddress lades till i standardbiblioteket i Python 3.3 som ett provisoriskt API. Med lanseringen av Python 3.4 har denna kvalifikation tagits bort: ipaddress betraktas nu som ett stabilt API, som omfattas av de normala kraven för standardbiblioteket för att upprätthålla bakåtkompatibilitet.

En ny is_global egenskap är True om en adress är globalt dirigerbar. (Bidrag från Peter Moody i bpo-17400.)

loggning

TimedRotatingFileHandler har en ny atTime parameter som kan användas för att ange när på dygnet rollover ska ske. (Bidrag från Ronald Oussoren i bpo-9556.)

SocketHandler och DatagramHandler har nu stöd för Unix domänuttag (genom att sätta port till None). (Bidrag från Vinay Sajip i commit ce46195b56a9.)

fileConfig() accepterar nu en underklassinstans av configparser.RawConfigParser för parametern fname. Detta gör det lättare att använda en konfigurationsfil när loggningskonfigurationen bara är en del av den övergripande programkonfigurationen, eller när programmet ändrar konfigurationen innan den skickas till fileConfig(). (Bidrag från Vinay Sajip i bpo-16110.)

Loggningskonfigurationsdata som tas emot från en socket via funktionen logging.config.listen() kan nu valideras innan de bearbetas genom att ange en verifieringsfunktion som argument till det nya nyckelordsargumentet verify. (Bidrag från Vinay Sajip i bpo-15452.)

marshal

Standardversionen av marshal har ökats till 3. Koden som implementerar den nya versionen återställer Python2-beteendet att endast registrera en kopia av internerade strängar och bevara interneringen vid deserialisering, och utökar denna ”en kopia”-förmåga till alla objekttyper (inklusive hantering av rekursiva referenser). Detta minskar både storleken på .pyc-filer och mängden minne som en modul upptar i minnet när den laddas från en .pyc (eller .pyo) fil. (Bidrag från Kristján Valur Jónsson i bpo-16475, med ytterligare hastighetsökningar av Antoine Pitrou i bpo-19219.)

mmap

mmap-objekt är nu svagt refererbara. (Bidrag från Valerie Lambert i bpo-4885.)

multiprocessing

På Unix har två nya startmetoder, spawn och forkserver, lagts till för att starta processer som använder multiprocessing. Dessa gör blandningen av processer med trådar mer robust, och metoden spawn matchar den semantik som multiprocessing alltid har använt i Windows. Ny funktion get_all_start_methods() rapporterar alla startmetoder som finns tillgängliga på plattformen, get_start_method() rapporterar den aktuella startmetoden och set_start_method() ställer in startmetoden. (Bidrag från Richard Oudkerk i bpo-8713.)

multiprocessing har nu också konceptet context, som avgör hur barnprocesser skapas. Ny funktion get_context() returnerar ett sammanhang som använder en angiven startmetod. Den har samma API som själva modulen multiprocessing, så du kan använda den för att skapa Pool och andra objekt som kommer att fungera i det sammanhanget. Detta gör att ett ramverk och en applikation eller olika delar av samma applikation kan använda multiprocessing utan att störa varandra. (Bidrag från Richard Oudkerk i bpo-18999.)

Förutom när den gamla startmetoden fork används, ärver inte längre barnprocesser onödiga handtag/filbeskrivare från sina föräldrar (del av bpo-8713).

multiprocessing förlitar sig nu på runpy (som implementerar -m-omkopplaren) för att initiera __main__ på rätt sätt i underordnade processer när startmetoderna spawn eller forkserver används. Detta löser några kantfall där kombinationen av multiprocessing, kommandoradsbytet -m och explicit relativ import kunde orsaka obskyra fel i underordnade processer. (Bidrag från Nick Coghlan i bpo-19946.)

operator

Den nya funktionen length_hint() ger en implementation av specifikationen för hur specialmetoden __length_hint__() skall användas, som en del av den formella specifikationen PEP 424 för denna språkfunktion. (Bidrag från Armin Ronacher i bpo-16148.)

Det finns nu en ren Python-version av modulen operator tillgänglig för referens och för användning av alternativa implementationer av Python. (Bidrag från Zachary Ware i bpo-16694.)

os

Det finns nya funktioner för att hämta och ställa in inheritable flag för en filbeskrivning (os.get_inheritable(), os.set_inheritable()) eller ett Windows-handtag (os.get_handle_inheritable(), os.set_handle_inheritable()).

Den nya funktionen cpu_count() rapporterar antalet tillgängliga processorer på plattformen som Python körs på (eller None om antalet inte kan bestämmas). Funktionen multiprocessing.cpu_count() är nu implementerad i termer av denna funktion). (Bidrag från Trent Nelson, Yogesh Chaudhari, Victor Stinner och Charles-François Natali i bpo-17914.)

os.path.samestat() är nu tillgänglig på Windows-plattformen (och os.path.samefile()-implementationen delas nu mellan Unix och Windows). (Bidrag från Brian Curtin i bpo-11939.)

os.path.ismount() känner nu igen volymer som är monterade under en enhetsrot i Windows. (Bidrag från Tim Golden i bpo-9035.)

os.open() stöder två nya flaggor på plattformar som tillhandahåller dem, O_PATH (oöppnad filbeskrivare) och O_TMPFILE (namnlös temporär fil; från och med version 3.4.0 endast tillgänglig på Linux-system med en kärnversion av 3.11 eller nyare som har uapi-headers). (Bidrag från Christian Heimes i bpo-18673 respektive Benjamin Peterson.)

pdb

pdb har förbättrats för att hantera generatorer, yield och yield from på ett mer användbart sätt. Detta är särskilt användbart vid felsökning av asyncio-baserade program. (Bidrag från Andrew Svetlov och Xavier de Gaye i bpo-16596.)

Kommandot print har tagits bort från pdb, vilket återställer åtkomsten till Python print()-funktionen från pdb-kommandoraden. Python2:s pdb hade inget print-kommando, utan när man skrev print utfördes print-satsen. I Python3 gjordes print av misstag till ett alias för kommandot pdb p. p skriver dock ut repr av sitt argument, inte str som kommandot print i Python2 gjorde. Än värre var att Python3-kommandot pdb print skuggade Python3-funktionen print, vilket gjorde den otillgänglig vid pdb-prompten. (Bidrag från Connor Osborn i bpo-18764.)

gurka

pickle har nu stöd för (men använder inte som standard) ett nytt pickle-protokoll, protokoll 4. Detta nya protokoll tar upp ett antal problem som fanns i tidigare protokoll, t.ex. serialisering av nästlade klasser, mycket stora strängar och behållare samt klasser vars __new__()-metod endast tar nyckelordsargument. Det ger också vissa effektivitetsförbättringar.

Se även

PEP 3154 – Pickle protokoll 4

PEP skriven av Antoine Pitrou och implementerad av Alexandre Vassalotti.

plistlib

plistlib har nu ett API som liknar standardmönstret för stdlib-serialiseringsprotokoll, med nya funktioner load(), dump(), loads() och dumps(). (Det äldre API:et är nu föråldrat.) Förutom det redan stödda XML-plistformatet (FMT_XML), stöds nu även det binära plistformatet (FMT_BINARY). (Bidrag från Ronald Oussoren och andra i bpo-14455.)

poplib

Två nya metoder har lagts till i poplib: capa(), som returnerar listan över funktioner som annonseras av POP-servern, och stls(), som växlar en POP3-session i klartext till en krypterad POP3-session om POP-servern stöder det. (Bidrag från Lorenzo Catucci i bpo-4473.)

tryck

Modulen pprint:s klass PrettyPrinter och dess funktioner pformat() och pprint() har ett nytt alternativ, compact, som styr hur utdata formateras. Om compact för närvarande sätts till True innebär det att sekvenser skrivs ut med så många sekvenselement som ryms inom bredd på varje (indragen) rad. (Bidrag från Serhiy Storchaka i bpo-19132.)

Långa strängar omsluts nu med Pythons normala syntax för radfortsättning. (Bidrag från Antoine Pitrou i bpo-17150.)

pty

pty.spawn() returnerar nu statusvärdet från os.waitpid() på barnprocessen, istället för None. (Bidrag från Gregory P. Smith.)

pydoc

Modulen pydoc är nu baserad direkt på introspektions-API:t inspect.signature(), vilket gör att den kan tillhandahålla signaturinformation för ett större antal anropsbara objekt. Den här ändringen innebär också att __wrapped__-attribut nu tas med i beräkningen när hjälpinformation visas. (Bidrag från Larry Hastings i bpo-19674.)

Modulen pydoc visar inte längre parametern self för redan bundna metoder. Istället strävar den efter att alltid visa den exakta aktuella signaturen för den medföljande anropbara koden. (Bidrag från Larry Hastings i bpo-20710.)

Förutom de ändringar som har gjorts i pydoc direkt, har dess hantering av anpassade __dir__-metoder och olika beskrivningsbeteenden också förbättrats avsevärt genom de underliggande ändringarna i modulen inspect.

Eftersom inbyggda help() baseras på pydoc, påverkar ovanstående ändringar även beteendet hos help().

re

Nya fullmatch()-funktionen och regex.fullmatch()-metoden förankrar mönstret i båda ändarna av den sträng som ska matchas. Detta ger ett sätt att vara explicit om målet med matchningen, vilket undviker en klass av subtila buggar där $-tecken går förlorade under kodändringar eller tillägg av alternativ till ett befintligt reguljärt uttryck. (Bidrag från Matthew Barnett i bpo-16203.)

Återgivningen av regex objects innehåller nu mönstret och flaggorna; återgivningen av match objects innehåller nu början, slutet och den del av strängen som matchade. (Bidrag från Hugo Lopes Tavares och Serhiy Storchaka i bpo-13592 och bpo-17087.)

resurs

Den nya funktionen prlimit(), tillgänglig på Linux-plattformar med en kärnversion av 2.6.36 eller senare och glibc av 2.13 eller senare, ger möjlighet att fråga efter eller ställa in resursgränser för andra processer än den som gör anropet. (Bidrag från Christian Heimes i bpo-16595.)

I Linux-kärnan version 2.6.36 eller senare finns det också några nya Linux-specifika konstanter: RLIMIT_MSGQUEUE, RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_RTTIME och RLIMIT_SIGPENDING. (Bidrag från Christian Heimes i bpo-19324.)

På FreeBSD version 9 och senare finns det några nya FreeBSD-specifika konstanter: RLIMIT_SBSIZE, RLIMIT_SWAP, och RLIMIT_NPTS. (Bidrag från Claudiu Popa i bpo-19343.)

välj

epoll-objekt har nu stöd för kontexthanteringsprotokollet. När det används i en with-sats kommer close()-metoden att anropas automatiskt i slutet av blocket. (Bidrag från Serhiy Storchaka i bpo-16488.)

devpoll-objekt har nu metoderna fileno() och close(), samt ett nytt attribut closed. (Bidrag från Victor Stinner i bpo-18794.)

hylla

Shelf-instanser kan nu användas i with-satser, och kommer automatiskt att stängas i slutet av with-blocket. (Bidrag från Filip Gruszczyński i bpo-13896.)

shutil

copyfile() ger nu upphov till en specifik Error-underklass, SameFileError, när källan och destinationen är samma fil, vilket gör det möjligt för ett program att vidta lämpliga åtgärder vid detta specifika fel. (Bidrag från Atsuo Ishimoto och Hynek Schlawack i bpo-1492704.)

smtpd

Klasserna SMTPServer och SMTPChannel accepterar nu ett map nyckelordsargument som, om det anges, skickas in till asynchat.async_chat som dess map argument. Detta gör att ett program kan undvika att påverka den globala socketkartan. (Bidrag från Vinay Sajip i bpo-11959.)

smtplib

SMTPException är nu en underklass till OSError, vilket gör att både fel på socketnivå och fel på SMTP-protokollnivå kan fångas upp i en try/except-sats av kod som bara bryr sig om huruvida ett fel inträffade eller inte. (Bidrag från Ned Jackson Lovely i bpo-2118.)

kortplats

Socket-modulen stöder nu CAN_BCM-protokollet på plattformar som stöder det. (Bidrag från Brian Thorne i bpo-15359.)

Socket-objekt har nya metoder för att hämta eller ställa in sin inheritable flag, get_inheritable() och set_inheritable().

Konstanterna socket.AF_* och socket.SOCK_* är nu uppräkningsvärden med hjälp av den nya modulen enum. Detta gör att meningsfulla namn kan skrivas ut under felsökning, istället för ”magiska siffror” i heltal.

Konstanten AF_LINK är nu tillgänglig på BSD och OSX.

inet_pton() och inet_ntop() stöds nu i Windows. (Bidrag från Atsuo Ishimoto i bpo-7171.)

sqlite3

En ny boolesk parameter till funktionen connect(), uri, kan användas för att indikera att parametern database är en uri (se SQLite URI documentation). (Bidrag från poq i bpo-13773.)

ssl

PROTOCOL_TLSv1_1 och PROTOCOL_TLSv1_2 (stöd för TLSv1.1 och TLSv1.2) har lagts till; stöd för dessa protokoll är endast tillgängligt om Python är länkat med OpenSSL 1.0.1 eller senare. (Bidrag från Michele Orrù och Antoine Pitrou i bpo-16692.)

Den nya funktionen create_default_context() tillhandahåller ett standardiserat sätt att erhålla en SSLContext vars inställningar är avsedda att vara en rimlig balans mellan kompatibilitet och säkerhet. Dessa inställningar är strängare än de standardinställningar som tillhandahålls av SSLContext-konstruktören och kan justeras i framtiden, utan föregående avskrivning, om säkerhetskraven för bästa praxis ändras. Den nya rekommenderade bästa praxis för att använda stdlib-bibliotek som stöder SSL är att använda create_default_context() för att erhålla ett SSLContext-objekt, modifiera det vid behov och sedan skicka det som context-argumentet för lämpligt stdlib-API. (Bidrag från Christian Heimes i bpo-19689.)

SSLContext method load_verify_locations() accepterar ett nytt valfritt argument cadata, som kan användas för att tillhandahålla PEM- eller DER-kodade certifikat direkt via strängar respektive bytes. (Bidrag från Christian Heimes i bpo-18138.)

Den nya funktionen get_default_verify_paths() returnerar en namngiven tupel av de sökvägar och miljövariabler som metoden set_default_verify_paths() använder för att ställa in OpenSSL:s standard cafile och capath. Detta kan vara till hjälp vid felsökning av problem med standardverifiering. (Bidrag från Christian Heimes i bpo-18143.)

SSLContext har en ny metod, cert_store_stats(), som rapporterar antalet laddade X.509-certifikat, X.509 CA-certifikat och listor över återkallade certifikat (crl), samt en metod get_ca_certs() som returnerar en lista över laddade CA-certifikat. (Bidrag från Christian Heimes i bpo-18147.)

Om OpenSSL 0.9.8 eller senare är tillgängligt har SSLContext ett nytt attribut verify_flags som kan användas för att styra certifikatverifieringsprocessen genom att ställa in det på en kombination av de nya konstanterna VERIFY_DEFAULT, VERIFY_CRL_CHECK_LEAF, VERIFY_CRL_CHECK_CHAIN, eller VERIFY_X509_STRICT. OpenSSL gör inte någon CRL-verifiering som standard. (Bidrag från Christien Heimes i bpo-8813.)

Ny SSLContext-metod load_default_certs() laddar en uppsättning standardcertifikat för ”certifikatutfärdare” (CA) från standardplatser, som varierar beroende på plattform. Det kan användas för att ladda både TLS-certifikat för webbserverautentisering (purpose=SERVER_AUTH) som en klient kan använda för att verifiera en server och certifikat som en server kan använda för att verifiera klientcertifikat (purpose=CLIENT_AUTH). (Bidrag från Christian Heimes i bpo-19292.)

Två nya funktioner som endast finns i Windows, enum_certificates() och enum_crls(), gör det möjligt att hämta certifikat, certifikatinformation och CRL:er från Windows certifikatarkiv. (Bidrag från Christian Heimes i bpo-17134.)

Stöd för SNI (Server Name Indication) på serversidan med hjälp av den nya metoden ssl.SSLContext.set_servername_callback(). (Bidrag från Daniel Black i bpo-8109.)

Den ordbok som returneras av SSLSocket.getpeercert() innehåller ytterligare X509v3 tilläggsobjekt: crlDistributionPoints, calIssuers och OCSP URI:er. (Bidrag från Christian Heimes i bpo-18379.)

stat

Modulen stat backas nu upp av en C-implementation i _stat. En C-implementering krävs eftersom de flesta värden inte är standardiserade och är plattformsberoende. (Bidrag från Christian Heimes i bpo-11016.)

Modulen stöder de nya flaggorna ST_MODE, S_IFDOOR, S_IFPORT och S_IFWHT. (Bidrag från Christian Hiemes i bpo-11016.)

struktur

Ny funktion iter_unpack och en ny struct.Struct.iter_unpack()-metod för kompilerade format ger strömmad uppackning av en buffert som innehåller upprepade instanser av ett visst dataformat. (Bidrag från Antoine Pitrou i bpo-17804.)

delprocess

check_output() accepterar nu ett input-argument som kan användas för att ange innehållet i stdin för det kommando som körs. (Bidrag från Zack Weinberg i bpo-16624.)

getstatus() och getstatusoutput() fungerar nu på Windows. Denna ändring gjordes faktiskt oavsiktligt i 3.3.4. (Bidrag från Tim Golden i bpo-10197.)

sunau

Metoden getparams() returnerar nu en namngiven tupel istället för en vanlig tupel. (Bidrag från Claudiu Popa i bpo-18901.)

sunau.open() stöder nu kontexthanteringsprotokollet: när det används i ett with block, kommer close metoden för det returnerade objektet att anropas automatiskt i slutet av blocket. (Bidrag från Serhiy Storchaka i bpo-18878.)

AU_write.setsampwidth() stöder nu 24 bitars samplingar, vilket ger stöd för att skriva 24 samplingar med modulen. (Bidrag från Serhiy Storchaka i bpo-19261.)

Metoderna writeframesraw() och writeframes() accepterar nu alla bytes-like object. (Bidrag från Serhiy Storchaka i bpo-8311.)

system

Den nya funktionen sys.getallocatedblocks() returnerar det aktuella antalet block som tolken har allokerat. (I CPython med standardinställningen --with-pymalloc är detta allokeringar som görs via API:et PyObject_Malloc()) Detta kan vara användbart för att spåra minnesläckor, speciellt om det är automatiserat via en testsvit. (Bidrag från Antoine Pitrou i bpo-13390.)

När Python-tolken startar i interactive mode, kontrollerar den om det finns ett __interactivehook__-attribut i sys-modulen. Om attributet finns anropas dess värde utan argument precis innan det interaktiva läget startas. Kontrollen görs efter att filen PYTHONSTARTUP har lästs, så det kan ställas in där. Modulen site sets it till en funktion som möjliggör tabbkomplettering och historiksparande (i ~/.python-history) om plattformen stöder readline. Om du inte vill ha det här (nya) beteendet kan du åsidosätta det i PYTHONSTARTUP, sitecustomize eller usercustomize genom att ta bort det här attributet från sys (eller ställa in det på någon annan callable). (Bidrag från Éric Araujo och Antoine Pitrou i bpo-5845.)

tarfil

Modulen tarfile har nu stöd för en enkel Kommandoradsgränssnitt när den anropas som ett skript direkt eller via -m. Detta kan användas för att skapa och extrahera tarfile-arkiv. (Bidrag från Berker Peksag i bpo-13477.)

textbrytning

Klassen TextWrapper har två nya attribut/konstruktörsargument: max_lines, som begränsar antalet rader i utdata, och placeholder, som är en sträng som kommer att visas i slutet av utdata om den har avkortats på grund av max_lines. En ny bekvämlighetsfunktion shorten() bygger vidare på dessa möjligheter och komprimerar alla blanksteg i indata till enstaka blanksteg och producerar en enda rad med en given bredd som slutar med platshållaren (som standard [...]). (Bidrag från Antoine Pitrou och Serhiy Storchaka i bpo-18585 och bpo-18725.)

gängning

Objektet Thread som representerar huvudtråden kan erhållas från den nya funktionen main_thread(). Under normala förhållanden kommer detta att vara den tråd från vilken Python-tolken startades. (Bidrag från Andrew Svetlov i bpo-18882.)

spårning

En ny traceback.clear_frames()-funktion tar ett traceback-objekt och rensar de lokala variablerna i alla de frames som den refererar till, vilket minskar mängden minne som förbrukas. (Bidrag från Andrew Kuchling i bpo-1565525.)

typer

En ny DynamicClassAttribute()-deskriptor ger möjlighet att definiera ett attribut som fungerar normalt när det söks upp via ett instansobjekt, men som dirigeras till klassen __getattr__ när det söks upp via klassen. Detta gör att man kan ha egenskaper som är aktiva på en klass och ha virtuella attribut på klassen med samma namn (se Enum för ett exempel). (Bidrag från Ethan Furman i bpo-19030.)

urllib

urllib.request stöder nu data: URL:er via DataHandler-klassen. (Bidrag från Mathias Panzenböck i bpo-16423.)

Den http-metod som kommer att användas av en Request-klass kan nu specificeras genom att ange ett method-klassattribut på underklassen. (Bidrag från Jason R Coombs i bpo-18978.)

Request-objekt är nu återanvändbara: om attributen full_url eller data ändras, uppdateras alla relevanta interna egenskaper. Detta innebär t.ex. att det nu är möjligt att använda samma request-objekt i mer än ett OpenerDirector.open()-anrop med olika data-argument, eller att modifiera en request’s url i stället för att beräkna den från början. Det finns också en ny remove_header()-metod som kan användas för att ta bort headers från en Request. (Bidrag från Alexey Kachayev i bpo-16464, Daniel Wozniak i bpo-17485, och Damien Brecht och Senthil Kumaran i bpo-17272.)

HTTPError-objekt har nu ett headers-attribut som ger tillgång till de HTTP-svarshuvuden som är associerade med felet. (Bidrag från Berker Peksag i bpo-15701.)

unittest

Klassen TestCase har en ny metod, subTest(), som producerar en kontexthanterare vars with-block blir ett ”sub-test”. Denna kontexthanterare gör det möjligt för en testmetod att dynamiskt generera undertest genom att t.ex. anropa kontexthanteraren subTest i en loop. En enda testmetod kan därmed producera ett obegränsat antal separat identifierade och separat räknade tester, som alla kommer att köras även om ett eller flera av dem misslyckas. Till exempel:

klass NumbersTest(unittest.TestCase):
    def test_even(self):
        för i i intervall(6):
            med self.subTest(i=i):
                self.assertEqual(i % 2, 0)

kommer att resultera i sex deltester, var och en identifierad i unittest verbose-utdata med en etikett som består av variabelnamnet i och ett visst värde för den variabeln (i=0, i=1, etc). Se Särskiljande av testiterationer med hjälp av deltest för den fullständiga versionen av detta exempel. (Bidrag från Antoine Pitrou i bpo-16997.)

unittest.main() accepterar nu en iterabel av testnamn för defaultTest, där den tidigare endast accepterade ett enda testnamn som en sträng. (Bidrag från Jyrki Pulliainen i bpo-15132.)

Om SkipTest aktiveras under testupptäckt (dvs. på modulnivå i testfilen), rapporteras det nu som en skip istället för ett fel. (Bidrag från Zach Ware i bpo-16935.)

discover() sorterar nu de upptäckta filerna för att ge konsekvent testordning. (Bidrag från Martin Melin och Jeff Ramnani i bpo-16709.)

TestSuite släpper nu referenser till tester så snart testet har körts, om testet är framgångsrikt. På Python-tolkar som gör garbage collection, gör detta att testerna kan garbage collectas om inget annat har en referens till testet. Det är möjligt att åsidosätta detta beteende genom att skapa en TestSuite-underklass som definierar en anpassad _removeTestAtIndex-metod. (Bidrag från Tom Wardill, Matt McClure och Andrew Svetlov i bpo-11798.)

En ny kontexthanterare för testpåståenden, assertLogs(), säkerställer att ett visst kodblock skickar ett loggmeddelande med modulen logging. Som standard kan meddelandet komma från vilken logger som helst och ha en prioritet på INFO eller högre, men både loggarens namn och en alternativ lägsta loggningsnivå kan anges. Objektet som returneras av kontexthanteraren kan efterfrågas för LogRecord s och/eller formaterade meddelanden som loggades. (Bidrag från Antoine Pitrou i bpo-18937.)

Test discovery fungerar nu med namespace-paket (Bidrag från Claudiu Popa i bpo-17457.)

unittest.mock-objekt inspekterar nu sina specifikationssignaturer när de matchar anrop, vilket innebär att ett argument nu kan matchas med antingen position eller namn, istället för bara med position. (Bidrag från Antoine Pitrou i bpo-17015.)

mock_open()-objekt har nu metoderna readline och readlines. (Bidrag från Toshio Kuratomi i bpo-17467.)

ven

venv innehåller nu aktiveringsskript för skalen csh och fish. (Bidrag från Andrew Svetlov i bpo-15417.)

EnvBuilder och bekvämlighetsfunktionen create() tar ett nytt nyckelordsargument with_pip, som standard är False, som kontrollerar om EnvBuilder säkerställer att pip är installerat i den virtuella miljön eller inte. (Bidrag från Nick Coghlan i bpo-19552 som en del av PEP 453-implementationen)

våg

Metoden getparams() returnerar nu en namedtuple istället för en vanlig tuple. (Bidrag från Claudiu Popa i bpo-17487.)

wave.open() stöder nu protokollet för kontexthantering. (Bidrag från Claudiu Popa i bpo-17616.)

wave kan nu skriva utdata till filer som inte kan sökas. (Bidrag från David Jones, Guilherme Polo och Serhiy Storchaka i bpo-5202.)

Metoderna writeframesraw() och writeframes() accepterar nu alla bytes-like object. (Bidrag från Serhiy Storchaka i bpo-8311.)

svagref

Ny WeakMethod-klass simulerar svaga referenser till bundna metoder. (Bidrag från Antoine Pitrou i bpo-14631.)

Ny finalize-klass gör det möjligt att registrera en återuppringning som ska anropas när ett objekt samlas in, utan att behöva hantera livscykeln för själva den svaga referensen. (Bidrag från Richard Oudkerk i bpo-15528.)

Den eventuella återuppringning som är associerad med en ref visas nu via attributet __callback__. (Bidrag från Mark Dickinson i bpo-17643.)

xml.etree

En ny parser, XMLPullParser, gör det möjligt för en icke-blockerande applikation att parsa XML-dokument. Ett exempel kan ses på Pull API för icke-blockerande parsing. (Bidrag från Antoine Pitrou i bpo-17741.)

Funktionerna xml.etree.ElementTree tostring() och tostringlist(), samt ElementTree write() method, har nu en short_empty_elements keyword-only parameter som ger kontroll över om element utan innehåll skrivs i förkortad (<tag />) eller utökad (<tag></tag>) form. (Bidrag från Ariel Poliak och Serhiy Storchaka i bpo-14377.)

zip-fil

Metoden writepy() i klassen PyZipFile har ett nytt alternativ filterfunc som kan användas för att styra vilka kataloger och filer som läggs till i arkivet. Detta kan t.ex. användas för att utesluta testfiler från arkivet. (Bidrag från Christian Tismer i bpo-19274.)

Parametern allowZip64 till ZipFile och PyZipfile är nu True som standard. (Bidrag från William Mallard i bpo-17201.)

Ändringar i CPython-implementeringen

PEP 445: Anpassning av CPythons minnesallokatorer

PEP 445 lägger till nya gränssnitt på C-nivå för att anpassa minnesallokeringen i CPython-tolken.

Se även

PEP 445 – Lägg till nya API:er för att anpassa Pythons minnesallokatorer

PEP skrivet och implementerat av Victor Stinner.

PEP 442: Slutförande av säkert objekt

PEP 442 tar bort de nuvarande begränsningarna och konstigheterna med objektavslut i CPython. Med den kan objekt med __del__()-metoder, liksom generatorer med finally-klausuler, slutföras när de är en del av en referenscykel.

Som en del av denna förändring sätts modulglobaler inte längre med våld till None under tolkens avstängning i de flesta fall, utan förlitar sig istället på den normala driften av den cykliska skräpsamlaren. Detta undviker en hel klass av tolkningsavstängningsfel, vanligtvis involverande __del__-metoder, som har plågat Python sedan den cykliska GC först introducerades.

Se även

PEP 442 – Slutförande av säkert objekt

PEP skrivet och genomfört av Antoine Pitrou.

PEP 456: Säker och utbytbar hashalgoritm

PEP 456 följer upp tidigare säkerhetsfixar som gjorts på Pythons hash-algoritm för att hantera vissa DOS-attacker som API:er som vänder sig till allmänheten och som stöds av ordboksuppslagningar kan utsättas för. (Se bpo-14621 för starten av den aktuella förbättringsrundan.) PEP:n förenar CPythons hashkod för att göra det lättare för en pakettillverkare att ersätta en annan hashalgoritm, och byter Pythons standardimplementation till en SipHash-implementation på plattformar som har en 64-bitars datatyp. Eventuella prestandaskillnader i jämförelse med den äldre FNV-algoritmen är triviala.

PEP:n lägger till ytterligare fält i sys.hash_info named tuple för att beskriva den hashalgoritm som används av den binärfil som körs för tillfället. I övrigt ändrar PEP:n inte några befintliga CPython API:er.

PEP 436: Argumentklinik

”Argument Clinic” (PEP 436) är nu en del av CPythons byggprocess och kan användas för att förenkla processen med att definiera och underhålla korrekta signaturer för builtins och standardbibliotekets tilläggsmoduler som implementeras i C.

Vissa tilläggsmoduler i standardbiblioteket har konverterats för att använda Argument Clinic i Python 3.4, och pydoc och inspect har uppdaterats i enlighet med detta.

Det förväntas att signaturmetadata för programmatisk introspektion kommer att läggas till ytterligare anropbara filer som implementeras i C som en del av Python 3.4 underhållsversioner.

Anteckning

Argument Clinic PEP är inte helt uppdaterad med läget för implementationen. Detta har ansetts acceptabelt av release manager och core development team i det här fallet, eftersom Argument Clinic inte kommer att göras tillgängligt som ett offentligt API för tredjepartsbruk i Python 3.4.

Se även

PEP 436 – Argumentkliniken DSL

PEP skrivet och implementerat av Larry Hastings.

Andra ändringar i Build och C API

  • Den nya PyType_GetSlot()-funktionen har lagts till i det stabila ABI:t, vilket gör det möjligt att hämta funktionspekare från namngivna typslots när man använder det begränsade API:t. (Bidrag från Martin von Löwis i bpo-17162.)

  • Det nya Py_SetStandardStreamEncoding() förinitialiserings-API:et gör det möjligt för applikationer som bäddar in CPython-tolken att på ett tillförlitligt sätt tvinga fram en viss kodning och felhantering för standardströmmarna. (Bidrag från Bastien Montagne och Nick Coghlan i bpo-16129.)

  • De flesta Python C API:er som inte muterar strängargument är nu korrekt markerade som att de accepterar const char * istället för char *. (Bidrag från Serhiy Storchaka i bpo-1772673.)

  • En ny shell-version av python-config kan användas även när en python-tolk inte är tillgänglig (t.ex. i cross compilation-scenarier).

  • PyUnicode_FromFormat() stöder nu bredd- och precisionsspecifikationer för %s, %A, %U, %V, %S och %R. (Bidrag från Ysj Ray och Victor Stinner i bpo-7330.)

  • Den nya funktionen PyStructSequence_InitType2() kompletterar den befintliga funktionen PyStructSequence_InitType(). Skillnaden är att den returnerar 0 vid framgång och -1 vid misslyckande.

  • CPython-källan kan nu kompileras med hjälp av funktionerna för kontroll av adresssäkerheten i de senaste versionerna av GCC och clang: de falska larmen i allokatorn för små objekt har tystnat. (Bidrag från Dhiru Kholia i bpo-18596.)

  • Windows-versionen använder nu Address Space Layout Randomization och Data Execution Prevention. (Bidrag från Christian Heimes i bpo-16632.)

  • Den nya funktionen PyObject_LengthHint() är C API-motsvarigheten till operator.length_hint(). (Bidrag från Armin Ronacher i bpo-16148.)

Övriga förbättringar

  • Kommandot python har ett nytt option, -I, som gör att det körs i ”isolerat läge”, vilket innebär att sys.path varken innehåller skriptets katalog eller användarens katalog site-packages, och alla PYTHON* miljövariabler ignoreras (det innebär både -s och -E). Andra begränsningar kan också komma att tillämpas i framtiden, med målet att isolera exekveringen av ett skript från användarens miljö. Detta är till exempel lämpligt när Python används för att köra ett systemskript. På de flesta POSIX-system kan och bör det användas i #!-raden i systemskript. (Bidrag från Christian Heimes i bpo-16499.)

  • Tabbkomplettering är nu aktiverad som standard i den interaktiva tolken på system som stöder readline. Historik är också aktiverat som standard, och skrivs till (och läses från) filen ~/.python-history. (Bidrag från Antoine Pitrou och Éric Araujo i bpo-5845.)

  • När Python-tolken anropas med --version skrivs nu versionen ut till standardutmatningen istället för standardfelet (bpo-18338). Liknande ändringar gjordes i argparse (bpo-18920) och andra moduler som har skriptliknande anropsfunktioner (bpo-18922).

  • Installationsprogrammet för CPython i Windows lägger nu till .py i variabeln PATHEXT` när tillägg registreras, vilket gör att användare kan köra ett pythonskript i Windows kommandotolk genom att bara skriva dess namn utan tillägget .py. (Bidrag från Paul Moore i bpo-18569.)

  • Ett nytt make-mål coverage-report kommer att bygga python, köra testsviten och generera en HTML-täckningsrapport för C-kodbasen med hjälp av gcov och lcov.

  • Alternativet -R till python regression test suite kontrollerar nu även för minnesallokeringsläckor, med sys.getallocatedblocks(). (Bidrag från Antoine Pitrou i bpo-13390.)

  • python -m fungerar nu med namespace-paket.

  • Modulen stat är nu implementerad i C, vilket innebär att den hämtar värdena för sina konstanter från C-headerfilerna, istället för att ha värdena hårdkodade i pythonmodulen som tidigare var fallet.

  • Att ladda flera python-moduler från en enda OS-modul (.so, .dll) fungerar nu korrekt (tidigare returnerades den första python-modulen i filen). (Bidrag från Václav Šmilauer i bpo-16421.)

  • En ny opcode, LOAD_CLASSDEREF, har lagts till för att åtgärda en bugg i laddningen av fria variabler i klasskroppar som kunde utlösas av vissa användningar av __prepare__. (Bidrag från Benjamin Peterson i bpo-17853.)

  • Ett antal MemoryError-relaterade krascher identifierades och åtgärdades av Victor Stinner med hjälp av hans PEP 445-baserade verktyg pyfailmalloc (bpo-18408, bpo-18520).

  • Kommandot pyvenv accepterar nu alternativet --copies för att använda kopior i stället för symlänkar även på system där symlänkar är standard. (Bidrag från Vinay Sajip i bpo-18807.)

  • Kommandot pyvenv accepterar också alternativet --without-pip för att undertrycka den annars automatiska uppstarten av pip i den virtuella miljön. (Bidrag från Nick Coghlan i bpo-19552 som en del av implementeringen av PEP 453)

  • Kodningsnamnet är nu valfritt i värdeuppsättningen för miljövariabeln PYTHONIOENCODING. Detta gör det möjligt att bara ställa in felhanteraren utan att ändra standardkodningen. (Bidrag från Serhiy Storchaka i bpo-18818.)

  • Modulfunktionerna bz2, lzma och gzip open stöder nu läget x (exklusivt skapande). (Bidrag från Tim Heaney och Vajrasky Kok i bpo-19201, bpo-19222 och bpo-19223.)

Betydande optimeringar

  • UTF-32-avkodaren är nu 3x till 4x snabbare. (Bidrag från Serhiy Storchaka i bpo-14625.)

  • Kostnaden för hashkollisioner för set är nu reducerad. Varje hashtabellsprobe kontrollerar nu en serie på varandra följande, intilliggande nyckel/hash-par innan den fortsätter att göra slumpmässiga prober genom hashtabellen. Detta utnyttjar cache-lokalitet för att göra kollisionsupplösning billigare. Kollisionslösningsschemat kan beskrivas som en hybrid av linjär sondering och öppen adressering. Antalet ytterligare linjära sonderingar är som standard nio. Detta kan ändras vid kompilering genom att definiera LINEAR_PROBES till valfritt värde. Ställ in LINEAR_PROBES=0 för att stänga av linjär probning helt och hållet. (Bidrag från Raymond Hettinger i bpo-18771.)

  • Tolken startar ungefär 30% faster. Ett par åtgärder leder till den ökade hastigheten. Tolken laddar färre moduler vid uppstart, t.ex. importeras inte längre modulerna re, collections och locale och deras beroenden som standard. Modulen marshal har förbättrats för att ladda kompilerad Python-kod snabbare. (Bidrag från Antoine Pitrou, Christian Heimes och Victor Stinner i bpo-19219, bpo-19218, bpo-19209, bpo-19205 och bpo-9548.)

  • bz2.BZ2File är nu lika snabb eller snabbare än Python2-versionen i de flesta fall. lzma.LZMAFile har också optimerats. (Bidrag från Serhiy Storchaka och Nadeem Vawda i bpo-16034.)

  • random.getrandbits() är 20%-40% snabbare för små heltal (det vanligaste användningsfallet). (Bidrag från Serhiy Storchaka i bpo-16674.)

  • Genom att dra nytta av det nya lagringsformatet för strängar är betning av strängar nu betydligt snabbare. (Bidrag från Victor Stinner och Antoine Pitrou i bpo-15596.)

  • Ett prestandaproblem i io.FileIO.readall() har lösts. Detta påverkar särskilt Windows, och snabbar upp fallet med piping av betydande mängder data genom subprocess. (Bidrag från Richard Oudkerk i bpo-15758.)

  • html.escape() är nu 10x snabbare. (Bidrag från Matt Bryant i bpo-18020.)

  • I Windows används nu den inbyggda VirtualAlloc istället för CRT malloc i obmalloc. Artificiella benchmarks visar på en minnesbesparing på ca 3%.

  • os.urandom() använder nu en latent öppnad persistent filbeskrivare för att undvika att använda många filbeskrivare när den körs parallellt från flera trådar. (Bidrag från Antoine Pitrou i bpo-18756.)

Föråldrat

Detta avsnitt täcker olika API:er och andra funktioner som har utgått i Python 3.4 och som kommer att tas bort i Python 3.5 eller senare. I de flesta (men inte alla) fall kommer användningen av de föråldrade API:erna att producera en DeprecationWarning när tolken körs med deprecation-varningar aktiverade (till exempel genom att använda -Wd).

Avvecklingar i Python API

  • Som nämnts i PEP 451: En ModuleSpec-typ för importsystemet, är ett antal importlib-metoder och funktioner föråldrade: importlib.find_loader() ersätts av importlib.util.find_spec(); importlib.machinery.PathFinder.find_module() ersätts av importlib.machinery.PathFinder.find_spec(); importlib.abc.MetaPathFinder.find_module() ersätts av importlib.abc.MetaPathFinder.find_spec(); importlib.abc.PathEntryFinder.find_loader() och find_module() ersätts av importlib.abc.PathEntryFinder.find_spec(); alla xxxLoader ABC load_module metoder (importlib.abc.Loader.load_module(), importlib.abc.InspectLoader.load_module(), importlib.abc.FileLoader.load_module(), importlib.abc.SourceLoader.load_module()) bör inte längre implementeras, istället bör laddare implementera en exec_module metod (importlib.abc.Loader.exec_module(), importlib.abc.InspectLoader.exec_module() importlib.abc.SourceLoader.exec_module()) och låta importsystemet ta hand om resten; och importlib.abc.Loader.module_repr(), importlib.util.module_for_loader(), importlib.util.set_loader(), och importlib.util.set_package() behövs inte längre eftersom deras funktioner nu hanteras automatiskt av importsystemet.

  • Modulen imp väntar på att tas bort. För att behålla kompatibiliteten med Python 2/3 kodbaser, är modulens borttagning för närvarande inte planerad.

  • Modulen formatter är under avveckling och kommer att tas bort i Python 3.6.

  • MD5 som standard digestmod för funktionen hmac.new() är föråldrad. Python 3.6 kommer att kräva ett explicit digestnamn eller konstruktör som digestmod-argument.

  • Den interna Netrc-klassen i ftplib-modulen har dokumenterats som föråldrad i sin dokumentsträng under en längre tid. Den avger nu en DeprecationWarning och kommer att tas bort helt i Python 3.5.

  • Det odokumenterade endtime-argumentet till subprocess.Popen.wait() borde inte ha exponerats och används förhoppningsvis inte; det är föråldrat och kommer med största sannolikhet att tas bort i Python 3.5.

  • Argumentet strict i HTMLParser är föråldrat.

  • Funktionerna plistlib readPlist(), writePlist(), readPlistFromBytes(), och writePlistToBytes() är utdaterade till förmån för motsvarande nya funktioner load(), dump(), loads(), och dumps(). Data() är föråldrad till förmån för att bara använda bytes konstruktören.

  • Nyckel sysconfig SO är föråldrad och har ersatts av EXT_SUFFIX.

  • Läget U som accepteras av olika open-funktioner är föråldrat. I Python3 gör det inget användbart och bör ersättas av lämpliga användningar av io.TextIOWrapper (om det behövs) och dess newline-argument.

  • Argumentet parser i xml.etree.ElementTree.iterparse() har utgått, liksom argumentet html i XMLParser(). För att förbereda borttagandet av det senare bör alla argument till XMLParser skickas med nyckelord.

Föråldrade funktioner

  • Att köra IDLE — Python-redigerare och skal med flaggan -n (ingen underprocess) är föråldrat. Funktionen kommer dock inte att tas bort förrän bpo-18823 är löst.

  • Site-modulen som lägger till en ”site-python”-katalog i sys.path, om den finns, är föråldrad (bpo-19375).

Borttagen

Operativsystem som inte längre stöds

Stöd för följande operativsystem har tagits bort från käll- och byggverktygen:

  • OS/2 (bpo-16135).

  • Windows 2000 (ändring e52df05b496a).

  • Windows-system där COMSPEC pekar på command.com (bpo-14470).

  • VMS (bpo-16136).

Borttagning av API och funktioner

Följande föråldrade och tidigare utfasade API:er och funktioner har tagits bort:

  • De ounderhållna katalogerna Misc/TextMate och Misc/vim har tagits bort (se devguide för förslag på vad som kan användas istället).

  • Makrot SO i makefilen har tagits bort (det ersattes av makrot SHLIB_SUFFIX och EXT_SUFFIX) (bpo-16754).

  • Fältet PyThreadState.tick_counter har tagits bort; dess värde har varit meningslöst sedan Python 3.2, när den ”nya GIL” introducerades (bpo-19199).

  • PyLoader och PyPycLoader har tagits bort från importlib. (Bidrag från Taras Lyapun i bpo-15641.)

  • Argumentet strict till HTTPConnection och HTTPSConnection har tagits bort. HTTP 0.9-stil ”Simple Responses” stöds inte längre.

  • De föråldrade urllib.request.Request getter- och setter-metoderna add_data, has_data, get_data, get_type, get_host, get_selector, set_proxy, get_origin_req_host och is_unverifiable har tagits bort (använd direkt attributåtkomst istället).

  • Stöd för laddning av den föråldrade TYPE_INT64 har tagits bort från marshal. (Bidrag från Dan Riti i bpo-15480.)

  • inspect.Signature: parametrar som endast är positionella måste nu ha ett giltigt namn.

  • object.__format__() accepterar inte längre icke-tomma formatsträngar, den ger nu upphov till ett TypeError istället. Att använda en icke-tom sträng har varit föråldrat sedan Python 3.2. Denna ändring har gjorts för att förhindra en situation där tidigare fungerande (men felaktig) kod skulle börja misslyckas om ett objekt fick en __format__-metod, vilket innebär att din kod nu kan ge upphov till ett TypeError om du använder en 's'-formatkod med objekt som inte har en __format__-metod som hanterar den. Se bpo-7994 för bakgrund.

  • difflib.SequenceMatcher.isbjunk() och difflib.SequenceMatcher.isbpopular() var föråldrade i 3.2 och har nu tagits bort: använd x in sm.bjunk och x in sm.bpopular, där sm är ett SequenceMatcher-objekt (bpo-13248).

Uppstädning av kod

  • Den oanvända och odokumenterade interna klassen Scanner har tagits bort från modulen pydoc.

  • Den privata och i praktiken oanvända modulen _gestalt har tagits bort, tillsammans med de privata platform-funktionerna _mac_ver_lookup, _mac_ver_gstalt och _bcd2str, som bara skulle ha anropats på dåligt fungerande OSX-system (se bpo-18393).

  • De hårdkodade kopiorna av vissa stat-konstanter som ingick i tarfile-modulens namnrymd har tagits bort.

Portning till Python 3.4

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

  • I ett posix-skal är det likvärdigt med att inte ange miljövariabeln PATH alls om den anges till ett tomt värde. Men att sätta PYTHONPATH till ett tomt värde var inte likvärdigt med att inte sätta den alls: att sätta PYTHONPATH till ett tomt värde var likvärdigt med att sätta den till ., vilket leder till förvirring när man resonerar analogt med hur PATH fungerar. Beteendet överensstämmer nu med posix-konventionen för PATH.

  • Utdata [X refs, Y blocks] från en debug (--med-pydebug) -byggnad av CPython-tolken är nu avstängd som standard. Den kan återaktiveras med hjälp av alternativet -X showrefcount. (Bidrag från Ezio Melotti i bpo-17323.)

  • Python-kommandot och de flesta stdlib-skript (samt argparse) skickar nu ut --version-information till stdout istället för stderr (för problemlista se Övriga förbättringar ovan).

Ändringar i Python API

  • De ABC:er som definieras i importlib.abc ger nu antingen upphov till lämpligt undantag eller returnerar ett standardvärde istället för att ge upphov till NotImplementedError i blindo. Detta kommer endast att påverka kod som anropar super() och som faller igenom hela vägen till ABC. För kompatibilitet, fånga både NotImplementedError eller det lämpliga undantaget efter behov.

  • Modultypen initierar nu attributen __package__ och __loader__ till None som standard. För att avgöra om dessa attribut har ställts in på ett bakåtkompatibelt sätt, använd t.ex. getattr(module, '__loader__', None) is not None. (bpo-17115.)

  • importlib.util.module_for_loader() ställer nu in __loader__ och __package__ villkorslöst för att korrekt stödja omlastning. Om detta inte är önskvärt måste du ställa in dessa attribut manuellt. Du kan använda importlib.util.module_to_load() för modulhantering.

  • Import återställer nu relevanta attribut (t.ex. __name__, __loader__, __package__, __file__, __cached__) villkorslöst när den laddas om. Observera att detta återställer ett pre-3.3-beteende i och med att det innebär att en modul hittas på nytt när den laddas om (bpo-19413).

  • Frusna paket sätter inte längre __path__ till en lista som innehåller paketnamnet, utan nu till en tom lista. Det tidigare beteendet kunde leda till att importsystemet gjorde fel sak vid import av undermoduler om det också fanns en katalog med samma namn som det frysta paketet. Det korrekta sättet att avgöra om en modul är ett paket eller inte är att använda hasattr(module, '__path__') (bpo-18065).

  • Frysta moduler definierar inte längre attributet __file__. Det är semantiskt inkorrekt för frysta moduler att ange attributet eftersom de inte laddas från någon explicit plats. Om du måste veta att en modul kommer från frusen kod kan du se om modulens __spec__.location är inställd på 'frozen', kontrollera om laddaren är en underklass till importlib.machinery.FrozenImporter, eller om Python 2-kompatibilitet är nödvändig kan du använda imp.is_frozen().

  • py_compile.compile() ger nu upphov till FileExistsError om filsökvägen som den skulle skriva till är en symlänk eller en icke-vanlig fil. Detta är för att varna för att importen kommer att skriva över dessa filer med en vanlig fil oavsett vilken typ av filsökväg de ursprungligen hade.

  • importlib.abc.SourceLoader.get_source() ger inte längre upphov till ImportError när källkoden som laddas utlöser ett SyntaxError eller UnicodeDecodeError. Eftersom ImportError endast är avsett att utlösas när källkoden inte kan hittas men borde kunna det, ansågs det vara att gå för långt/överbelasta den betydelsen när källkoden hittas men är felaktigt strukturerad. Om du fångade ImportError tidigare och vill fortsätta att ignorera syntax- eller avkodningsproblem, fånga alla tre undantagen nu.

  • functools.update_wrapper() och functools.wraps() sätter nu attributet __wrapped__ korrekt till den funktion som omsluts, även om den funktionen också hade attributet __wrapped__ satt. Detta innebär att __wrapped__-attribut nu korrekt länkar en stack av dekorerade funktioner snarare än att varje __wrapped__-attribut i kedjan refererar till den innersta funktionen. Introspektionsbibliotek som antog att det tidigare beteendet var avsiktligt kan använda inspect.unwrap() för att komma åt den första funktionen i kedjan som inte har något __wrapped__-attribut.

  • inspect.getfullargspec() har omimplementerats ovanpå inspect.signature() och hanterar därför en mycket större variation av anropsbara objekt än tidigare. Det förväntas att ytterligare inbyggda och tilläggsmodulers anropbara objekt kommer att få signaturmetadata under Python 3.4-seriens gång. Kod som antar att inspect.getfullargspec() kommer att misslyckas på icke-Python-kallobjekt kan behöva justeras i enlighet med detta.

  • importlib.machinery.PathFinder skickar nu vidare den aktuella arbetskatalogen till objekt i sys.path_hooks för den tomma strängen. Detta resulterar i att sys.path_importer_cache aldrig innehåller '', vilket innebär att iterering genom sys.path_importer_cache baserat på sys.path inte kommer att hitta alla nycklar. En moduls __file__ när den importeras i den aktuella arbetskatalogen kommer nu också att ha en absolut sökväg, inklusive när -m används med tolken (utom för __main__.__file__ när ett skript har exekverats direkt med en relativ sökväg) (Bidrag från Brett Cannon i bpo-18416). anges på kommandoraden) (bpo-18416).

  • Borttagandet av strict-argumentet till HTTPConnection och HTTPSConnection ändrar betydelsen av de återstående argumenten om du anger dem positionellt i stället för med nyckelord. Om du har varit uppmärksam på deprecation-varningar bör din kod redan ange eventuella ytterligare argument via nyckelord.

  • Strängar mellan from __future__ import ...-satser ger nu alltid upphov till ett SyntaxError. Tidigare, om det inte fanns någon ledande docstring, kunde en mellanliggande sträng ibland ignoreras. Detta gör att CPython överensstämmer med språkspecifikationen; Jython och PyPy gjorde det redan. (bpo-17434).

  • ssl.SSLSocket.getpeercert() och ssl.SSLSocket.do_handshake() ger nu upphov till ett OSError med ENOTCONN när SSLSocket inte är ansluten, istället för det tidigare beteendet att ge upphov till ett AttributeError. Dessutom kommer getpeercert() att ge upphov till ett ValueError om handskakningen ännu inte har genomförts.

  • base64.b32decode() ger nu upphov till ett binascii.Error när indatasträngen innehåller icke-b32-alphabet tecken, istället för ett TypeError. Detta speciella TypeError missades när de andra TypeError konverterades. (Bidrag från Serhiy Storchaka i bpo-18011.) Observera: denna ändring tillämpades också oavsiktligt i Python 3.3.3.

  • Attributet file stängs nu automatiskt när den skapande cgi.FieldStorage-instansen garbage collected. Om du drog ut filobjektet separat från cgi.FieldStorage-instansen och inte höll instansen vid liv, bör du antingen lagra hela cgi.FieldStorage-instansen eller läsa innehållet i filen innan cgi.FieldStorage-instansen garbage collected.

  • Anrop av read eller write på ett stängt SSL-uttag ger nu upphov till ett informativt ValueError istället för det tidigare mer mystiska AttributeError (bpo-9177).

  • slice.indices() producerar inte längre ett OverflowError för stora värden. Som en konsekvens av denna korrigering ger slice.indices() nu upphov till ett ValueError om det ges en negativ längd; tidigare returnerade det nonsensvärden (bpo-14794).

  • Konstruktorn complex, till skillnad från funktionerna cmath, accepterade felaktigt värdena float om objektets specialmetod __complex__ returnerade ett värde. Detta ger nu upphov till ett TypeError. (bpo-16290.)

  • Konstruktorn int i 3.2 och 3.3 accepterar felaktigt float-värden för parametern base. Det är osannolikt att någon gjorde detta, men om så är fallet kommer det nu att ge upphov till ett TypeError (bpo-16772).

  • Standardvärden för argument som endast innehåller nyckelord utvärderas nu efter standardvärden för vanliga nyckelordsargument, istället för före. Förhoppningsvis har ingen skrivit någon kod som är beroende av det tidigare buggiga beteendet (bpo-16967).

  • Föråldrade trådtillstånd rensas nu efter fork(). Detta kan leda till att vissa systemresurser frigörs som tidigare felaktigt hölls vid liv för evigt (t.ex. databasanslutningar i trådlokal lagring). (bpo-17094.)

  • Parameternamn i __annotations__-dikter manglas nu korrekt, på samma sätt som __kwdefaults__. (Bidrag från Yury Selivanov i bpo-20625.)

  • hashlib.hash.name returnerar nu alltid identifieraren med små bokstäver. Tidigare hade vissa inbyggda hashar namn med versaler, men nu när det är ett formellt offentligt gränssnitt har namngivningen gjorts konsekvent (bpo-18532).

  • Eftersom unittest.TestSuite nu tappar referenser till tester efter att de har körts, kan testprogram som återanvänder en TestSuite för att köra om en uppsättning tester misslyckas. Testsviter bör inte återanvändas på det här sättet eftersom det innebär att tillstånd behålls mellan testkörningar, vilket bryter testisoleringen som unittest är utformad för att tillhandahålla. Men om bristen på isolering anses acceptabel kan det gamla beteendet återställas genom att skapa en TestSuite-underklass som definierar en _removeTestAtIndex-metod som inte gör någonting (se TestSuite.__iter__()) (bpo-11798).

  • unittest använder nu argparse för kommandoradsanalys. Det finns vissa ogiltiga kommandoformer som tidigare fungerade och som inte längre tillåts; i teorin bör detta inte orsaka problem med bakåtkompatibilitet eftersom de otillåtna kommandoformerna inte var meningsfulla och troligen inte används.

  • Funktionerna re.split(), re.findall(), och re.sub(), samt metoderna group() och groups() för match-objekt returnerar nu alltid ett bytes-objekt när strängen som ska matchas är ett bytes-like object. Tidigare matchade returtypen indatatypen, så om din kod var beroende av att returvärdet var, säg, en bytearray, måste du ändra din kod.

  • audioop-funktioner ger nu upphov till ett fel omedelbart om de får stränginmatning, istället för att misslyckas slumpmässigt senare (bpo-16685).

  • Det nya argumentet convert_charrefs till HTMLParser har för närvarande False som standard för bakåtkompatibilitet, men kommer så småningom att ändras till True som standard. Det rekommenderas att du lägger till detta nyckelord, med lämpligt värde, till alla HTMLParser-anrop i din kod (bpo-13633).

  • Eftersom argumentet digestmod till funktionen hmac.new() i framtiden inte kommer att ha någon standard, bör alla anrop till hmac.new() ändras så att de uttryckligen anger en digestmod (bpo-17276).

  • Att anropa sysconfig.get_config_var() med nyckeln SO, eller att leta upp SO i resultatet av ett anrop till sysconfig.get_config_vars() är föråldrat. Denna nyckel bör ersättas av EXT_SUFFIX eller SHLIB_SUFFIX, beroende på sammanhanget (bpo-19555).

  • Alla anrop till open funktioner som specificerar U bör modifieras. U är ineffektivt i Python3 och kommer så småningom att ge upphov till ett fel om det används. Beroende på funktionen kan motsvarigheten till dess gamla Python2-beteende uppnås genom att använda antingen ett newline-argument, eller om nödvändigt genom att paketera strömmen i TextIOWrapper för att använda dess newline-argument (bpo-15204).

  • Om du använder pyvenv i ett skript och vill att pip inte ska installeras måste du lägga till --without-pip i din kommandoupprop.

  • Standardbeteendet för json.dump() och json.dumps() när ett indrag anges har ändrats: det producerar inte längre efterföljande mellanslag efter kommatecken i slutet av rader. Detta kommer endast att ha betydelse om du har tester som gör jämförelser av sådana utdata med känsligt blanksteg (bpo-16333).

  • doctest letar nu efter doctests i tilläggsmodulens __doc__ strängar, så om din doctest-testupptäckt inkluderar tilläggsmoduler som har saker som ser ut som doctests i dem kan du se testfel som du aldrig sett tidigare när du kör dina tester (bpo-3158).

  • Modulen collections.abc har omarbetats något som en del av Pythons uppstartsförbättringar. Som en konsekvens av detta är det inte längre så att import av collections automatiskt importerar collections.abc. Om ditt program var beroende av den (odokumenterade) implicita importen, måste du lägga till en explicit import collections.abc (bpo-20784).

Förändringar i C API

  • PyEval_EvalFrameEx(), PyObject_Repr() och PyObject_Str(), tillsammans med några andra interna C API:er, innehåller nu ett felsökningsuttalande som säkerställer att de inte används i situationer där de tyst kan kasta bort ett för närvarande aktivt undantag. I fall där det aktiva undantaget förväntas och önskas kasseras (till exempel för att det redan har sparats lokalt med PyErr_Fetch() eller avsiktligt ersätts med ett annat undantag), kommer ett uttryckligt PyErr_Clear()-anrop att behövas för att undvika att påståendet utlöses när dessa operationer anropas (direkt eller indirekt) och körs mot en version av Python som är kompilerad med påståenden aktiverade.

  • PyErr_SetImportError() sätter nu TypeError när dess msg argument inte är satt. Tidigare returnerades endast NULL utan att något undantag angavs.

  • Resultatet av anropet PyOS_ReadlineFunctionPointer måste nu vara en sträng som allokerats av PyMem_RawMalloc() eller PyMem_RawRealloc(), eller NULL om ett fel inträffade, istället för en sträng som allokerats av PyMem_Malloc() eller PyMem_Realloc() (bpo-16742)

  • PyThread_set_key_value() sätter nu alltid värdet. I Python 3.3 gjorde funktionen ingenting om nyckeln redan fanns (om det aktuella värdet är en pekare som inte är NULL).

  • Fältet f_tstate (thread state) i PyFrameObject-strukturen har tagits bort för att åtgärda ett fel: se bpo-14432 för motiveringen.

Ändrat i 3.4.3

PEP 476: Aktivera certifikatverifiering som standard för stdlib http-klienter

http.client och moduler som använder den, t.ex. urllib.request och xmlrpc.client, kommer nu att verifiera att servern presenterar ett certifikat som är signerat av en CA i plattformens trust store och vars värdnamn matchar det värdnamn som begärs som standard, vilket avsevärt förbättrar säkerheten för många applikationer.

För applikationer som kräver det gamla tidigare beteendet kan de skicka en alternativ context:

import urllib.request
import ssl

# This disables all verification
context = ssl._create_unverified_context()

# This allows using a specific certificate for the host, which doesn't need
# to be in the trust store
context = ssl.create_default_context(cafile="/path/to/file.crt")

urllib.request.urlopen("https://invalid-cert", context=context)