.. _introduction: ***** Giriş ***** Bu başvuru kitapçığı Python programlama dilini anlatır. Bir öğretici olarak düşünülmemiştir. Mümkün olduğunca hassas olmaya çalıştığım için resmi açıklamalar yerine İngilizce' yi kullanmayı seçtim, tabiki sözdizimi ve anlamsal analiz dışında. Bu, belgeyi ortalama okuyuculara göre daha anlaşılır yapacak, fakat anlam karışıklığına da yol açacaktır. Eğer Mars' tan geliyorsan ve Python' ı sadece bu belgeden yararlanarak yeniden gerçeklemeye çalışırsan, bazı şeyleri tahmin etmen gerekebilir ve büyük ihtimalle gerçeklemeyi bitirdiğinde biraz farklı bir dil ortaya çıkacaktır. Diğer yandan, eğer Python kullanıyorsan ve dilin özel bir alanındaki hassas kuralları merak ediyorsan, onları burada bulacaksın. Eğer dilin biraz daha resmi bir tanımını görmek istiyorsan, belki bu iş için gönüllü olmalısın, ya da bir kopyalama makinesi icat edebilirsin :-). Bir dil referans belgesine çok fazla gerçekleme detayı eklemek tehlikelidir, gerçekleme değişebilir, veya aynı dilin diğer gerçeklemeleri farklı çalışabilir. Diğer yandan, şu sıralar sadece bir tane Python gerçeklemesi yaygın (başka gerçeklemeler var olsa da), ve bu gerçeklemenin bazı özel gariplikleri bazen bahsedilmeye değer olacak, özellikle de gerçeklemenin bizi fazladan sınırlamalara zorladığı yerlerde. Bu yüzden, yazı boyunca serpiştirilmiş "gerçekleme notları" bulacaksın. Her Python gerçeklemesi gömülü ve standart bazı modüllerle birlikte gelir. Bunlar :ref:`library-index`'nde belgelenmiştir. Dilin tanımıyla önemli bir şekilde etkileştiği zamanlarda bir kaç gömülü modülden bu belgelerde de bahsedeceğiz. .. _implementations: Farklı Gerçeklemeler ==================== Açık ara farkla gözde olan sadece bir Python gerçeklemesi olsa da, farklı kitlelerce özel ilgi gören bazı eşil gerçeklemeler de vardır. Bilinen gerçeklemeler şunları içerir: CPython Bu Python' ın asıl ve en çok bakım yapılan gerçeklemesidir, C ile yazılmıştır. Yeni dil özellikleri ilk olarak genelde bunda ortaya çıkar. Jython Python' ın Java' da gerçeklenmiş halidir. Bu gerçekleme Java uygulamalarında bir betik dili olarak ya da Java sınıf kütüphaneleri kullanılarak uygulamalar oluşturmada kullanılabilir. Ayrıca Java kütüphaneleri için sınamalar yazmada sıklıkla kullanılır. Daha fazla bilgi `Jython ana sayfası `_ndan edinilebilir. Python for .NET Bu gerçekleme aslında CPython gerçeklemesini kullanır, fakat yönetilen bir .NET uygulamasıdır ve .NET kütüphanelerini kullanılabilir kılar. Brian Lloyd tarafından gerçeklenmiştir. Daha fazla bilgi için `Python for .NET ana sayfası `_na bakınız. IronPython .NET için başka bir Python' dır. Python.NET'in aksine, bu ortak ara dil(CIL) oluşturan tam bir Python gerçeklemesidir ve Python kodlarını doğruca .NET assembly'lerine çevirir. Jim Hugunin tarafından gerçeklenmiştir, ki bu kişi Jython'un asıl gerçekleyenidir. Daha fazla bilgi için `IronPython ana sayfası `_na bakınız. PyPy Python'ın tamamen Python'la yazılmış bir gerçeklemesidir. Bu gerçekleme diğer gerçeklemelerde olmayan birkaç üst düzey özelliği destekler, örneğin yığınsız (stackless) desteği ve sadece zamanında (Just in Time) derleyici. Projenin amaçlarından biri, yorumlayıcıyı değiştirmeyi daha kolay yaparak(Python' da yazılmasından ötürü) dille yapılan deneyleri teşvik etmektir. Ek bilgi `PyPy tasarısının ana sayfasında `_ bulunmaktadır. Bu gerçeklemelerin hepsi bu kitapçıkta belgelendirilen dilden bazı yönlerden ayrılır ya da standart Python belgelendirmesinde kapsananın ötesinde özel bilgiler bulundurur. Lütfen kullandığınız özel gerçeklemede başka ne bilmeniz gerektiğini belirlemek için gerçeklemeye özel belgelendirmeye bakınız. .. _notation: Simgelenim ========== .. index:: BNF, grammar, syntax, notation Sözcüksel analizin tanımı ve sözdizimi değiştirilmiş bir BNF dilbilgisi gösterimi kullanır. Bu gösterim aşağıdaki tanım biçimini kullanır: .. productionlist:: * isim: `harf` (`harf` | "_")* harf: "a"..."z" İlk satır ``isim``\ in, bir ``harf`` ve ardından bir ya da daha fazla sayıda ``harf`` ya da alt çizgiden oluştuğunu belirtir. Bir ``harf`` ``'a'`` dan ``'z'``\ ye kadar herhangi bir işaret olabilir. (Aslında bu kurala bu belgedeki anlamsal kurallarda ve dilbilgisi kurallarında tanımlı bütün isimlerde uyulur.) Her kural, kuralın belirlediği bir isim ve ``::=`` ile başlar. Diğer isimleri ayırmak için dikey çubuk (``|``) kullanılır, bu simgelenimde en gevşek bağlanan işleç budur. Yıldız (``*``) bir önceki öğenin sıfır ya da daha fazla tekrarlanması anlamına gelir; bunun gibi, artı (``+``) bir ya da daha fazla tekrarlanma, köşeli parantezlerle kapatılmış bir ifade ise sıfır ya da bir oluş anlamına gelir (bir diğer deyişle, köşeli parantezlerle kapatılmış ifade seçenekseldir). ``*`` ve ``+`` işleçleri olabildiğince sıkı bağlanırlar; öbekleme için ayraçlar kullanılır. Hazır bilgi karakter dizileri tırnak içine alınır. Boşluk işaretleri sadece belirteçleri ayırmada anlamlıdır. Kurallar genellikle tek satır olarak yazılır; eşilleri olan kurallar ayrıca ilki dışındaki her satır dikey çubuk ile başlayacak şekilde biçimlendirilebilir. .. index:: lexical definitions, ASCII Sözcüksel tanımlarda (yukarıdaki gibi), iki tane daha gelenek vardır: Üç nokta ile ayrılmış iki hazır bilgi işareti, verilen (içeren) aralıktaki herhangi bir ASCII işaretinin seçimi anlamına gelir. Açılı parantez (``<...>``) içindeki bir sözcük grubu tanımlanan simgenin resmi olmayan bir tanımını verir; örneğin, gerektiğinde bu, 'denetim işareti' kavramını tanımlamak için kullanılabilir. Kullanılan simgelenim neredeyse aynı olsa da, sözcüksel ve sözdizimsel tanımların anlamları arasında büyük farklılık vardır: bir sözcüksel tanım, giriş kaynağının birbirinden ayrı işaretleri üzerinde işlem yapar, oysa bir sözdizimsel tanım, sözcüksel çözümleme ile oluşturulmuş belirteç akımı üzerinde işlem yapar. Bir sonraki bölümdeki ("Sözcüksel Çözümleme") tüm BNF kullanımları sözcüksel, takip eden bölümlerdekiler ise sözdizimsel tanımlardır.