Python belgelerine hoşgeldiniz!

Buradaki belgeler henüz çok yenidir ve yardımınıza ihtiyaç duymaktadır. Bu belgeler topluluk tarafından geliştirildikçe gelişecektir. Lütfen aşağıda anlatıldığı şekilde belgelere katkıda bulununuz.

Belgeler Hakkında

Bu belgelerin kaynak kodu GitHub’ta tutulmaktadır.

Bu belgeler şu anda Python 3.6 sürümünü baz alarak yazılmaktadır. Belgeler henüz olgunlaşmadığı için Python bilmiyorsanız önce İstihza sayfasından başlamanızı öneririz!

istihza.com Python 3 belgelerine şu adresten ulaşabilirsiniz. Ayrıca bu belgeleri PDF olarak şu adresten indirebilirsiniz.

Nasıl yardım alabilirim?

Her zaman YazBel forumunun Python kategorisinde bir konu açarak aklınızdaki soruları sorabilirsiniz. Topluluk size yardım etmekten mutluluk duyacaktır.

Nasıl yardım edebilirim?

Birçok şekilde yardım edebilirsiniz:

  • Belgelerde değişiklik yaparak çekme isteği(pull request) gönderebilirsiniz. Yazım yanlışları ve küçük hatalar için GitHub arayüzünü kullanabilirsiniz ancak daha büyük ve karmaşık düzeltmeler için veri havuzunu bilgisayarınıza çekmeli, daha sonrasında düzeltmeleri yapıp çekme isteği göndermelisiniz. Her iki durumda da kısa ve öz bir işleme mesajı(commit message) yazdığınıza emin olmalısınız.

  • Eğer bir yanlış gördünüz ancak bir sebepten ötürü düzeltmeyi kendiniz yapmak istemediyseniz, bu hatayı bildirerek de yardım edebilirsiniz. Bunun için veri havuzunun konular(issues) dizininde bir konu açın, başlık ve açıklama kısmına ilgili metinleri yazın ve gönderin. Başlık kısmının kısa ve öz olmasına dikkat edin. Ayrıca konuya, sağ taraftaki Labels bölümünden python etiketini eklediğinize de emin olun.

  • Forumun Python kategorisinde sorulan soruları cevaplayabilirsiniz.

Lisans

LICENSE dosyasında da belirtildiği üzere bu belgelerin lisansı Creative Commons Atıf-GayriTicari-AynıLisanslaPaylaş 4.0 Uluslararası (CC BY-NC-SA 4.0) lisansıdır. Daha fazla bilgi için lütfen dosyanın içeriğine bakınız.

Python Hakkında

Python programlama dili Hollandalı programcı Guido Van Rossum tarafından 1991 yılında tasarlanıp gerçeklenmeye başlanmış bir programlama dilidir. Python en başta kolay okunup yazılabilirliği ile dikkat çekmektedir. Ayrıca C ve C++ gibi dillerin aksine, derlenmeye gerek olmadan çalışabildiği için hızlı bir şekilde uygulama geliştirilebilmesine de olanak sağlamaktadır. Python zamanımızın gözde programlama paradigmalarından olan nesneye yönelik programlama paradigmasını desteklemektedir. Python programlama dili genel amaçlı bir programlama dilidir ve masaüstü programlamadan web sunucu programlamaya, sistem programlamadan oyun programlamaya kadar birçok alanda kullanılmaktadır.

Python oldukça gözde bir betik geliştirme dilidir, özellikle GNU/Linux dünyasında. Python Google’ın resmi olarak kullandığı ve desteklediği üç dilden biri, ayrıca tek betikleme dilidir. Python yurt içi ve dışı birçok üniversite müfredatında da özellikle programlamaya giriş ve bilimsel programlama derslerinde yerini almıştır. Python programlama dili, Python Yazılım Vakfı Lisansı altında dağıtılan özgür bir yazılımdır.

