Python 3.9’daki Yenilikler¶
- Editör:
Łukasz Langa
This article explains the new features in Python 3.9, compared to 3.8. Python 3.9 was released on October 5, 2020. For full details, see the changelog.
Ayrıca bakınız
PEP 596 - Python 3.9 Yayınlama Takvimi
Özet – Sürümün öne çıkanları¶
Yeni sözdizimi özellikleri:
PEP 584 ,
dict
için birleşim işleçleri eklendi;PEP 585 , standart koleksiyonlarda tür ipuçlama (type hinting) jenerikleri;
PEP 614 , dekoratörlerde gramer kısıtlamaları gevşetildi.
Yeni gömülü özellikler:
PEP 616 , önekleri ve sonekleri kaldırmak için dize yöntemleri.
Standart kütüphanedeki yeni özellikler:
PEP 593 esnek fonksiyon ve değişken açıklamaları;
Yarışlar ve sinyaller olmadan süreç yönetimine izin veren
os.pidfd_open()
eklendi.
Tercüman geliştirmeleri:
PEP 573, C uzantı türlerinin yöntemlerinden modül durumuna hızlı erişim;
PEP 617, CPython artık PEG tabanlı yeni bir çözümleyici kullanıyor;
bir dizi python gömülüleri (range, tuple, set, frozenset, list, dict) PEP 590 vectorcall kullanılarak hızlandırıldı;
çöp toplama, dirilen nesnelerde engellemez;
a number of Python modules (
_abc
,audioop
,_bz2
,_codecs
,_contextvars
,_crypt
,_functools
,_json
,_locale
,math
,operator
,resource
,time
,_weakref
) now use multiphase initialization as defined by PEP 489;a number of standard library modules (
audioop
,ast
,grp
,_hashlib
,pwd
,_posixsubprocess
,random
,select
,struct
,termios
,zlib
) are now using the stable ABI defined by PEP 384.
Standart kütüphanedeki yeni özellikler:
PEP 615, IANA Zaman Dilimi Veritabanı artık
zoneinfo
modülündeki standart kitaplıkta mevcuttur;topolojik türde bir grafik uygulaması artık yeni
graphlib
modülünde sağlanmaktadır.
Yayın süreci değişiklikleri:
PEP 602, CPython yıllık bir yayın döngüsü benimser.
Kodunuzda DeprecationWarning olup olmadığını kontrol etmelisiniz¶
Python 2.7 hala desteklendiğinde, Python 2.7 ile geriye dönük uyumluluk için Python 3’teki birçok işlevsellik korunmuştur. Python 2 desteğinin sona ermesiyle bu geriye dönük uyumluluk katmanları kaldırıldı veya yakında kaldırılacak. Çoğu, birkaç yıl boyunca bir DeprecationWarning
uyarısı yayınladı. Örneğin, collections.abc.Mapping
yerine collections.Mappin
kullanmak, 2012’de yayınlanan Python 3.3’ten bu yana bir DeprecationWarning
yayar.
DeprecationWarning
ve PendingDeprecationWarning
öğelerini görmek için -W
default
komut satırı seçeneğiyle veya bunları hata olarak değerlendirmek için -W
error
ile uygulamanızı test edin. Uyarı Filtresi, üçüncü taraf kodundan gelen uyarıları yok saymak için kullanılabilir.
Python 3.9, Python proje yöneticilerine Python 2 desteğinin kaldırılmasını organize etmeleri ve Python 3.9 için destek eklemeleri için daha fazla zaman vermek üzere Python 2 geriye dönük uyumluluk katmanlarını sağlayan son sürümdür.
collections
modülünde Soyut Temel Sınıflar için takma adlar, collections.abc.Mapping
için collections.Mapping
takma adı gibi, geriye dönük uyumluluk için son bir sürüm için saklanır. Python 3.10’dan kaldırılacaklar.
Daha genel olarak, kodunuzu bir sonraki Python sürümüyle uyumlu hale getirmek için hazırlamanıza yardımcı olan Python Development Mode testlerinizi çalıştırmayı deneyin.
Not: Python’un bu sürümünde önceden var olan bazı kullanımdan kaldırmalar da kaldırılmıştır. Kaldırılanlar bölümüne bakınız.
Yeni Özellikler¶
Sözlük Birleştirme ve Güncelleme Operatörleri¶
Gömülü dict
sınıfına birleştirme (|
) ve güncelleme (|=
) operatörleri eklendi. Bunlar, sözlükleri birleştirmenin mevcut dict.update
ve {**d1, **d2}
yöntemlerini tamamlar.
Örnek:
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
Tam açıklama için PEP 584 sayfasına bakınız. (Brandt Bucher tarafından bpo-36144 ile katkıda bulunulmuştur)
Önekleri ve Sonekleri Kaldırmak için Yeni Dize Yöntemleri¶
str.removeprefix(prefix)
ve str.removesuffix(suffix)
, gereksiz bir öneki veya bir soneki bir dizeden kolayca kaldırmak için eklenmiştir. Karşılık gelen bytes
, bytearray
ve collections.UserString
yöntemleri de eklenmiştir. Tam açıklama için PEP 616 ‘ya bakın. (Dennis Sweeney tarafından bpo-39939 ‘da katılmıştır.)
Standart Koleksiyonlardaki Tür Dayatma Jenerikleri¶
Yazım ek açıklamalarında, artık typing
‘den karşılık gelen büyük harfli türleri (örnek olarak List
veya Dict
) içe aktarmak yerine list
ve dict
gibi yerleşik koleksiyon türlerini genel türler olarak kullanabilirsiniz. Standart kitaplıktaki diğer bazı türler de artık geneldir, örneğin queue.Queue
.
Örnek:
def greet_all(names: list[str]) -> None:
for name in names:
print("Hello", name)
Daha fazla ayrıntı için bkz. PEP 585. (Guido van Rossum, Ethan Smith ve Batuhan Taşkaya’nın katkılarıyla bpo-39481.)
Yeni Ayrıştırıcı¶
Python 3.9, LL(1) yerine PEG tabanlı yeni bir ayrıştırıcı kullanır. Yeni ayrıştırıcının performansı kabaca eski ayrıştırıcınınkiyle karşılaştırılabilir, ancak iş yeni dil özellikleri tasarlamaya geldiğinde PEG biçimciliği LL(1)’den daha esnektir. Bu esnekliği Python 3.10 ve sonrasında kullanmaya başlayacağız.
ast
modülü yeni ayrıştırıcıyı kullanır ve eski ayrıştırıcı ile aynı AST’yi üretir.
In Python 3.10, the old parser will be deleted and so will all
functionality that depends on it (primarily the parser
module,
which has long been deprecated). In Python 3.9 only, you can switch
back to the LL(1) parser using a command line switch (-X
oldparser
) or an environment variable (PYTHONOLDPARSER=1
).
Daha fazla ayrıntı için bkz. PEP 617. ( bpo-40334 içinde Guido van Rossum, Pablo Galindo ve Lysandros Nikolaou tarafından katılmıştır.)
Başka Dil Değişiklikleri¶
__import__()
artıkImportError
değerini, eskiden göreli bir içe aktarma üst düzey paketini geçtiğinde oluşanValueError
yerine yükseltiyor. ( bpo-37444 içinde Ngalim Siregar tarafından katılmıştır.)Python artık komut satırında belirtilen betik dosya adının mutlak yolunu alıyor (örn:
python3 script.py
):__main__
modülünün__file__
özniteliği, mutlak bir yol haline geldi. göreceli bir yoldan daha. Bu yollar, geçerli dizinos.chdir()
tarafından değiştirildikten sonra artık geçerliliğini koruyor. Bir yan etki olarak geri izleme, bu durumda__main__
modül çerçeveleri için mutlak yolu da görüntüler. (Victor Stinner tarafından bpo-20443 ‘de katılmıştır.)Python Development Mode ve debug build içinde, encoding ve errors argümanları artık dize kodlama ve kod çözme işlemleri için kontrol ediliyor. Örnekler:
open()
,str.encode()
vebytes.decode()
.Varsayılan olarak, en iyi performans için errors bağımsız değişkeni yalnızca ilk kodlama/kod çözme hatasında kontrol edilir ve encoding bağımsız değişkeni bazen boş dizeler için yoksayılır. (Victor Stinner tarafından bpo-37388 ‘de katılmıştır.)
"".replace("", s, n)
artık sıfır olmayan tümn
için boş bir dize yerines
döndürür. Artık"".replace("", s)
ile tutarlıdır.bytes
vebytearray
nesneleri için benzer değişiklikler vardır. (Serhiy Storchaka tarafından bpo-28029 ‘da katılmıştır.)Artık herhangi bir geçerli ifade dekoratör olarak kullanılabilir. Önceden, gramer çok daha kısıtlayıcıydı. Ayrıntılar için bkz. PEP 614. (Brandt Bucher tarafından bpo-39702 ‘de katılmıştır.)
typing
modülü için yardım iyileştirildi. doküman dizeleri artık tüm özel formlar ve özel genel takma adlar (Union
veList
gibi) için gösteriliyor.help()
öğesiniList[int]
gibi genel takma adla kullanmak, karşılık gelen somut tür için yardımı gösterir (bu durumdalist
). ( bpo-40257 içinde Serhiy Storchaka tarafından katılmıştır.)aclose()
/asend()
/athrow()
‘nın paralel çalışması artık yasaklanmıştır veag_running
artık zaman uyumsuz oluşturucunun gerçek çalışma durumunu yansıtmaktadır. (Yury Selivanov tarafından bpo-30773 ‘de katılmıştır.)__iter__
yöntemini çağırmadaki beklenmeyen hatalar artıkin
operatöründe veoperator
modülününcontains()
,indexOf()
vecountOf()
fonksiyonlarındaTypeError
tarafından maskelenmiyor. ( bpo-40824 içinde Serhiy Storchaka tarafından katılmıştır.)Parantezsiz lambda ifadeleri artık kavramalarda ve üreteç ifadelerinde bir
if
yan tümcesinde ifade parçası olamaz. Ayrıntılar için bpo-41848 ve bpo-43755 ‘e bakın.
Yeni Modüller¶
zoneinfo¶
zoneinfo
modülü, standart kitaplığa IANA saat dilimi veritabanı desteği getirir. Sistemin saat dilimi verileri tarafından desteklenen somut bir datetime.tzinfo
uygulaması olan zoneinfo.ZoneInfo
ekler.
Örnek:
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta
>>> # Daylight saving time
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
'PDT'
>>> # Standard time
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST
As a fall-back source of data for platforms that don’t ship the IANA database, the tzdata module was released as a first-party package – distributed via PyPI and maintained by the CPython core team.
Ayrıca bakınız
- PEP 615 – Standart Kitaplıkta IANA Saat Dilimi Veritabanı Desteği
Paul Ganssle tarafından yazılan ve uygulanan PEP
graphlib¶
Grafiklerin topolojik sıralamasını gerçekleştirmek üzere işlevsellik sunmak için graphlib.TopologicalSorter
sınıfını içeren graphlib
adlı yeni bir modül eklendi. ( bpo-17005 içinde Pablo Galindo, Tim Peters ve Larry Hastings’in katkılarıyla.)
Geliştirilen Modüller¶
ast¶
dump()
dosyasına indent seçeneği eklendi, bu da çok satırlı girintili bir çıktı üretmesini sağlar. ( bpo-37995 içinde Serhiy Storchaka tarafından katılmıştır.)
ast
modülüne, bir ast.AST
nesnesini ayrıştırmak ve ayrıştırıldığında eşdeğer bir ast.AST
nesnesi üretecek kod içeren bir dize üretmek için kullanılabilen bir fonksiyon olarak ast.unparse()
eklendi. ( bpo-38870 ‘de Pablo Galindo ve Batuhan Taskaya’nın katkısıyla.)
AST düğümlerine, o düğümü oluşturmak için kullanılan ASDL imzasını içeren doküman dizeleri eklendi. (Batuhan Taşkaya bpo-39638 ‘de katılmıştır.)
asyncio¶
Önemli güvenlik kaygıları nedeniyle, asyncio.loop.create_datagram_endpoint()
‘in reuse_address parametresi artık desteklenmemektedir. Bunun nedeni, UDP’deki SO_REUSEADDR
soket seçeneğinin davranışıdır. Daha fazla ayrıntı için loop.create_datagram_endpoint()
belgelerine bakın. (Kyle Stanley, Antoine Pitrou ve Yury Selivanov’un katkılarıyla bpo-37228.)
ThreadPoolExecutor
üzerinde kapanışı bitirmeyi bekleyen varsayılan yürütücü için bir kapatma programlayan yeni bir coroutine shutdown_default_executor()
eklendi. Ayrıca, asyncio.run()
yeni coroutine kelimesini kullanacak şekilde güncellendi. (Kyle Stanley tarafından bpo-34037 ‘de katılmıştır.)
İşlem dosyası tanımlayıcılarını yoklayan, Linux’a özgü bir çocuk izleyici uygulaması olan asyncio.PidfdChildWatcher
eklendi. (bpo-38692)
Yeni bir coroutine asyncio.to_thread()
eklendi. Olay döngüsünü engellemekten kaçınmak için GÇ’ye bağlı işlevleri ayrı bir iş parçacığında çalıştırmak için kullanılır ve temel olarak run_in_executor()
öğesinin doğrudan anahtar sözcük bağımsız değişkenlerini alabilen üst düzey bir sürümü olarak çalışır. ( bpo-32309 ‘da Kyle Stanley ve Yuri Selivanov tarafından katılmıştır.)
Bir zaman aşımı nedeniyle görevi iptal ederken, asyncio.wait_for()
şimdi, pozitif zaman aşımlarında olduğu gibi timeout <= 0 olduğunda da iptalin tamamlanmasını bekleyecek. ( bpo-32751 ‘de Elvis Pranskevichus tarafından katılmıştır.)
asyncio
now raises TypeError
when calling incompatible
methods with an ssl.SSLSocket
socket.
(Contributed by Ido Michael in bpo-37404.)
compileall¶
Yinelenen .pyc
dosyaları için hardlink kullanma olanağı eklendi: hardlink_dupes parametresi ve –hardlink-dupes komut satırı seçeneği. (Lumír ‘Frenzy’ Balhar’ın bpo-40495 içinde katkısı.)
Ortaya çıkan .pyc
dosyalarında yol işleme için yeni seçenekler eklendi: stripdir, prependdir, limit_sl_dest parametreleri ve -s, -p, -e komut satırı seçenekleri. Optimizasyon düzeyi seçeneğini birden çok kez belirleme olanağı eklendi. (Lumír ‘Frenzy’ Balhar’ın katkılarıyla bpo-38112.)
concurrent.futures¶
concurrent.futures.Executor.shutdown()
öğesine, yürütücüyü kapatmadan önce tamamlanmalarını beklemek yerine çalışmaya başlamamış bekleyen tüm vadeli işlemleri iptal eden yeni bir cancel_futures parametresi eklendi. (Kyle Stanley tarafından bpo-39349 ‘da katılmıştır.)
ThreadPoolExecutor
ve ProcessPoolExecutor
‘dan arka plan programı konuları kaldırıldı. Bu, alt yorumlayıcılarla uyumluluğu ve kapatma süreçlerinde öngörülebilirliği geliştirir. (Kyle Stanley tarafından bpo-39812 ‘de katılmıştır.)
ProcessPoolExecutor
içindeki çalışanlar artık talep üzerine, yalnızca yeniden kullanılacak boş çalışan olmadığında ortaya çıkıyor. Bu, başlatma yükünü optimize eder ve boşta kalan çalışanlar için kaybedilen CPU süresini azaltır. (Kyle Stanley tarafından bpo-39207 ‘de katılmıştır.)
curses¶
curses.get_escdelay()
, curses.set_escdelay()
, curses.get_tabsize()
ve curses.set_tabsize()
işlevleri eklendi. (Anthony Sottile tarafından bpo-38312 ‘de katılmıştır.)
datetime¶
The isocalendar()
of datetime.date
and isocalendar()
of datetime.datetime
methods now returns a namedtuple()
instead of a tuple
.
(Contributed by Donghee Na in bpo-24416.)
distutils¶
upload komutu artık SHA2-256 ve Blake2b-256 hash özetleri oluşturuyor. MD5 özetini engelleyen platformlarda MD5’i atlar. ( bpo-40698 içinde Christian Heimes tarafından katılmıştır.)
fcntl¶
Added constants F_OFD_GETLK
, F_OFD_SETLK
and F_OFD_SETLKW
.
(Contributed by Donghee Na in bpo-38602.)
ftplib¶
FTP
and FTP_TLS
now raise a ValueError
if the given timeout for their constructor is zero to prevent the creation of
a non-blocking socket. (Contributed by Donghee Na in bpo-39259.)
gc¶
Çöp toplayıcı, bazı nesnelerin diriltildiği bir koleksiyon oluşturduğunda (sonlandırıcılar yürütüldükten sonra yalıtılmış döngülerin dışından erişilebilirler), hala erişilemeyen tüm nesnelerin toplanmasını engellemeyin. ( bpo-38379 ‘da Pablo Galindo ve Tim Peters tarafıdnan eklendi.)
Bir nesnenin çöp toplayıcı tarafından sonlandırılıp sonlandırılmadığını kontrol etmek için gc.is_finalized()
adlı yeni bir işlev eklendi. (Pablo Galindo tarafından bpo-39322 ‘de katılmıştır.)
hashlib¶
hashlib
modülü artık mevcut olduğunda OpenSSL’den SHA3 karmalarını ve SHAKE XOF’u kullanabilir. (Christian Heimes tarafından bpo-37630 ‘da katılmıştır.)
Yerleşik karma modüller, OpenSSL tabanlı uygulamanın kullanımını zorlamak için artık ./configure --without-builtin-hashlib-hashes
ile devre dışı bırakılabilir veya e.g. ./configure --with-builtin-hashlib-hashes=sha3,blake2
ile seçici olarak etkinleştirilebilir. (Christian Heimes tarafından bpo-40479 ‘da katılmıştır)
http¶
HTTP status codes 103 EARLY_HINTS
, 418 IM_A_TEAPOT
and 425 TOO_EARLY
are added to
http.HTTPStatus
. (Contributed by Donghee Na in bpo-39509 and Ross Rhodes in bpo-39507.)
IDLE ve idlelib¶
İmlecin yanıp sönmesini kapatmak için seçenek eklendi. ( bpo-4603 içinde Zackery Spytz tarafından katılmıştır.)
Escape tuşu artık IDLE tamamlama pencerelerini kapatıyor. ( bpo-38944 içinde Johnny Najera tarafından katılmıştır.)
Modül adı tamamlama listesine anahtar kelimeler eklendi. ( bpo-37765 içinde Terry J. Reedy tarafından katılmıştır.)
3.9 bakım sürümlerinde yenilikler
IDLE’yi başlatın sys.excepthook()
(‘-n’ olmadan başlatıldığında). Kullanıcı kancaları daha önce yok sayılırdı. ( bpo-43008 ‘de Ken Hilton tarafından katılmıştır.)
Yukarıdaki değişiklikler 3.8 bakım sürümlerine geri aktarılmıştır.
Ayarlar iletişim kutusunu yeniden düzenleyin. Genel sekmesini Windows ve Kabuk/Ed sekmelerine ayırın. Yardım menüsünü genişleten yardım kaynaklarını Uzantılar sekmesine taşıyın. Yeni seçenekler için yer açın ve iletişim kutusunu kısaltın. İkincisi, iletişim kutusunu küçük ekranlara daha iyi sığdırır. ( bpo-40468 içinde Terry Jan Reedy tarafından katılmıştır.) Girinti alanı ayarını Yazı Tipi sekmesinden yeni Windows sekmesine taşıyın. (Mark Roseman ve Terry Jan Reedy tarafından bpo-33962 ‘de katılmıştır.)
.pyi
dosyalarına vurgulama sözdizimi uygulayın. ( bpo-45447 içinde Alex Waygood ve Terry Jan Reedy tarafından katılmıştır.)
imaplib¶
IMAP4
and IMAP4_SSL
now have
an optional timeout parameter for their constructors.
Also, the open()
method now has an optional timeout parameter
with this change. The overridden methods of IMAP4_SSL
and
IMAP4_stream
were applied to this change.
(Contributed by Donghee Na in bpo-38615.)
imaplib.IMAP4.unselect()
is added.
imaplib.IMAP4.unselect()
frees server’s resources associated with the
selected mailbox and returns the server to the authenticated
state. This command performs the same actions as imaplib.IMAP4.close()
, except
that no messages are permanently removed from the currently
selected mailbox. (Contributed by Donghee Na in bpo-40375.)
importlib¶
İçe aktarma ifadeleriyle tutarlılığı artırmak için importlib.util.resolve_name()
artık geçersiz göreli içe aktarma girişimleri için ValueError
yerine ImportError
değerini yükseltiyor. ( bpo-37444 içinde Ngalim Siregar tarafından katılmıştır.)
Değişmez modül nesnelerini yayınlayan içe aktarma yükleyicileri artık bağımsız modüllere ek olarak değişmez paketleri de yayınlayabilir. (Dino Viehland tarafından bpo-39336 ‘da katılmıştır.)
Paket verilerindeki alt dizinleri destekleyen, importlib_resources
sürüm 1.5’te backport ile eşleşen importlib.resources.files()
işlevi eklendi. (Jason R. Coombs’un bpo-39791 ‘deki katkılarıyla.)
importlib_metadata
sürüm 1.6.1’den importlib.metadata
yenilendi.
inspect¶
inspect.BoundArguments.arguments
, OrderedDict
yerine normal dict olarak değiştirildi. ( bpo-36350 ve bpo-39775 içinde Inada Naoki tarafından katılmıştır.)
ipaddress¶
ipadresi
artık IPv6 Kapsamlı Adresleri (%<scope_id>
sonekine sahip IPv6 adresi) desteklemektedir.
Kapsamlı IPv6 adresleri ipaddress.IPv6Address
kullanılarak ayrıştırılabilir. Varsa, kapsam bölgesi kimliği scope_id
özelliği aracılığıyla kullanılabilir. (Oleksandr Pavliuk tarafından bpo-34788 ‘de katılmıştır.)
Python 3.9.5’ten itibaren ipaddress
modülü artık IPv4 adres dizelerinde baştaki sıfırları kabul etmemektedir. ( bpo-36384 içinde Christian Heimes tarafından katılmıştır).
math¶
Birden çok argümanı işlemek için math.gcd()
işlevi genişletildi. Önceden, yalnızca iki argümanı destekliyordu. ( bpo-39648 içinde Serhiy Storchaka tarafından katılmıştır.)
math.lcm()
eklendi: belirtilen bağımsız değişkenlerin en küçük ortak katını döndürür. ( bpo-39479 ve bpo-39648 ‘de Mark Dickinson, Ananthakrishnan ve Serhiy Storchaka’nın katkılarıyla.)
Eklenen math.nextafter()
: x’ten sonra y’ye doğru bir sonraki kayan nokta değerini döndürür. (Victor Stinner tarafından bpo-39288 ‘de katılmıştır.)
Eklenen math.ulp()
: bir kayan noktanın en önemsiz bitinin değerini döndürür. (Victor Stinner tarafından bpo-39310 ‘da katılmıştır.)
multiprocessing¶
multiprocessing.SimpleQueue
sınıfı, kuyruğu açıkça kapatmak için yeni bir close()
yöntemine sahiptir. (Victor Stinner tarafından bpo-30966 ‘da katılmıştır.)
nntplib¶
NNTP
and NNTP_SSL
now raise a ValueError
if the given timeout for their constructor is zero to prevent the creation of
a non-blocking socket. (Contributed by Donghee Na in bpo-39259.)
os¶
Added CLD_KILLED
and CLD_STOPPED
for si_code
.
(Contributed by Donghee Na in bpo-38493.)
Exposed the Linux-specific os.pidfd_open()
(bpo-38692) and
os.P_PIDFD
(bpo-38713) for process management with file
descriptors.
os.unsetenv()
işlevi artık Windows’ta da mevcuttur. (Victor Stinner tarafından bpo-39413 ‘de katılmıştır.)
os.putenv()
ve os.unsetenv()
fonksiyonları artık her zaman kullanılabilir. (Victor Stinner tarafından bpo-39395 ‘de katılmıştır.)
os.waitstatus_to_exitcode()
fonksiyonu eklendi: bekleme durumunu çıkış koduna dönüştürün. (Victor Stinner tarafından bpo-40094 ‘de katılmıştır.)
pathlib¶
Added pathlib.Path.readlink()
which acts similarly to
os.readlink()
.
(Contributed by Girts Folkmanis in bpo-30618)
pdb¶
Artık Windows’ta Pdb
~/.pdbrc
desteklemektedir. ( bpo-20523 içinde Tim Hopper ve Dan Lidral-Porter tarafından katılmıştır.)
poplib¶
POP3
and POP3_SSL
now raise a ValueError
if the given timeout for their constructor is zero to prevent the creation of
a non-blocking socket. (Contributed by Donghee Na in bpo-39259.)
pprint¶
pprint
artık types.SimpleNamespace
güzel yazdırabilir. (Carl Bordum Hansen tarafından bpo-37376 ‘da katılmıştır.)
pydoc¶
The documentation string is now shown not only for class, function,
method etc, but for any object that has its own __doc__
attribute.
(Contributed by Serhiy Storchaka in bpo-40257.)
random¶
Yeni bir random.Random.randbytes
yöntemi eklendi: rastgele baytlar oluştur. (Victor Stinner tarafından bpo-40286 ‘da katılmıştır.)
signal¶
Bir pid yerine bir dosya tanımlayıcı kullanarak bir işleme sinyal göndermek için Linux’a özgü signal.pidfd_send_signal()
ortaya çıktı. (bpo-38712)
smtplib¶
SMTP
and SMTP_SSL
now raise a ValueError
if the given timeout for their constructor is zero to prevent the creation of
a non-blocking socket. (Contributed by Donghee Na in bpo-39259.)
LMTP
constructor now has an optional timeout parameter.
(Contributed by Donghee Na in bpo-39329.)
socket¶
The socket
module now exports the CAN_RAW_JOIN_FILTERS
constant on Linux 4.1 and greater.
(Contributed by Stefan Tatschner and Zackery Spytz in bpo-25780.)
The socket module now supports the CAN_J1939
protocol on
platforms that support it. (Contributed by Karl Ding in bpo-40291.)
Soket modülü artık socket.send_fds()
ve socket.recv_fds()
fonksiyonlarına sahiptir. (Joannah Nanjekye, Shinya Okano ve Victor Stinner’ın katkılarıyla bpo-28724.)
time¶
AIX üzerinde thread_time()
artık 10 milisaniye çözünürlüğe sahip clock_gettime(CLOCK_THREAD_CPUTIME_ID)
yerine nanosaniye çözünürlüğe sahip thread_cputime()
ile uygulanmaktadır. (Batuhan Taşkaya bpo-40192 ‘de katılmıştır)
sys¶
Added a new sys.platlibdir
attribute: name of the platform-specific
library directory. It is used to build the path of standard library and the
paths of installed extension modules. It is equal to "lib"
on most
platforms. On Fedora and SuSE, it is equal to "lib64"
on 64-bit platforms.
(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner in bpo-1294959.)
Previously, sys.stderr
was block-buffered when non-interactive. Now
stderr
defaults to always being line-buffered.
(Contributed by Jendrik Seipp in bpo-13601.)
tracemalloc¶
İzlenen bellek bloklarının tepe boyutunu geçerli boyuta ayarlamak ve belirli kod parçalarının zirvesini ölçmek için tracemalloc.reset_peak()
eklendi. (Huon Wilson tarafından bpo-40630 ‘da katılmıştır.)
typing¶
PEP 593, mevcut türleri bağlama özel meta verilerle süslemek için bir typing.Annotated
tipi ve çalışma zamanında meta verilere erişmek için typing.get_type_hints()
için yeni include_extras
parametresini tanıttı. (Till Varoquaux ve Konstantin Kashin’in katkılarıyla.)
unicodedata¶
Unicode veritabanı 13.0.0 sürümüne güncellendi. (bpo-39926).
venv¶
venv
tarafından sağlanan aktivasyon betiklerinin tümü artık istem özelleştirmelerini her zaman __VENV_PROMPT__
tarafından belirtilen değeri kullanarak tutarlı bir şekilde belirtiyor. Önceden bazı komut dosyaları koşulsuz olarak __VENV_PROMPT__
kullandı, diğerleri yalnızca ayarlandıysa (varsayılan durum buydu) ve biri bunun yerine __VENV_NAME__
kullanıyordu. ( bpo-37663 içinde Brett Cannon tarafından katılmıştır.)
xml¶
Nitelikler içindeki boşluk karakterleri artık xml.etree.ElementTree
XML dosyasına serileştirilirken korunur. EOLN’ler artık “n” olarak normalleştirilmez. Bu, XML spesifikasyonunun 2.11 bölümünün nasıl yorumlanacağına ilişkin tartışmanın sonucudur. ( bpo-39011 içinde Mefistotelis tarafından katılmıştır.)
Optimizasyonlar¶
Kavramalarda geçici bir değişken atamak için deyim optimize edildi. Şimdi
for y in [expr]
, basit biry = expr
ataması kadar hızlıdır. Örneğin:sums = [s for s in [0] for x in data for s in [s + x]]
:=
operatörünün aksine bu deyim, dış kapsama bir değişken sızdırmaz.( bpo-32856 içinde Serhiy Storchaka tarafından katılmıştır.)
Çok iş parçacıklı uygulamalarda optimize edilmiş sinyal işleme. Ana iş parçacığından farklı bir iş parçacığı bir sinyal alırsa, işlenemeyen bekleyen sinyalleri kontrol etmek için bayt kodu değerlendirme döngüsü artık her bayt kodu talimatında kesintiye uğramaz. Yalnızca ana yorumlayıcının ana iş parçacığı sinyalleri işleyebilir.
Önceden, bayt kodu değerlendirme döngüsü, ana iş parçacığı sinyalleri işleyene kadar her komutta kesintiye uğruyordu. (Victor Stinner tarafından bpo-40010 ‘da katılmıştır.)
subprocess
modülünü FreeBSD’declosefrom()
kullanarak optimize etti. ( bpo-38061 ‘de Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Koçak ve Victor Stinner’ın katkılarıyla.)PyLong_FromDouble()
, long değerine uyan değerler için artık 1,87 kata kadar daha hızlı. (Sergey Fedoseev tarafından bpo-37986 ‘da katılmıştır.)A number of Python builtins (
range
,tuple
,set
,frozenset
,list
,dict
) are now sped up by using PEP 590 vectorcall protocol. (Contributed by Donghee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in bpo-37207.)Diğer kümenin temel kümeden çok daha büyük olduğu durumlar için
difference_update()
optimize edildi. ( bpo-8425 içinde Michele Orrù tarafından sağlanan kodla Evgeny Kapun tarafından önerilmiştir.)Python’un küçük nesne ayırıcısı (
obmalloc.c
) artık (1’den fazla değil) bir boş arenanın işletim sistemine döndürmeden anında yeniden kullanım için kullanılabilir kalmasına izin veriyor. Bu, her yinelemede bir arenanın yeniden yaratılıp yok edilebileceği basit döngülerde çarpışmayı önler. ( bpo-37257 içinde Tim Peters tarafından katılmıştır.)floor division of float operation now has a better performance. Also the message of
ZeroDivisionError
for this operation is updated. (Contributed by Donghee Na in bpo-39434.)UTF-8 ve ascii codec’leriyle kısa ASCII dizilerinin kodunu çözmek artık yaklaşık %15 daha hızlı. (Inada Naoki tarafından bpo-37348 ‘de katılmıştır.)
İşte Python 3.4’ten Python 3.9’a kadar olan performans iyileştirmelerinin bir özeti:
Python version 3.4 3.5 3.6 3.7 3.8 3.9
-------------- --- --- --- --- --- ---
Variable and attribute read access:
read_local 7.1 7.1 5.4 5.1 3.9 3.9
read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.5
read_global 15.5 19.0 14.3 13.6 7.6 7.8
read_builtin 21.1 21.6 18.5 19.0 7.5 7.8
read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 17.9
read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 16.9
read_instancevar 32.4 33.1 28.0 26.3 25.4 25.3
read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 20.5
read_namedtuple 73.8 57.5 45.0 46.8 18.4 18.7
read_boundmethod 37.6 37.9 29.6 26.9 27.7 41.1
Variable and attribute write access:
write_local 8.7 9.3 5.5 5.3 4.3 4.3
write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.8
write_global 19.7 21.2 18.0 18.0 15.8 16.7
write_classvar 92.9 96.0 104.6 102.1 39.2 39.8
write_instancevar 44.6 45.8 40.0 38.9 35.5 37.4
write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 25.8
Data structure read access:
read_list 24.2 24.5 20.8 20.8 19.0 19.5
read_deque 24.7 25.5 20.2 20.6 19.8 20.2
read_dict 24.3 25.7 22.3 23.0 21.0 22.4
read_strdict 22.6 24.3 19.5 21.2 18.9 21.5
Data structure write access:
write_list 27.1 28.5 22.5 21.6 20.0 20.0
write_deque 28.7 30.1 22.7 21.8 23.5 21.7
write_dict 31.4 33.3 29.3 29.2 24.7 25.4
write_strdict 28.4 29.9 27.5 25.2 23.1 24.5
Stack (or queue) operations:
list_append_pop 93.4 112.7 75.4 74.2 50.8 50.6
deque_append_pop 43.5 57.0 49.4 49.2 42.5 44.2
deque_append_popleft 43.7 57.3 49.7 49.7 42.8 46.4
Timing loop:
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3
These results were generated from the variable access benchmark script at:
Tools/scripts/var_access_benchmark.py
. The benchmark script displays timings
in nanoseconds. The benchmarks were measured on an
Intel® Core™ i7-4960HQ processor
running the macOS 64-bit builds found at
python.org.
Deprecated¶
Distutils
bdist_msi
komutu artık kullanımdan kaldırılmıştır, bunun yerinebdist_wheel
(tekerlek paketleri) kullanın. ( bpo-39586 içinde Hugo van Kemenade tarafından katılmıştır.)Şu anda
math.factorial()
, negatif olmayan tamsayı değerleri olan (5.0
gibi)float
örneklerini kabul eder. İntegral olmayan ve negatif dalgalanmalar için birValueError
oluşturur. Artık kullanımdan kaldırıldı. Gelecekteki Python sürümlerinde, tüm değişkenler için birTypeError
oluşturacaktır. ( bpo-37315 içinde Serhiy Storchaka tarafından katılmıştır.)The
parser
andsymbol
modules are deprecated and will be removed in future versions of Python. For the majority of use cases, users can leverage the Abstract Syntax Tree (AST) generation and compilation stage, using theast
module.The Public C API functions
PyParser_SimpleParseStringFlags()
,PyParser_SimpleParseStringFlagsFilename()
,PyParser_SimpleParseFileFlags()
andPyNode_Compile()
are deprecated and will be removed in Python 3.10 together with the old parser.Bir boole bağlamında
NotImplemented
kullanmak, neredeyse tamamen yanlış zengin karşılaştırıcı uygulamalarının bir sonucu olduğu için kullanımdan kaldırılmıştır. Python’un gelecekteki bir sürümündeTypeError
haline getirilecektir. ( bpo-35712 içinde Josh Rosenberg tarafından katılmıştır.)random
modülü şu anda herhangi bir hashable türünü olası bir tohum değeri olarak kabul ediyor. Ne yazık ki, bu türlerden bazılarının deterministik bir hash değerine sahip olduğu garanti edilmiyor. Python 3.9’dan sonra, modül tohumlarınıNone
,int
,float
,str
,bytes
vebytearray
ilesınırlayacaktır.GzipFile
dosyasının mode bağımsız değişkeni belirtilmeden yazmak için açılması kullanımdan kaldırılmıştır. Gelecekteki Python sürümlerinde, her zaman varsayılan olarak okumak için açılacaktır. Bir uyarı yazmak ve susturmak için açmak için mode argümanını belirtin. ( bpo-28286 içinde Serhiy Storchaka tarafından katılmıştır.)Deprecated the
split()
method of_tkinter.TkappType
in favour of thesplitlist()
method which has more consistent and predictable behavior. (Contributed by Serhiy Storchaka in bpo-38371.)Eşyordam nesnelerinin açıkça
asyncio.wait()
öğesine iletilmesi kullanımdan kaldırılmıştır ve sürüm 3.11’de kaldırılacaktır. (Yury Selivanov ve Kyle Stanley tarafından bpo-34790 ‘da katılmıştır.)binhex4 and hexbin4 standards are now deprecated. The
binhex
module and the followingbinascii
functions are now deprecated:b2a_hqx()
,a2b_hqx()
rlecode_hqx()
,rledecode_hqx()
(Victor Stinner tarafından bpo-39353 ‘de katılmıştır.)
ast
sınıflarıslice
,Index
veExtSlice
kullanımdan kaldırılmış kabul edilir ve gelecekteki Python sürümlerinde kaldırılacaktır.Index(value)
yerinevalue
kullanılmalıdır.ExtSlice(slices)
yerineTuple(slices, Load())
kullanılmalıdır. ( bpo-34822 içinde Serhiy Storchaka tarafından katılmıştır.)ast
sınıflarıSuite
,Param
,AugLoad
veAugStore
kullanımdan kaldırılmış kabul edilir ve gelecekteki Python sürümlerinde kaldırılacaktır. Ayrıştırıcı tarafından üretilmemişler ve Python 3’teki kod üreteci tarafından kabul edilmemişler. (bpo-39639 ve bpo-39969 ‘da Batuhan Taşkaya’nın ve bpo-39988 ‘deki Serhiy Storchaka’nın katkılarıyla.)The
PyEval_InitThreads()
andPyEval_ThreadsInitialized()
functions are now deprecated and will be removed in Python 3.11. CallingPyEval_InitThreads()
now does nothing. The GIL is initialized byPy_Initialize()
since Python 3.7. (Contributed by Victor Stinner in bpo-39877.)shlex.split()
işlevine ilk bağımsız değişken olarakNone
geçirmek kullanımdan kaldırılmıştır. ( bpo-33262 içinde Zackery Spytz tarafından katılmıştır.)smtpd.MailmanProxy()
is now deprecated as it is unusable without an external module,mailman
. (Contributed by Samuel Colvin in bpo-35800.)The
lib2to3
module now emits aPendingDeprecationWarning
. Python 3.9 switched to a PEG parser (see PEP 617), and Python 3.10 may include new language syntax that is not parsable by lib2to3’s LL(1) parser. Thelib2to3
module may be removed from the standard library in a future Python version. Consider third-party alternatives such as LibCST or parso. (Contributed by Carl Meyer in bpo-40360.)random.shuffle()
öğesinin random parametresi kullanımdan kaldırıldı. (Katkı:Raymond Hettinger tarafından bpo-40465)
Kaldırılanlar¶
The erroneous version at
unittest.mock.__version__
has been removed.nntplib.NNTP
:xpath()
andxgtitle()
methods have been removed. These methods are deprecated since Python 3.3. Generally, these extensions are not supported or not enabled by NNTP server administrators. Forxgtitle()
, please usenntplib.NNTP.descriptions()
ornntplib.NNTP.description()
instead. (Contributed by Donghee Na in bpo-39366.)array.array
:tostring()
vefromstring()
yöntemleri kaldırıldı. Bunlar, Python 3.2’den beri kullanımda olmayantobytes()
vefrombytes()
takma adlarıydı. (Victor Stinner tarafından bpo-38916 ‘da katılmıştır.)Belgelenmemiş
sys.callstats()
fonksiyonu kaldırıldı. Python 3.7’den beri kullanımdan kaldırıldı ve her zamanNone
döndürdü. Python 3.7’de zaten kaldırılmış olanCALL_PROFILE
adlı özel bir derleme seçeneği gerektiriyordu. (Victor Stinner tarafından bpo-37414 ‘de katılmıştır.)sys.getcheckinterval()
vesys.setcheckinterval()
işlevleri kaldırıldı. Python 3.2’den beri kullanımdan kaldırıldılar. Bunun yerinesys.getswitchinterval()
vesys.setswitchinterval()
kullanın. (Victor Stinner tarafından bpo-37392 ‘de katılmıştır.)PyImport_Cleanup()
C işlevi kaldırıldı. Şu şekilde belgelenmiştir: “Modül tablosunu boşaltın. Yalnızca dahili kullanım için.” (Victor Stinner tarafından bpo-36710 ‘da katılmıştır.)_dummy_thread
vedummy_threading
modülleri kaldırıldı. Bu modüller, iş parçacığı desteği gerektiren Python 3.7’den beri kullanımdan kaldırılmıştır. (Victor Stinner tarafından bpo-37312 ‘de katılmıştır.)aifc.openfp()
alias toaifc.open()
,sunau.openfp()
alias tosunau.open()
, andwave.openfp()
alias towave.open()
have been removed. They were deprecated since Python 3.7. (Contributed by Victor Stinner in bpo-37320.)The
isAlive()
method ofthreading.Thread
has been removed. It was deprecated since Python 3.8. Useis_alive()
instead. (Contributed by Donghee Na in bpo-37804.)ElementTree
modülündekiElementTree
veElement
sınıflarınıngetchildren()
vegetiterator()
yöntemleri kaldırıldı . Python 3.2’de kullanımdan kaldırıldılar.x.getchildren()
yerineiter(x)
vex.getiterator()
yerinex.iter()
veyalist(x.iter())
kullanın. ( bpo-36543 içinde Serhiy Storchaka tarafından katılmıştır.)Eski
plistlib
API’si kaldırıldı, Python 3.4’ten beri kullanımdan kaldırıldı.load()
,loads()
,dump()
vedumps()
işlevlerini kullanın. Ek olarak, use_builtin_types parametresi kaldırıldı, bunun yerine her zaman standartbytes
nesneleri kullanıldı. (Jon Janzen tarafından bpo-36409 ‘da katılmıştır.)PyGen_NeedsFinalizing
C işlevi kaldırıldı. PEP 442 uygulandıktan sonra CPython içinde herhangi bir yerde belgelenmedi, test edilmedi veya kullanılmadı. Yama Joannah Nanjekye tarafından. (Joannah Nanjekye tarafından bpo-15088 ‘de katılmıştır)Python 3.1’den beri kullanımdan kaldırılan
base64.encodestring()
vebase64.decodestring()
takma adları kaldırıldı: bunun yerinebase64.encodebytes()
vebase64.decodebytes()
kullanın. (Victor Stinner tarafından bpo-39351 ‘de katılmıştır.)fractions.gcd()
işlevi kaldırıldı, Python 3.5’ten beri kullanımdan kaldırıldı (bpo-22486): bunun yerinemath.gcd()
kullanın. (Victor Stinner tarafından bpo-39350 ‘de katılmıştır.)bz2.BZ2File
öğesinin buffering parametresi kaldırıldı. Python 3.0’dan bu yana yok sayıldı ve kullanıldığında birDeprecationWarning
yaydı. Dosyanın nasıl açılacağını kontrol etmek için bir açık dosya nesnesi iletin. (Victor Stinner tarafından bpo-39357 ‘de katılmıştır.)json.loads()
öğesinin encoding parametresi kaldırıldı. Python 3.1’den itibaren kullanımdan kaldırıldı ve göz ardı edildi; onu kullanmak Python 3.8’den beri birDeprecationWarning
yayınladı. (Inada Naoki’nin katkılarıyla bpo-39377)with (awat asyncio.lock):
vewith (get from asyncio.lock):
ifadeleri artık desteklenmemektedir, bunun yerineasync with lock
kullanın. Aynı şeyasyncio.Condition
veasyncio.Semaphore
için de geçerlidir. (Andrew Svetlov tarafından bpo-34793 ‘de katılmıştır.)The
sys.getcounts()
function, the-X showalloccount
command line option and theshow_alloc_count
field of the C structurePyConfig
have been removed. They required a special Python build by definingCOUNT_ALLOCS
macro. (Contributed by Victor Stinner in bpo-39489.)typing.NamedTuple
sınıfının_field_types
özniteliği kaldırıldı. Python 3.8’den beri kullanımdan kaldırılmıştır. Bunun yerine__annotations__
özelliğini kullanın. (Serhiy Storchaka’nın bpo-40182 ‘deki katkısıyla)The
symtable.SymbolTable.has_exec()
method has been removed. It was deprecated since 2006, and only returningFalse
when it’s called. (Contributed by Batuhan Taskaya in bpo-40208)The
asyncio.Task.current_task()
andasyncio.Task.all_tasks()
have been removed. They were deprecated since Python 3.7 and you can useasyncio.current_task()
andasyncio.all_tasks()
instead. (Contributed by Rémi Lapeyre in bpo-40967)html.parser.HTMLParser
sınıfındakiunescape()
metodu kaldırıldı (Python 3.4’ten beri kullanımdan kaldırıldı).html.unescape()
, karakter referanslarını karşılık gelen unicode karakterlere dönüştürmek için kullanılmalıdır.
Python 3.9’a Taşıma¶
Bu bölüm, daha önce açıklanan değişiklikleri ve kodunuzda değişiklik gerektirebilecek diğer hata düzeltmelerini listeler.
Python API’sindeki Değişiklikler¶
__import__()
veimportlib.util.resolve_name()
şimdi daha önceValueError
oluşturduğu yerdeImportError
‘u yükseltiyor. Belirli istisna türünü yakalayan ve hem Python 3.9 hem de önceki sürümleri destekleyen arayanların,except (ImportError, ValueError):
kullanarak her ikisini de yakalaması gerekir.venv
etkinleştirme betikleri,__VENV_PROMPT__
""
olarak ayarlandığında artık özel durum değildir.The
select.epoll.unregister()
method no longer ignores theEBADF
error. (Contributed by Victor Stinner in bpo-39239.)bz2.BZ2File
öğesinin compresslevel parametresi, buffering parametresi kaldırıldığı için yalnızca anahtar kelime haline geldi. (Victor Stinner tarafından bpo-39357 ‘de katılmıştır.)Abonelik için basitleştirilmiş AST. Basit indeksler değerleri ile temsil edilecek, genişletilmiş dilimler demetler olarak temsil edilecektir.
Index(value)
, birvalue
döndürür,ExtSlice(slices)
,Tuple(slices, Load())
döndürür. ( bpo-34822 ile Serhiy Storchaka tarafından katılmıştır.)importlib
modülü artık-E
veya-I
komut satırı seçenekleri kullanılırkenPYTHONCASEOK
ortam değişkenini yok sayar.kodlama parametresi
ftplib.FTP
veftplib.FTP_TLS
sınıflarına yalnızca anahtar kelime parametresi olarak eklendi ve varsayılan kodlama Latin-1’den UTF-8’e değiştirilerek RFC 2640 olarak değiştirildi .asyncio.loop.shutdown_default_executor()
,AbstractEventLoop
öğesine eklendi, yani ondan devralan alternatif olay döngülerinde bu yöntem tanımlanmalıdır. (Kyle Stanley tarafından bpo-34037 ‘de katılmıştır.)__future__
modülündeki gelecek bayraklarının sabit değerleri, derleyici bayraklarıyla çarpışmayı önlemek için güncellenir. Daha öncePyCF_ALLOW_TOP_LEVEL_AWAIT
,CO_FUTURE_DIVISION
ile çakışıyordu. (Batuhan Taskaya bpo-39562 ‘de katılmıştır)array('u')
now useswchar_t
as C type instead ofPy_UNICODE
. This change doesn’t affect to its behavior becausePy_UNICODE
is alias ofwchar_t
since Python 3.3. (Contributed by Inada Naoki in bpo-34538.)logging.getLogger()
API’si artıkroot'
adı iletildiğinde kök kaydediciyi döndürürken, daha önce'root'
adlı kök olmayan bir günlükçü döndürdü. Bu, kullanıcı kodunun'root'
adlı kök olmayan bir günlükçüyü açıkça istediği veya'root.py'
adlı bazı üst düzey modüllerdelogging.getLogger(__name__)
kullanarak bir günlükçü başlattığı durumları etkileyebilir. ( bpo-37742 içinde Vinay Sajip tarafından katılmıştır.)Division handling of
PurePath
now returnsNotImplemented
instead of raising aTypeError
when passed something other than an instance ofstr
orPurePath
. This allows creating compatible classes that don’t inherit from those mentioned types. (Contributed by Roger Aiudi in bpo-34775).Python 3.9.5’ten itibaren
ipaddress
modülü artık IPv4 adres dizilerinde baştaki sıfırları kabul etmemektedir. Öndeki sıfırlar belirsizdir ve bazı kitaplıklar tarafından sekizli gösterim olarak yorumlanır. Örneğin, eski işlevsocket.inet_aton()
baştaki sıfırları sekizli gösterim olarak ele alır. Moderninet_pton()
glibc uygulaması baştaki sıfırları kabul etmez. ( bpo-36384 içinde Christian Heimes tarafından katılmıştır).codecs.lookup()
artık kodlama adınıencodings.normalize_encoding()
ile aynı şekilde normalleştirir, ancakcodecs.lookup()
ayrıca adı küçük harfe dönüştürür. Örneğin,"latex+latin1"
kodlama adı artık"latex_latin1"
olarak normalleştirildi. ( bpo-37751 ‘de Jordon Xu tarafından katılmıştır.)
C API’sindeki değişiklikler¶
heap-allocated type örnekleri (
PyType_FromSpec()
ve benzer API’ler ile oluşturulanlar gibi), Python 3.8’den bu yana tür nesnesine bir başvuru içerir. Python 3.8’in “C API’sindeki Değişiklikler” bölümünde belirtildiği gibi, vakaların büyük çoğunluğu için herhangi bir yan etki olmamalıdır, ancak özel birtp_traverse
‘ya sahip türler için tüm özeltp_traverse
yığın işlevlerinin yapıldığından emin olun. tahsis edilen tipler, nesnenin tipini ziyaret eder.Örnek:
int foo_traverse(foo_struct *self, visitproc visit, void *arg) { // Rest of the traverse function #if PY_VERSION_HEX >= 0x03090000 // This was not needed before Python 3.9 (Python issue 35810 and 40217) Py_VISIT(Py_TYPE(self)); #endif }
Geçiş işleviniz, temel sınıfının (veya başka bir türün)
tp_traverse
için yetkisini veriyorsa,Py_TYPE(self)
öğesinin yalnızca bir kez ziyaret edildiğinden emin olun. Yalnızca heap type ‘ıntp_traverse
içindeki tipi ziyaret etmesinin beklendiğini unutmayın.Örneğin,
tp_traverse
işleviniz aşağıdakileri içeriyorsa:base->tp_traverse(self, visit, arg)
then add:
#if PY_VERSION_HEX >= 0x03090000 // This was not needed before Python 3.9 (bpo-35810 and bpo-40217) if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) { // a heap type's tp_traverse already visited Py_TYPE(self) } else { Py_VISIT(Py_TYPE(self)); } #else
PyEval_CallObject
,PyEval_CallFunction
,PyEval_CallMethod
vePyEval_CallObjectWithKeywords
işlevleri kullanımdan kaldırılmıştır. Bunun yerinePyObject_Call()
ve türevlerini kullanın. (Daha fazla ayrıntı için bpo-29548 konusuna bakın.)
CPython bayt kodu değişiklikleri¶
LOAD_ASSERTION_ERROR
işlem kodu,assert
ifadesini işlemek için eklendi. Önceden,AssertionError
istisnası gölgeleniyorsa, iddia ifadesi düzgün çalışmıyordu. ( bpo-34880 içinde Zackery Spytz tarafından katılmıştır.)COMPARE_OP
işlem kodu dört farklı talimata bölünmüştür:Zengin karşılaştırmalar için
COMPARE_OP
‘-dir’ ve ‘değildir’ testleri için
IS_OP
İçeride
veiçeride değil
testleri içinCONTAINS_OP
‘try-except’ ifadelerindeki istisnaları kontrol etmek için
JUMP_IF_NOT_EXC_MATCH
.
(Mark Shannon tarafından bpo-39156 ‘da katılmıştır.)
Yapı Değişiklikleri¶
Added
--with-platlibdir
option to theconfigure
script: name of the platform-specific library directory, stored in the newsys.platlibdir
attribute. Seesys.platlibdir
attribute for more information. (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner in bpo-1294959.)COUNT_ALLOCS
özel yapı makrosu kaldırıldı. (Victor Stinner tarafından bpo-39489 ‘da katılmıştır.)On non-Windows platforms, the
setenv()
andunsetenv()
functions are now required to build Python. (Contributed by Victor Stinner in bpo-39395.)Windows dışı platformlarda,
bdist_wininst
yükleyicilerin oluşturulması artık resmi olarak desteklenmemektedir. (Daha fazla ayrıntı için bkz. bpo-10945.)Python’u macOS’ta kaynaktan derlerken,
_tkinter
, macOS’un eski sürümlerinde olduğu gibi,/Library/Frameworks
içine yüklenmişlerse artık sistem dışı Tcl ve Tk çerçeveleriyle bağlantı kuruyor. Bir macOS SDK,--enable-universalsdk
veya-isysroot
kullanılarak açıkça yapılandırılmışsa, yalnızca SDK’nın kendisi aranır. Varsayılan davranış yine de--with-tcltk-includes
ve--with-tcltk-libs
ile geçersiz kılınabilir. ( bpo-34956 içinde Ned Deily tarafından katılmıştır.)Python can now be built for Windows 10 ARM64. (Contributed by Steve Dower in bpo-33125.)
--pgo
kullanıldığında bazı bireysel testler artık atlanıyor. Söz konusu testler, PGO görev süresini önemli ölçüde artırdı ve muhtemelen nihai yürütülebilir dosyanın optimizasyonunun iyileştirilmesine yardımcı olmadı. Bu, görevi yaklaşık 15 kat hızlandırır. Tam birim test paketini çalıştırmak yavaştır. Bu değişiklik, çok fazla kod dalı yürütülmeyeceğinden biraz daha az optimize edilmiş bir yapıya neden olabilir. Çok daha yavaş olan yapıyı beklemek istiyorsanız,./configure [..] PROFILE_TASK="-m test --pgo-extended"
kullanılarak eski davranış geri yüklenebilir. Hangi PGO görev setinin daha hızlı bir yapı oluşturduğuna dair hiçbir garanti vermiyoruz. Sonuçlar ortama, iş yüküne ve derleyici araç zincirine bağlı olabileceğinden, önemseyen kullanıcılar kendi ilgili kıyaslamalarını çalıştırmalıdır. (Daha fazla ayrıntı için bkz. bpo-36044 ve bpo-37707.)
C API’sindeki değişiklikler¶
Yeni Özellikler¶
PEP 573: Added
PyType_FromModuleAndSpec()
to associate a module with a class;PyType_GetModule()
andPyType_GetModuleState()
to retrieve the module and its state; andPyCMethod
andMETH_METHOD
to allow a method to access the class it was defined in. (Contributed by Marcel Plch and Petr Viktorin in bpo-38787.)PyFrame_GetCode()
işlevi eklendi: bir çerçeve kodu alın.PyFrame_GetBack()
işlevi eklendi: sonraki dış çerçeveyi alın. (Victor Stinner tarafından bpo-40421 ‘de katılmıştır.)Sınırlı C API’sine
PyFrame_GetLineNumber()
eklendi. (Victor Stinner tarafından bpo-40421 ‘de katılmıştır.)Yorumlayıcıyı almak için
PyThreadState_GetInterpreter()
vePyInterpreterState_Get()
işlevleri eklendi. Python iş parçacığı durumunun geçerli çerçevesini almak içinPyThreadState_GetFrame()
işlevi eklendi.PyThreadState_GetID()
işlevi eklendi: Python iş parçacığı durumunun benzersiz tanımlayıcısını alın. (Victor Stinner tarafından bpo-39947 ‘de katılmıştır.)C API’ye herhangi bir bağımsız değişken olmadan çağrılabilir bir Python nesnesi çağıran yeni bir genel
PyObject_CallNoArgs()
işlevi eklendi. Herhangi bir argüman olmadan çağrılabilir bir Python nesnesini çağırmanın en etkili yolu budur. (Victor Stinner tarafından bpo-37194 ‘de katılmıştır.)Sınırlı C API’sindeki değişiklikler (eğer
Py_LIMITED_API
makrosu tanımlanmışsa):Sınırlı API için normal işlevler olarak
Py_EnterRecursiveCall()
vePy_LeaveRecursiveCall()
sağlayın. Önceden, makrolar olarak tanımlanmıştı, ancak bu makrolar,PyThreadState.recursion_Definition
alanına erişemeyen sınırlı C API’si ile derlenmiyordu (sınırlı C API’sinde yapı opaktır).PyObject_INIT()
vePyObject_INIT_VAR()
, uygulama ayrıntılarını gizlemek için normal “opak” fonksiyon haline gelir.
(Victor Stinner tarafından bpo-38644 ve bpo-39542 ‘de katılmıştır.)
The
PyModule_AddType()
function is added to help adding a type to a module. (Contributed by Donghee Na in bpo-40024.)Genel API’ye
PyObject_GC_IsTracked()
vePyObject_GC_IsFinalized()
işlevleri, Python nesnelerinin şu anda izlenip izlenmediğini veya çöp toplayıcı tarafından halihazırda sonlandırılıp sonlandırılmadığını sorgulamaya izin vermek için eklendi. (Pablo Galindo Salgado tarafından bpo-40241 ‘de katılmıştır.)Added
_PyObject_FunctionStr()
to get a user-friendly string representation of a function-like object. (Patch by Jeroen Demeyer in bpo-37645.)Tek bir konum bağımsız değişkeni olan bir nesneyi çağırmak için
PyObject_CallOneArg()
eklendi (Yama Jeroen Demeyer tarafından bpo-37483 içinde.)
Python 3.9’a Taşıma¶
PyInterpreterState.eval_frame
(PEP 523) artık yeni bir zorunlu tstate parametresi (PyThreadState*
) gerektiriyor. (Victor Stinner tarafından bpo-38500 ‘de katılmıştır.)Genişletme modülleri:
m_traverse
,m_clear
andm_free
functions ofPyModuleDef
, modül durumu talep edilmiş ancak henüz tahsisedilmemişse artık çağrılmaz. Bu, modül oluşturulduktan hemen sonra vemodül çalıştırılmadan önceki durumdur (Py_mod_exec
işlevi).Daha kesin olarak, bu işlevlerm_size
0’dan büyükse ve modül durumu (PyModule_GetState()
tarafından döndürülen)NULL
ise çağrılmaz.Modül durumuna sahip olmayan genişletme modülleri (
m_size <= 0
) etkilenmez.Bir alt yorumlayıcıda
Py_AddPendingCall()
çağrılırsa, işlev artık ana yorumlayıcıdan çağrılmak yerine alt yorumlayıcıdan çağrılacak şekilde programlanır. Her yardımcı tercüman artık kendi planlanmış çağrılar listesine sahiptir. (Victor Stinner tarafından bpo-39984’de katılmıştır.)Windows kayıt defteri
-E
seçeneği kullanıldığında (PyConfig.use_environment
0
olarak ayarlanmışsa)sys.path
öğesini başlatmak için artık kullanılmaz. Bu, Python’u Windows’a yerleştirirken önemlidir. ( bpo-8901 içinde Zackery Spytz tarafından katılmıştır.)PyStructSequence_UnnamedField
genel değişkeni artık bir sabittir ve sabit bir dizeye başvurur. ( bpo-38650 içinde Serhiy Storchaka tarafından katılmıştır.)The
PyGC_Head
structure is now opaque. It is only defined in the internal C API (pycore_gc.h
). (Contributed by Victor Stinner in bpo-40241.)The
Py_UNICODE_COPY
,Py_UNICODE_FILL
,PyUnicode_WSTR_LENGTH
,PyUnicode_FromUnicode()
,PyUnicode_AsUnicode()
,_PyUnicode_AsUnicode
, andPyUnicode_AsUnicodeAndSize()
are marked as deprecated in C. They have been deprecated by PEP 393 since Python 3.3. (Contributed by Inada Naoki in bpo-36346.)Py_FatalError()
fonksiyonu,Py_LIMITED_API
makrosu tanımlanmadığı sürece geçerli fonksiyonun adını otomatik olarak kaydeden bir makro ile değiştirilir. (Victor Stinner tarafından bpo-39882 ‘de katılmıştır.)Vectorcall protokolü artık arayan kişinin anahtar kelime adları olarak yalnızca dizeleri iletmesini gerektirir. (Daha fazla bilgi için bkz. bpo-37540.)
Bir dizi makro ve fonksiyonların uygulama ayrıntıları artık gizlenmiştir:
PyObject_IS_GC()
makrosu bir fonksiyona dönüştürüldü.The
PyObject_NEW()
macro becomes an alias to thePyObject_New
macro, and thePyObject_NEW_VAR()
macro becomes an alias to thePyObject_NewVar
macro. They no longer access directly thePyTypeObject.tp_basicsize
member.PyObject_GET_WEAKREFS_LISTPTR()
macro was converted to a function: the macro accessed directly thePyTypeObject.tp_weaklistoffset
member.PyObject_CheckBuffer()
makrosu bir fonksiyona dönüştürüldü: makroPyTypeObject.tp_as_buffer
üyesine doğrudan erişti.PyIndex_Check()
artık uygulama ayrıntılarını gizlemek için her zaman opak bir fonksiyon olarak bildiriliyor:PyIndex_Check()
makrosu kaldırıldı. Makro,PyTypeObject.tp_as_number
üyesine doğrudan erişti.
(Daha fazla ayrıntı için bkz. bpo-40170.)
Kaldırılanlar¶
pyfpe.h
dosyasınınPyFPE_START_PROTECT()
vePyFPE_END_PROTECT()
makroları sınırlı C API’sinden hariç tutuldu. (Victor Stinner tarafından bpo-38835 ‘de katılmıştır.)PyTypeObject öğesinin
tp_print
yuvası kaldırıldı. Python 2.7 ve öncesindeki dosyalara nesneleri yazdırmak için kullanılıyordu. Python 3.0’dan beri göz ardı edildi ve kullanılmadı. ( bpo-36974 içinde Jeroen Demeyer tarafından katılmıştır.)Sınırlı C API’sindeki değişiklikler (eğer
Py_LIMITED_API
makrosu tanımlanmışsa):Aşağıdaki fonksiyonlar sınırlı C API’sinden çıkarıldı:
PyThreadState_DeleteCurrent()
(Joannah Nanjekye tarafından bpo-37878 ‘de katılmıştır.)_Py_CheckRecursionLimit
_Py_NewReference()
_Py_ForgetReference()
_PyTraceMalloc_NewReference()
_Py_GetRefTotal()
Sınırlı C API’sinde hiçbir zaman çalışmayan çöp tenekesi mekanizması.
PyTrash_UNWIND_LEVEL
Py_TRASHCAN_BEGIN_CONDITION
Py_TRASHCAN_BEGIN
Py_TRASHCAN_END
Py_TRASHCAN_SAFE_BEGIN
Py_TRASHCAN_SAFE_END
Aşağıdaki fonksiyonlar ve tanımlar dahili C API’sine taşındı:
_PyDebug_PrintTotalRefs()
_Py_PrintReferences()
_Py_PrintReferenceAddresses()
_Py_tracemalloc_config
_Py_AddToAllObjects()
(Py_TRACE_REFS
yapısına özel)
(Victor Stinner tarafından bpo-38644 ve bpo-39542 ‘de katılmıştır.)
_PyRuntime.getframe
kancası kaldırıldı ve_PyRuntime.getframe
için takma ad olan_PyThreadState_GetFrame
makrosu kaldırıldı. Yalnızca dahili C API’si tarafından açığa çıkarıldılar. AyrıcaPyThreadFrameGetter
türü kaldırıldı. (Victor Stinner tarafından bpo-39946 ‘da katılmıştır.)Aşağıdaki fonksiyonlar C API’sinden kaldırıldı. Tüm ücretsiz listeleri temizlemek için
PyGC_Collect()
çağırın. (Inada Naoki ve Victor Stinner tarafından bpo-37340 , bpo-38896 ve bpo-40428 ‘de katkıda bulunmuştur.)PyAsyncGen_ClearFreeLists()
PyContext_ClearFreeList()
PyDict_ClearFreeList()
PyFloat_ClearFreeList()
PyFrame_ClearFreeList()
PyList_ClearFreeList()
PyMethod_ClearFreeList()
vePyCFunction_ClearFreeList()
: bağlı yöntem nesnelerinin serbest listeleri kaldırıldı.PySet_ClearFreeList()
: Python 3.4’te setsiz liste kaldırıldı.PyTuple_ClearFreeList()
PyUnicode_ClearFreeList()
: Unicode ücretsiz listesi Python 3.3’te kaldırılmıştır.
_PyUnicode_ClearStaticStrings()
fonksiyonu kaldırıldı. (Victor Stinner tarafından bpo-39465 ‘de katılmıştır.)Py_UNICODE_MATCH
kaldırıldı. PEP 393 tarafından kullanımdan kaldırıldı ve Python 3.3’ten beri bozuldu. Bunun yerinePyUnicode_Tailmatch()
fonksiyonu kullanılabilir. (Inada Naoki tarafından bpo-36346 ‘da katılmıştır.)Tanımlanan ancak uygulama içermeyen arabirimlerin başlık dosyaları temizlendi. Kaldırılmakta olan genel API sembolleri şunlardır: :
_PyBytes_InsertThousandsGroupingLocale
,_PyBytes_InsertThousandsGrouping
,_Py_InitializeFromArgs
,_Py_InitializeFromWideArgs
,_PyFloat_Repr
,_PyFloat_Digits
,_PyFloat_DigitsInit
,PyFrame_ExtendStack
,_PyAIterWrapper_Type
,PyNullImporter_Type
,PyCmpWrapper_Type
,PySortWrapper_Type
,PyNoArgsFunction
. ( bpo-39372 içinde Pablo Galindo Salgado tarafından sağlanmıştır.)
Python 3.9.1’deki önemli değişiklikler¶
typing¶
typing.Literal
davranışı, PEP 586 ile uyumlu olacak ve PEP’de belirtilen statik tip denetleyicilerin davranışıyla eşleşecek şekilde değiştirildi.
Literal
artık parametrelerin yinelemelerini kaldırıyor.Literal
nesneleri arasındaki eşitlik karşılaştırmaları artık sıradan bağımsızdır.Literal
karşılaştırmaları artık türlere göre yapılıyor. Örneğin,Literal[0] == Literal[False]
daha önceTrue
olarak değerlendirildi. ArtıkFalse
. Bu değişikliği desteklemek için dahili olarak kullanılan tür önbelleği artık farklılaşan türleri desteklemektedir.Literal
nesneler, parametrelerinden herhangi biri hashable değilse eşitlik karşılaştırmaları sırasında artık birTypeError
istisnası oluşturacak. Değişken parametrelerleLiteral
tanımlamanın bir hata atmayacağına dikkat edin:>>> from typing import Literal >>> Literal[{0}] >>> Literal[{0}] == Literal[{False}] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'set'
( bpo-42345 sayısında Yurii Karabas tarafından katılmıştır.)
macOS 11.0 (Big Sur) ve Apple Silicon Mac desteği¶
3.9.1’den itibaren Python artık macOS 11.0 (Big Sur) ve Apple Silicon Mac’lerde (ARM64
yapısına dayalı) oluşturmayı ve çalıştırmayı tam olarak desteklemektedir. Yeni bir evrensel yapı varyantı olan universal2
, artık hem ARM64
hem de Intel 64
‘ü tek bir yürütülebilir dosya setinde yerel olarak desteklemek için kullanılabilir. İkili dosyalar, artık bir dizi eski macOS sürümüne (10.9’a göre test edilmiştir) dağıtılmak üzere macOS’in mevcut sürümleri üzerine inşa edilebilirken, çalışma zamanında kullanılan işletim sistemi sürümüne bağlı olarak bazı yeni işletim sistemi fonksiyonları ve seçenekleri koşullu olarak kullanılabilir hale getirilir (“weaklinking” ).
( bpo-41100 içinde Ronald Oussoren ve Lawrence D’Anna tarafından katılmıştır.)
Python 3.9.2’deki önemli değişiklikler¶
collections.abc¶
collections.abc.Callable
jenerik artık tip parametrelerini düzleştiriyor, şu anda typing.Callable
‘ın yaptığına benzer. Bu, collections.abc.Callable[[int, str], str]
öğesinin __args__
veya (int, str, str)
; olacağı anlamına gelir önceden bu ([int, str], str)
idi. Bu değişikliğe izin vermek için, types.GenericAlias
artık alt sınıflara ayrılabilir ve collections.abc.Callable
tipi abone olurken bir alt sınıf döndürülür. Bağımsız değişkenlere typing.get_args()
veya __args__
aracılığıyla erişen kodun bu değişikliği hesaba katması gerekir. Python 3.9.1’de sessizce geçmiş olabilecek collections.abc.Callable
parametreleştirmenin geçersiz biçimleri için bir DeprecationWarning
yayınlanabilir. Python 3.10’da bu DeprecationWarning
bir TypeError
olacaktır. ( bpo-42195 içinde Ken Jin tarafından katılmıştır.)
urllib.parse¶
Earlier Python versions allowed using both ;
and &
as
query parameter separators in urllib.parse.parse_qs()
and
urllib.parse.parse_qsl()
. Due to security concerns, and to conform with
newer W3C recommendations, this has been changed to allow only a single
separator key, with &
as the default. This change also affects
cgi.parse()
and cgi.parse_multipart()
as they use the affected
functions internally. For more details, please see their respective
documentation.
(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in bpo-42967.)
Notable changes in Python 3.9.3¶
A security fix alters the ftplib.FTP
behavior to not trust the
IPv4 address sent from the remote server when setting up a passive data
channel. We reuse the ftp server IP address instead. For unusual code
requiring the old behavior, set a trust_server_pasv_ipv4_address
attribute on your FTP instance to True
. (See gh-87451)
Notable changes in Python 3.9.5¶
urllib.parse¶
The presence of newline or tab characters in parts of a URL allows for some
forms of attacks. Following the WHATWG specification that updates RFC 3986,
ASCII newline \n
, \r
and tab \t
characters are stripped from the
URL by the parser in urllib.parse
preventing such attacks. The removal
characters are controlled by a new module level variable
urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE
. (See gh-88048)
Notable security feature in 3.9.14¶
Converting between int
and str
in bases other than 2
(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
now raises a ValueError
if the number of digits in string form is
above a limit to avoid potential denial of service attacks due to the
algorithmic complexity. This is a mitigation for CVE 2020-10735.
This limit can be configured or disabled by environment variable, command
line flag, or sys
APIs. See the integer string conversion
length limitation documentation. The default limit
is 4300 digits in string form.
Notable changes in 3.9.17¶
tarfile¶
The extraction methods in
tarfile
, andshutil.unpack_archive()
, have a new a filter argument that allows limiting tar features than may be surprising or dangerous, such as creating files outside the destination directory. See Extraction filters for details. In Python 3.12, use without the filter argument will show aDeprecationWarning
. In Python 3.14, the default will switch to'data'
. (Contributed by Petr Viktorin in PEP 706.)