Giriş
*****

"Python kütüphanesi" birkaç farklı türde bileşen içerir.

Sayılar ve listeler gibi normalde bir dilin "çekirdeğinin" parçası
olarak kabul edilecek veri türlerini içerir.  Bu türler için, Python
dil çekirdeği değişmezlerin biçimini tanımlar ve anlamları üzerine
bazı kısıtlamalar koyar, ancak anlamları tam olarak tanımlamaz.  (Öte
yandan, dil çekirdeği operatörlerin yazımı ve öncelikleri gibi
sözdizimsel özellikleri tanımlar).

Kütüphane ayrıca yerleşik fonksiyonlar ve istisnalar da içerir --- bir
"import" deyimine ihtiyaç duymadan tüm Python kodları tarafından
kullanılabilen nesneler. Bunlardan bazıları çekirdek dil tarafından
tanımlanmıştır, ancak çoğu çekirdek semantiği için gerekli değildir ve
burada sadece açıklanmıştır.

Bununla birlikte, kütüphanenin büyük kısmı bir modül koleksiyonundan
oluşur. Bu koleksiyonu incelemenin birçok yolu vardır.  Bazı modüller
C dilinde yazılmış ve Python yorumlayıcısına yerleştirilmiştir;
diğerleri Python dilinde yazılmış ve kaynak biçiminde içe
aktarılmıştır.  Bazı modüller, yığın izlemesi yazdırma gibi Python'a
özgü arayüzler sağlar; bazıları belirli donanımlara erişim gibi
belirli işletim sistemlerine özgü arayüzler sağlar; diğerleri World
Wide Web gibi belirli bir uygulama alanına özgü arayüzler sağlar. Bazı
modüller Python'un tüm sürümlerinde ve portlarında mevcuttur;
diğerleri yalnızca temel sistem bunları desteklediğinde veya
gerektirdiğinde kullanılabilir; ancak diğerleri yalnızca Python
derlendiğinde ve yüklendiğinde belirli bir yapılandırma seçeneği
seçildiğinde kullanılabilir.

Bu kılavuz "içten dışa doğru" düzenlenmiştir: ilk olarak yerleşik
fonksiyonlar, veri türleri ve istisnalar ve son olarak ilgili
modüllerin bölümlerinde gruplandırılmış modüller açıklanmaktadır.

Bu, bu kılavuzu en baştan okumaya başlarsanız ve sıkıldığınızda bir
sonraki bölüme atlarsanız, Python kütüphanesi tarafından desteklenen
mevcut modüller ve uygulama alanları hakkında makul bir genel bakış
elde edeceğiniz anlamına gelir.  Elbette bunu bir roman gibi okumak
zorunda değilsiniz --- içindekiler tablosuna da göz atabilir
(kılavuzun önünde) veya dizinde (arkada) belirli bir fonksiyonu,
modülü veya terimi arayabilirsiniz.  Ve son olarak, rastgele konular
hakkında bilgi edinmekten hoşlanıyorsanız, rastgele bir sayfa numarası
seçip (bkz. modül "random") bir ya da iki bölüm okuyabilirsiniz.  Bu
kılavuzun bölümlerini okuma sıranız ne olursa olsun, kılavuzun geri
kalanı bu materyale aşina olduğunuzu varsaydığından, bölüm Gömülü
Fonksiyonlar ile başlamanıza yardımcı olur.

Gösteri başlasın!


Kullanılabilirlik hakkında notlar
=================================

* "Kullanılabilirlik: Unix" notu, bu fonksiyonun Unix sistemlerinde
  yaygın olarak bulunduğu anlamına gelir.  Belirli bir işletim
  sistemindeki varlığı hakkında herhangi bir iddiada bulunmaz.

* Ayrı olarak belirtilmediği takdirde, "Kullanılabilirlik: Unix" yazan
  tüm fonksiyonlar, Unix çekirdeği üzerine inşa edilen macOS üzerinde
  desteklenmektedir.

* Bir kullanılabilirlik notu hem minimum Çekirdek(Kernel) sürümü hem
  de minimum libc sürümü içeriyorsa, her iki koşul da geçerli
  olmalıdır. Örneğin *Availability: Linux >= 3.17 with glibc >= 2.27*
  notuna sahip bir özellik için hem Linux 3.17 veya daha yeni hem de
  glibc 2.27 veya daha yeni olması gerekir.


WebAssembly platformları
------------------------

WebAssembly platformları "wasm32-emscripten" (Emscripten) ve
"wasm32-wasi" (WASI) POSIX API`lerinin bir alt kümesini sağlar.
WebAssembly çalışma zamanları ve tarayıcıları korumalıdır ve ana
bilgisayara ve harici kaynaklara sınırlı erişime sahiptir. Süreçler,
iş parçacığı, ağ, sinyaller veya diğer süreçler arası iletişim (IPC)
biçimlerini kullanan herhangi bir Python standart kütüphane modülü ya
mevcut değildir ya da diğer Unix benzeri sistemlerde olduğu gibi
çalışmayabilir. Dosya I/O, dosya sistemi ve Unix izinleriyle ilgili
işlevler de kısıtlanmıştır. Emscripten bloklama I/O'ye izin vermez.
"sleep()" gibi diğer engelleme işlemleri tarayıcı olay döngüsünü
engeller.

Python'un WebAssembly platformlarındaki özellikleri ve davranışı
Emscripten-SDK veya WASI-SDK sürümüne, WASM çalışma zamanlarına
(tarayıcı, NodeJS, wasmtime) ve Python derleme zamanı
bayraklarına(build time flags) bağlıdır. WebAssembly, Emscripten ve
WASI gelişmekte olan standartlardır; ağ oluşturma gibi bazı özellikler
gelecekte desteklenebilir.

Tarayıcıda Python için kullanıcılar Pyodide veya PyScript'i
düşünmelidir. PyScript, kendisi de CPython ve Emscripten üzerine inşa
edilmiş olan Pyodide üzerine kurulmuştur. Pyodide, tarayıcıların
JavaScript ve DOM API'lerine erişimin yanı sıra JavaScript'in
"XMLHttpRequest" ve "Fetch" API'leri ile sınırlı ağ yetenekleri
sağlar.

* Süreçle ilgili API'ler kullanılamaz veya her zaman bir hata ile
  başarısız olur. Bu, yeni süreçler oluşturan ("fork()", "execve()"),
  süreçleri bekleyen ("waitpid()"), sinyal gönderen ("kill()") veya
  süreçlerle başka şekilde etkileşime giren API'leri içerir.
  "subprocess" içe aktarılabilir ancak çalışmaz.

* "socket" modülü mevcuttur, ancak sınırlıdır ve diğer platformlardan
  farklı davranır. Emscripten üzerinde, soketler her zaman bloklama
  yapmaz ve WebSockets aracılığıyla TCP'yi proxy'lemek için sunucuda
  ek JavaScript kodu ve yardımcılar gerektirir; daha fazla bilgi için
  Emscripten Networking bölümüne bakın. WASI anlık görüntü önizleme 1,
  yalnızca mevcut bir dosya tanımlayıcısından soketlere izin verir.

* Bazı fonksiyonlar hiçbir şey yapmayan ve her zaman sabit kodlanmış
  değerler döndüren taslaklardır.

* Dosya tanımlayıcıları, dosya izinleri, dosya sahipliği ve
  bağlantılarla ilgili işlevler sınırlıdır ve bazı işlemleri
  desteklemez. Örneğin, WASI mutlak dosya adlarıyla ortak bağlantılara
  izin vermez.