İştahınız kabarmış olmalı! Ancak hepsi bu kadar değil. Python ile uygulama geliştirmek için sizi bunlardan daha çok motive edecek bir şey var: Eğlence. Evet, Python ile uygulama geliştirmek eğlencelidir. Python ile ilk uygulamanızı geliştirdiğinizde ve sonucunu ekranda gördüğünüzde ne demek istediğimi anlayacaksınız. =)

Kurulum

Python’ın farklı işletim sistemlerinde farklı kurulumları vardır:

Windows’ta Kurulum

  • Python indirmeler sayfasından Download Python 3.x.x tuşuna tıklayın ve kurucu programın indirilmesini bekleyin.

  • Kurucu programı çalıştırın, adımları takip edin ve kurulumu tamamlayın.

  • Komut İstemi’nde şu komutu vererek kurulumun başarılı bir şekilde tamamlanıp tamamlanmadığını kontrol edin:

    > py
    Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

    Verdiğimiz komut sonrası Python etkileşimli kabuğunun açılması ve >>> işaretinden sonra bizden komut beklenmesi, kurulumumuzun başarılı olduğunu gösteriyor.

Windows’ta Python 3.6+ yüklü ise terminale py yada python yazmanız yeterlidir.
Python 2 için ise py -2 yazmanız gerekir.

Mac’te Kurulum

  • Python indirmeler sayfasından Download Python 3.x.x tuşuna tıklayın ve kurucu programın indirilmesini bekleyin.

  • Kurucu programı çalıştırın, adımları takip edin ve kurulumu tamamlayın.

  • Terminal’de şu komutu vererek kurulumun başarılı bir şekilde tamamlanıp tamamlanmadığını kontrol edin:

    $ python3
    Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

    Verdiğimiz komut sonrası Python etkileşimli kabuğunun açılması ve >>> işaretinden sonra bizden komut beklenmesi, kurulumumuzun başarılı olduğunu gösteriyor.

Linux’te Kurulum

Eğer Linux kullanıyorsanız o zaman Python sizde zaten kuruludur, herhangi bir şey yapmanıza gerek yok.

Karakter Dizisi Biçimlendirme

F-string

%-biçimlendirme ve format() metodu ile biçimlendirme yerine Python 3.6 bize 3. bir biçimlendirme mekaniği sunuyor.

Bunun adı "Literal String Interpolation" yani "Karakter Dizisi Aradeğerlemesi" demektir (PEP-498). Bu mekaniği kullanan dizilere "Biçimlendirilmiş Karakter Dizisi" anlanımna gelen "f-string"(formatted-string) adı veriliyor.

Bu yeni mekanik önceki metotların yerini almak ya da onları eskitmektense, onların dezavantajlarına bir alternatif olma amacıyla kurulmuş.

F-stringler bize en az syntax ile dizi içerisine python ifadelerini yerleştirme/gömme becerisi sağlıyor.Bu dizilerin başında "f" harfi yer almaktadır tıpkı Python2'de unicode olarak belirtmek isteğimiz dizilerin başına "u" harfini koyduğumuz gibi.

F-string yapısı: f "<metin>{<ifade><isteğe bağlı !s, !r, ya da !a><isteğe bağlı : biçimlendirici>}<metin> …​ "

Örnek:

>>> import datetime
>>> ad = "YazBel"
>>> tarih = datetime.date(2018,2,12)
>>> f"Bu sitenin adı {ad}, bu yazı {tarih:%A, %B %d, %Y} tarihinde yazıldı"
'Bu sitenin adı Yazbel, bu yazı Monday, February 12, 2018 tarihinde yazıldı'

Gördüğünüz gibi diziler f"dizi" şeklinde başında "f" olacak şekilde yazılmış ve format() metodundaki gibi kelebek parantez {} içermektedir, fakat format() metodu kaldırılmış, bu durumda değişkenlerimizi direkt olarak parantezlerin içine yazıyoruz, nasıl gösterilceklerini de(biçimlendirme ayarı) her zamanki gibi iki noktanın ":" önüne yazıyoruz.

Bu örnekteki %A %B %d %Y biçimlendiricileri datetime modülü için önceden beri kullanılan biçimlendirme ayarlarıdır, f-string özelliği ile gelmemiştir.

