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ık "ImportError" değerini, eskiden göreli bir içe
  aktarma üst düzey paketini geçtiğinde oluşan "ValueError" 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 dizin "os.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()" ve
  "bytes.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üm "n" için boş bir dize
  yerine "s" döndürür. Artık """.replace("", s)" ile tutarlıdır.
  "bytes" ve "bytearray" 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" ve "List" gibi)
  için gösteriliyor. "help()" öğesini "List[int]" gibi genel takma
  adla kullanmak, karşılık gelen somut tür için yardımı gösterir (bu
  durumda "list"). ( 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 ve "ag_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ık "in"
  operatöründe ve "operator" modülünün "contains()", "indexOf()" ve
  "countOf()" fonksiyonlarında "TypeError" 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
-----

Dokümantasyon dizesi artık yalnızca sınıf, fonksiyon, metot vb. için
değil, kendi "__doc__" özniteliğine sahip herhangi bir nesne için
gösteriliyor. ( bpo-40257 içinde Serhiy Storchaka tarafından
katılmıştır.)


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 bir "y = 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'de "closefrom()" 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
  yerine "bdist_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 bir "ValueError" oluşturur. Artık
  kullanımdan kaldırıldı. Gelecekteki Python sürümlerinde, tüm
  değişkenler için bir "TypeError" oluşturacaktır. ( bpo-37315 içinde
  Serhiy Storchaka tarafından katılmıştır.)

* The "parser" and "symbol" 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 the "ast" module.

* The Public C API functions "PyParser_SimpleParseStringFlags()",
  "PyParser_SimpleParseStringFlagsFilename()",
  "PyParser_SimpleParseFileFlags()" and "PyNode_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ünde
  "TypeError" 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" ve "bytearray" 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
  the "splitlist()" 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 following "binascii" 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" ve "ExtSlice" kullanımdan
  kaldırılmış kabul edilir ve gelecekteki Python sürümlerinde
  kaldırılacaktır. "Index(value)" yerine "value" kullanılmalıdır.
  "ExtSlice(slices)" yerine "Tuple(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" ve "AugStore"
  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()" and "PyEval_ThreadsInitialized()"
  functions are now deprecated and will be removed in Python 3.11.
  Calling "PyEval_InitThreads()" now does nothing. The *GIL* is
  initialized by "Py_Initialize()" since Python 3.7. (Contributed by
  Victor Stinner in bpo-39877.)

* "shlex.split()" işlevine ilk bağımsız değişken olarak "None"
  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 a "PendingDeprecationWarning". 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. The "lib2to3" 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()" and "xgtitle()" 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. For "xgtitle()", please use
  "nntplib.NNTP.descriptions()" or "nntplib.NNTP.description()"
  instead. (Contributed by Donghee Na in bpo-39366.)

* "array.array": "tostring()" ve "fromstring()" yöntemleri kaldırıldı.
  Bunlar, Python 3.2'den beri kullanımda olmayan "tobytes()" ve
  "frombytes()" 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 zaman "None" döndürdü.
  Python 3.7'de zaten kaldırılmış olan "CALL_PROFILE" adlı özel bir
  derleme seçeneği gerektiriyordu. (Victor Stinner tarafından
  bpo-37414 'de katılmıştır.)

* "sys.getcheckinterval()" ve "sys.setcheckinterval()" işlevleri
  kaldırıldı. Python 3.2'den beri kullanımdan kaldırıldılar. Bunun
  yerine "sys.getswitchinterval()" ve "sys.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" ve "dummy_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 to "aifc.open()", "sunau.openfp()" alias to
  "sunau.open()", and "wave.openfp()" alias to "wave.open()" have been
  removed. They were deprecated since Python 3.7. (Contributed by
  Victor Stinner in bpo-37320.)

* The "isAlive()" method of "threading.Thread" has been removed. It
  was deprecated since Python 3.8. Use "is_alive()" instead.
  (Contributed by Donghee Na in bpo-37804.)

* "ElementTree" modülündeki "ElementTree" ve "Element" sınıflarının
  "getchildren()" ve "getiterator()" yöntemleri kaldırıldı . Python
  3.2'de kullanımdan kaldırıldılar. "x.getchildren()" yerine "iter(x)"
  ve "x.getiterator()" yerine "x.iter()" veya "list(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()" ve "dumps()" işlevlerini
  kullanın. Ek olarak, *use_builtin_types* parametresi kaldırıldı,
  bunun yerine her zaman standart "bytes" 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()"
  ve "base64.decodestring()" takma adları kaldırıldı: bunun yerine
  "base64.encodebytes()" ve "base64.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 yerine "math.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 bir
  "DeprecationWarning" 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 bir "DeprecationWarning" yayınladı.
  (Inada Naoki'nin katkılarıyla bpo-39377)

* "with (awat asyncio.lock):" ve "with (get from asyncio.lock):"
  ifadeleri artık desteklenmemektedir, bunun yerine "async with lock"
  kullanın. Aynı şey "asyncio.Condition" ve "asyncio.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 the "show_alloc_count" field of the C structure
  "PyConfig" have been removed. They required a special Python build
  by defining "COUNT_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 returning "False" when it's
  called. (Contributed by Batuhan Taskaya in bpo-40208)

* The "asyncio.Task.current_task()" and "asyncio.Task.all_tasks()"
  have been removed. They were deprecated since Python 3.7 and you can
  use "asyncio.current_task()" and "asyncio.all_tasks()" instead.
  (Contributed by Rémi Lapeyre in bpo-40967)

* "html.parser.HTMLParser" sınıfındaki "unescape()" 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__()" ve "importlib.util.resolve_name()" şimdi daha önce
  "ValueError" oluşturduğu yerde "ImportError" '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 the "EBADF"
  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)", bir "value" 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ırken "PYTHONCASEOK" ortam değişkenini yok sayar.

* *kodlama* parametresi "ftplib.FTP" ve "ftplib.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
  önce "PyCF_ALLOW_TOP_LEVEL_AWAIT", "CO_FUTURE_DIVISION" ile
  çakışıyordu. (Batuhan Taskaya bpo-39562 'de katılmıştır)

* "array('u')" now uses "wchar_t" as C type instead of "Py_UNICODE".
  This change doesn't affect to its behavior because "Py_UNICODE" is
  alias of "wchar_t" since Python 3.3. (Contributed by Inada Naoki in
  bpo-34538.)

* "logging.getLogger()" API'si artık "root'" 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üllerde "logging.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 returns "NotImplemented" instead
  of raising a "TypeError" when passed something other than an
  instance of "str" or "PurePath".  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şlev "socket.inet_aton()" baştaki
  sıfırları sekizli gösterim olarak ele alır. Modern "inet_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,
  ancak "codecs.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 bir
  "tp_traverse" 'ya sahip türler için tüm özel "tp_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
  'ın "tp_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

  (Daha fazla bilgi için bkz. bpo-35810 ve bpo-40217.)

* "PyEval_CallObject", "PyEval_CallFunction", "PyEval_CallMethod" ve
  "PyEval_CallObjectWithKeywords" işlevleri kullanımdan
  kaldırılmıştır. Bunun yerine "PyObject_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" ve "içeride değil" testleri için "CONTAINS_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 the "configure" script: name of
  the platform-specific library directory, stored in the new
  "sys.platlibdir" attribute. See "sys.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()" and "unsetenv()" 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()" and
  "PyType_GetModuleState()" to retrieve the module and its state; and
  "PyCMethod" and "METH_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()" ve
  "PyInterpreterState_Get()" işlevleri eklendi. Python iş parçacığı
  durumunun geçerli çerçevesini almak için "PyThreadState_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()"
    ve "Py_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()" ve "PyObject_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()" ve
  "PyObject_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" and "m_free" functions
  of "PyModuleDef", 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şlevler "m_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", and "PyUnicode_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 the "PyObject_New"
    macro, and the "PyObject_NEW_VAR()" macro becomes an alias to the
    "PyObject_NewVar" macro. They no longer access directly the
    "PyTypeObject.tp_basicsize" member.

  * "PyObject_GET_WEAKREFS_LISTPTR()" macro was converted to a
    function: the macro accessed directly the
    "PyTypeObject.tp_weaklistoffset" member.

  * "PyObject_CheckBuffer()" makrosu bir fonksiyona dönüştürüldü:
    makro "PyTypeObject.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ın "PyFPE_START_PROTECT()" ve
  "PyFPE_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ıca
  "PyThreadFrameGetter" 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()" ve "PyCFunction_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 yerine
  "PyUnicode_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.

1. "Literal" artık parametrelerin yinelemelerini kaldırıyor.

2. "Literal" nesneleri arasındaki eşitlik karşılaştırmaları artık
   sıradan bağımsızdır.

3. "Literal" karşılaştırmaları artık türlere göre yapılıyor. Örneğin,
   "Literal[0] == Literal[False]" daha önce "True" olarak
   değerlendirildi. Artık "False". Bu değişikliği desteklemek için
   dahili olarak kullanılan tür önbelleği artık farklılaşan türleri
   desteklemektedir.

4. "Literal" nesneler, parametrelerinden herhangi biri *hashable*
   değilse eşitlik karşılaştırmaları sırasında artık bir "TypeError"
   istisnası oluşturacak. Değişken parametrelerle "Literal"
   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", and "shutil.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 a
  "DeprecationWarning". In Python 3.14, the default will switch to
  "'data'". (Contributed by Petr Viktorin in **PEP 706**.)