Neden f-string?

%-biçimlendirmenin dezavantajı sadece sayılar ve dizileri desteklemesidir, diğer veri tipleri ya desteklenmiyor ya da biçimlendirmeden önce desteklenen tiplere çeviriliyor. Diğer bilinen sorunu ise sadece tek değer taşıyor olması, örnekte de görüceğiniz gibi demetlerin tüm değerleri diziye yerleştirilmiyor:

>>> msj = ("disk hatası", 32)
>>> "hata: %s" % msj
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

Fakat f-string ile:

>>> f"hata: {msj}"
"hata: ('disk hatası', 32)"

format() metodunun dezavantajı ise aşırı detaya neden olmasıdır, özellikle de parametreler çok olunca:

>>> ad = "YazBel"
>>> yıl = 2018
>>> ay = "Şubat"
>>> gun = 12
>>> "Bu sitenin adı {ad}, bu yazı {yıl} yılının, {ay} ayının {gün}'sinde yazıldı".format(ad=ad, ay=ay, yıl=yıl, gün=gün)
"Bu sitenin adı YazBel, bu yazı 2018 yılının, Şubat ayının 12'sinde yazıldı"

Fakat f-string ile:

>>> f"Bu sitenin adı {ad}, bu yazı {yıl} yılının, {ay} ayının {gün}'sinde yazıldı".
"Bu sitenin adı YazBel, bu yazı 2018 yılının, Şubat ayının 12'sinde yazıldı"

Bunların ötesinde f-string içerisindeki python ifadeleri diğerlerinin aksine sabit değer değilde çalışırken(run-time) ele alınan python kodlarıdır, yani parantezler içerisine karakter dizisine çevirilebilen her türlü python kodu yazabilirsiniz.

Örnekler

>>> genişlik = 10
>>> hassasiyet = 4
>>> değer = decimal.Decimal("12.34567")
>>> f"result: {değer:{genişlik}.{hassasiyet}}" # Parantezler içerisine başka parantezler de yuvanalabilir
'result:      12.35'
>>> tarih = datetime(year=2017, month=1, day=27)
>>> f"{tarih:%B %d, %Y}"
'January 27, 2017'
>>> sayı = 1024
>>> f"{sayı:#0x} ve {sayı:x}" # 16'lı sayma sistemi, x küçük ya da büyük farketmez
'0x400 ve 400'
>>> f"{sayı:#0b} ve {sayı:b}" # 2'li sayma sistemi
'0b10000000000 ve 10000000000'
>>> f"{sayı:#0o} ve {sayı:o}" # 8'li sayma sistemi
'0o2000 ve 2000'

Daha fazlası için İstihza sayfasına bakınız

Tip Belirtimi Sözdizimi

Tip Belirtimi/Notu

PEP-484 ile gelen fonksiyon parametrelerinin verilerinin "tip belirtimi", diğer adıyla "tip notu" sözdizimi kurallarına ek olarak PEP-526 ise bu sefer değişkenlerin veri tipi belirtimi için sözdizimi kuralı eklemektedir. Buna nesne değişkenleri de dahil. Değişkenlerin/parametrelerinin veri tipi : ile belirtilir, fonksiyounu döndürdüğü veri tipi ise ile belirtilir. Örnek:

from typing import List, Dict

#PEP-526
mürettebat: List[str] = []

class YıldızGemisi:
    durum: bool
    özellikler: Dict[str, int] = {"hız": 15} #PEP-526

    def özellik(self, ad: str) -> int: #PEP-484
        return YıldızGemisi.özellikler[ad]

Bu kodda mürettebat karakter dizileri içeren bir listedir, YıldızGemisi nesnesinin özellikler adındaki niteliiği ise karakter dizisi: tam sayı çiftlerinden oluşan bir sözlüktür, durum niteliği ise bool değeri taşımaktadır fakat henüz bir değer verilmemiş. Nesnenin özellik fonksiyonunun ad parametresi karakter dizisidir ve fonksiyon tam sayı değeri döndürür. Tip belirtimleri Python yorumlayıcısı tarafından nesnenin ya da modülün(kodun) özel niteliği olan __annotations__ içerisinde depolar.

Bir örnek daha:

>>> kaptan # Değişken değeri atanmamışsa ona erişmeye çalışınca Python "NameError" hatası verir
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'kaptan' is not defined
>>> kaptan: str # Değişken değeri olmadan sadece tipi tanımlanmış bu durumda hata olmaz(tip belirtimi sayesinde), erişmeye çalışırsak hata olur
>>>kaptan
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'kaptan' is not defined
>>> kaptan = 15 # İlk değer şimdi verildi üstelik farklı veri tipi ile buna rağmen hata yok, Python hala dinamik tipli
>>>kaptan # şimdi değişken değerine erişebiliriz
15

Kodu incelediğnizde değişkenlerin/fonksiyonların tiplerinin Java/C-C++ gibi statik tipli dillerdeki gibi belirtildiğini görebilirsiniz. Ancak buna rağmen Python’ın dinamik tip özelliği hala korunmaktadır.

Yani statik tipli dillerin aksine bir Python değişkeni tip notu ile karakter dizisi olarak nitelendirilmişse bile hala farklı tipte bir değeri alabilir.

Neden Tip Belirtimi?

Bu sözdizimi yapısal tip metaverisi sağlama ve kod dokümantasyonu amacı taşımaktar, statik tipli dillerdeki gibi bir kullanım sunmamaktadır. Bu gibi özellikler verilerinizin ne olduğunu size hatırlatmanın yanı sıra 3. parti araçları ya da lint’ler(kod inceleme araçları, Pylint, mypy vs.) ve kullanıcılara dokümantasyon sağlama içindir.

PyCharm gibi geliştirme ortamları(IDE) ctrl+Q vb. kısayollarla metin imlecinin üzerinde bulunduğu fonksiyonların kod dokümantasyonuna erişerek bunları size gösterir bu sayede fonksiyonun nasıl çalıştığını, hangi tip verilerle iş yaptığını internette araştırmanıza gerek kalmaz (eğer kaynak kod bu gibi dokümantasyonlar içeriyorsa).

Örnekler

# Uygun Olmayan Kullanımlar
def f():
    global x: int  # SyntaxError

def g():
    x: int  # SyntaxError
    global x

a: int
for a in my_iter:
    ...

f: MyFile
with myfunc() as f:
    ...
# Uygun Olan Kullanımlar
class Cls:
    pass

c = Cls()
c.x: int = 0
c.y: int

d = {}
d['a']: int = 0
d['b']: int

Sayılarda Altçizgi Kullanımı

PEP-515 ile sayıların içersinde altçizgi kullanarak kod okunabilirliğini arttırabiliriz. Altçizgilerin semantik bir anlamı yoktur, bu yüzden sayılar yorumlayıcı tarafından altçizgi yokmuş gibi algılanırlar.Bu sayede biz de sayıların anlamını değiştirmeden kolayca okuyabiliriz. Örnek:

>>> 1000000000000000 # Altçizgi yok
1000000000000000
>>> 1_000_000_000_000_000 # Altçizgi var ama sayı yine aynı sayı
1000000000000000
>>> 10_000_000.000_2
10000000.0002
>>> 0x_FF_FF_FF_FF
4294967295
>>> 0b_0011_1111
63
>>> int("0b_1111_0000",2)
240

Rakamlar arasında ya da taban göstergesinden(0x,0b vs.) sonra bir adet altçizgi kullanılabilir. Aralarda birden fazla veya sayıların başında ve sonunda alt çizgi kullanımına izin verilmiyor.

Karakter dizisi biçimlendirmede de altçizgi kullanımı mümkündür:

>>> f"{1000000000:_}"
'1_000_000_000'
>>> f"{0xFFFFFFFF:_}"
'4_294_967_295'
>>> f"{0xFFFFFFFF:_x}"
'ffff_ffff'

Beautiful Soup Belgeleri

Beautiful Soup Python’ın gözde HTML ve XML çözümleme kütüphanesidir. Belgeler için tıklayın.