Python'a Giriş

Başlangıç

Google'ın online Python eğitimine hoş geldiniz. Bu kurs, dahili olarak sunulan Python kursuna dayanmaktadır. Kurulum sayfasında belirtildiği gibi, bu materyal Python 3'ü kapsamaktadır.

Tamamlayıcı bir MOOC kursu arıyorsanız Udacity ve Coursera (programlamaya giriş [yeni başlayanlar] veya Python'a giriş) kursları deneyin. Son olarak, video izlemeden kendi hızınıza göre ilerleyebileceğiniz bir online eğitim arıyorsanız bu gönderinin sonuna doğru listelenenleri deneyin. Her bir eğitici içerik ve pratik yapmak için etkileşimli bir Python çevirmenidir. Bahsettiğimiz bu "yorumlayıcı" nedir? Bunu bir sonraki bölümde öğreneceksiniz!

Dile Giriş

Python dinamik, yorumlanmış (bayt koduyla derlenmiş) bir dildir. Kaynak kodunda değişken, parametre, işlev veya yöntem için tür bildirimleri bulunmaz. Bu, kodu kısa ve esnek hale getirir ve kaynak kodun derleme zamanı türü kontrolünü kaybedersiniz. Python, çalışma zamanında tüm değer türlerini izler ve çalışırken anlamsız olan kodları işaretler.

Python kodunun nasıl çalıştığını görmenin en iyi yollarından biri, Python yorumlayıcısını çalıştırıp kodu doğrudan içeriğe yazmaktır. "list öğesine int eklersem ne olur?" gibi bir sorunuz olursa ne olduğunu görmenin hızlı ve en iyi yolu muhtemelen bunu Python çevirmenlerine yazmanız yeterlidir. (Neler olduğunu görmek için aşağıya bakın!)

$ python3        ## Run the Python interpreter
Python 3.X.X (XXX, XXX XX XXXX, XX:XX:XX) [XXX] on XXX
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 6       ## set a variable in this interpreter session
>>> a           ## entering an expression prints its value
6
>>> a + 2
8
>>> a = 'hi'    ## 'a' can hold a string just as well
>>> a
'hi'
>>> len(a)      ## call the len() function on a string
2
>>> a + len(a)  ## try something that doesn't work
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only concatenate str (not "int") to str
>>> a + str(len(a))  ## probably what you really wanted
'hi2'
>>> foo         ## try something else that doesn't work
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'foo' is not defined
>>> ^D          ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)

İki satırlı python, siz python yazdıktan sonra ve >>> isteminden önce yazdırılır ve kullandığınız python sürümü ve nerede oluşturulduğu hakkında bilgi verir. Yazdırılan ilk şey "Python 3" olduğu sürece bu örnekler işinize yarayacaktır.

Yukarıda görebileceğiniz gibi, değişkenler ve operatörlerle denemeler yapmak kolaydır. Ayrıca, kod, değer atanmamış bir değişkeni okumaya çalıştığında, çevirmen Python dilinde bir çalışma zamanı hatası verir veya "yükseltir". C++ ve Java gibi Python da büyük/küçük harfe duyarlı olduğundan "a" ve "A" farklı değişkenlerdir. Bir satırın sonu, ifadenin sonunu işaret eder. Bu nedenle, C++ ve Java'dan farklı olarak Python, her ifadenin sonuna noktalı virgül eklenmesini gerektirmez. Yorumlar "#" ile başlar ve satırın sonuna kadar uzanır.

Python kaynak kodu

Python kaynak dosyaları, ".py" uzantısını kullanır ve "modüller" olarak adlandırılır. hello.py Python modülünde, bunu çalıştırmanın en kolay yolu "python hello.py Alice" kabuk komutunu kullanmaktır. Bu komut, Python yorumlayıcısını hello.py içindeki kodu yürütmesi için çağırarak komut satırı bağımsız değişkeni "Alice"i sağlar. Python'u komut satırından çalıştırırken sahip olduğunuz tüm farklı seçenekler için resmi dokümanlar sayfasına bakın.

İşte çok basit bir hello.py programı (kod bloklarının, küme parantezleri yerine girintileme kullanılarak sıkı bir şekilde sınırlandırıldığını unutmayın. Bu konuda daha sonra daha fazla bilgi verilecektir):

#!/usr/bin/python3

# import modules used here -- sys is a very standard one
import sys

# Gather our code in a main() function
def main():
    print('Hello there', sys.argv[1])
    # Command line args are in sys.argv[1], sys.argv[2] ...
    # sys.argv[0] is the script name itself and can be ignored

# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
    main()

Bu programın komut satırından çalıştırılması şuna benzer:

$ python3 hello.py Guido
Hello there Guido
$ ./hello.py Alice  ## without needing 'python3' first (Unix)
Hello there Alice

İçe aktarma işlemleri, komut satırı bağımsız değişkenleri ve len()

Bir Python dosyasındaki veya "modülde" bulunan en dıştaki ifadeler tek seferlik kurulumunu gerçekleştirir. Bu ifadeler, modül ilk kez bir yere içe aktarıldığında değişkenleri ve işlevlerini ayarlar. Python modülü, python3 hello.py Bob üzerinde olduğu gibi doğrudan çalıştırılabilir veya başka bir modül tarafından içe aktarılıp kullanılabilir. Bir Python dosyası doğrudan çalıştırıldığında "__name__" özel değişkeni "__main__" olarak ayarlanır. Bu nedenle, modül doğrudan çalıştırıldığında bir main() işlevi çağırmak için yukarıda gösterilen standart if __name__ ==... etiketinin olması yaygındır, ancak modül başka bir modül tarafından içe aktarıldığında bunu kapsamaz.

Standart bir Python programında sys.argv listesi komut satırı bağımsız değişkenlerini standart şekilde içerir; sys.argv[0] programın kendisi, sys.argv[1] ilk bağımsız değişkendir vb. argc veya bağımsız değişken sayısı hakkında bilginiz varsa, bir dizenin uzunluğunu isterken yukarıdaki etkileşimli çevirmen kodunda yaptığımız gibi, Python'dan bu değeri len(sys.argv) ile isteyebilirsiniz. Genel olarak len(), bir dizenin ne kadar olduğunu, listelerdeki ve tup'lardaki öğe sayısını (dizi benzeri başka bir veri yapısı) ve bir sözlükteki anahtar/değer çiftlerinin sayısını gösterebilir.

Kullanıcı Tanımlı İşlevler

Python'daki işlevler şu şekilde tanımlanır:

# Defines a "repeat" function that takes 2 arguments.
def repeat(s, exclaim):
    """
    Returns the string 's' repeated 3 times.
    If exclaim is true, add exclamation marks.
    """

    result = s + s + s # can also use "s * 3" which is faster (Why?)
    if exclaim:
        result = result + '!!!'
    return result

Ayrıca, işlevi veya eğer ifadesini oluşturan satırların, aynı girinti düzeyine sahip tüm ifadelere göre nasıl gruplandırıldığına da dikkat edin. Ayrıca, dizeleri daha kullanıcı dostu olan + operatörünü kullanarak tekrarlamak için 2 farklı yol sunduk. Ancak * aynı zamanda Python'un "repeat" operatörü olduğu için de işe yarar. Diğer bir deyişle, '-' * 10, '----------', ekranda bir "satır" oluşturmak için düzgün bir yol sağlar. Kod yorumunda, * karakterinin + değerinden daha hızlı çalıştığını vurguladık. Bunun nedeni, * işaretiyle elde edilen nesnenin boyutunu bir kez hesaplaması, + ile ise + her çağrıldığında hesaplamanın yapılmasıdır. Hem + hem de *, sayılar ve dizeler (ve diğer veri türleri) için farklı anlamlara geldiğinden "aşırı yüklenmiş" operatörleri olarak adlandırılır.

def anahtar kelimesi, işlevi parametreleri parantez içinde ve kodu girintili olarak tanımlar. Bir işlevin ilk satırı, işlevin ne yaptığını açıklayan bir belge dizesi ("docstring") olabilir. Doküman dizesi, tek bir satır veya yukarıdaki örnekte olduğu gibi çok satırlı bir açıklama olabilir. (Evet, bunlar "üç tırnak" olup Python'a özgü bir özelliktir.) İşlevde tanımlanan değişkenler, söz konusu işlevde yereldir. Dolayısıyla yukarıdaki işlevde bulunan "sonuç", başka bir işlevdeki "sonuç" değişkeninden ayrıdır. return ifadesi bir bağımsız değişken alabilir. Bu durumda, çağrıyı yapana döndürülen değer budur.

Yukarıdaki reCAPTCHA() işlevini çağıran ve döndürdüğü şeyi yazdıran kodu burada görebilirsiniz:

def main():
    print(repeat('Yay', False))      ## YayYayYay
    print(repeat('Woo Hoo', True))   ## Woo HooWoo HooWoo Hoo!!!

Çalışma zamanında, işlevler çağrılmadan önce bir "def" yürütülerek tanımlanmalıdır. Bir main() işlevi, üzerinde çağırdığı işlevlerle birlikte dosyanın alt kısmına doğru tanımlanabilir.

Girinti

Olağan dışı bir Python özelliği, bir kod parçasının boşluk girintisinin anlamı etkilemesidir. Bir işlevi oluşturanlar gibi mantıksal bir ifade bloğunun, üst işlevinin veya "if" ya da başka bir işlevin girintisinden ayarlanan aynı girintiye sahip olması gerekir. Bir gruptaki satırlardan birinin girintisi farklıysa söz dizimi hatası olarak işaretlenir.

Python'un boşluk kullanımı başta biraz tuhaf geliyor ama mantıklı. Girinti şemasını büyük ölçüde karmaşık hale getirdiği için SEKME kullanmaktan kaçının (SEKME'ler farklı platformlarda farklı anlamlara gelebilir). Düzenleyicinizi Python kodu için SEKME yerine boşluk ekleyecek şekilde ayarlayın.

Yeni başlayanların en çok sorduğu sorulardan biri, "Kaç boşluk girintilemeliyim?" şeklindedir. Resmi Python stil kılavuzuna (PEP 8) göre 4 boşlukla girintilemeniz gerekir. (Eğlenceli bir gerçek: Google'ın dahili stil kuralları, girintinin 2 boşlukla girilmesini zorunlu tutar!)

Çalışma Zamanında Kontrol Edilen Kod

Python, derleme zamanında çok az kontrol gerçekleştirir ve bu satır çalışana kadar her satırdaki neredeyse tüm tür, ad vb. kontrollerini erteler. Yukarıdaki main() çağrısının tekrar() çağrısını aşağıdaki gibi yaptığını varsayalım:

def main():
    if name == 'Guido':
        print(repeeeet(name) + '!!!')
    else:
        print(repeat(name))

if ifadesi bariz bir hata içeriyor. Bu hatada reCAPTCHA() işlevi yanlışlıkla repeeeet() olarak giriliyor. Python'daki eğlenceli olan budur... Bu kod, çalışma zamanındaki ad "Guido" olmadığı sürece düzgün şekilde derlenir ve çalışır. Yalnızca bir çalıştırma, repeeeet() işlevini yürütmeye çalıştığında böyle bir işlevin olmadığını fark eder ve bir hata verir. Bu snippet'te ikinci bir hata da bulunmaktadır. ad "Guido" ile karşılaştırılmadan önce bir değer atanmamıştır. Atanmamış bir değişkeni değerlendirmeye çalışırsanız Python bir "NameError" hatası verir. Bu örnekler, bir Python programını ilk çalıştırdığınızda göreceğiniz ilk hatalardan bazılarının basit yazım hataları veya buna benzer başlatılmamış değişkenler olacağını gösteren bazı örneklerdir. Bu, Java gibi daha ayrıntılı bir sisteme sahip dillerin daha avantajlı olduğu alanlardan biridir. Bu tür hataları derleme sırasında yakalarlar (ancak elbette tüm bu tür bilgileri korumanız gerekir ... bu bir denge gerektirir).

Python 3, tür ipuçlarını kullanıma sundu. Tür ipuçları, bir işlevdeki her bağımsız değişkenin türünün yanı sıra işlev tarafından döndürülen nesnenin türünü de belirtmenize olanak tanır. Örneğin, ek açıklamalı def is_positive(n: int) -> bool: işlevinde n bağımsız değişkeni int, döndürülen değer ise bool'dir. Bu türlerin ne anlama geldiğine daha sonra değineceğiz. Bununla birlikte, tür ipuçları tamamen isteğe bağlıdır. Tür ipuçlarını kullanan kodların sayısının gittikçe arttığını göreceksiniz. Bunun nedeni, bunları kullanırsanız cider-v ve VS.code gibi bazı düzenleyicilerin işlevlerinizin doğru bağımsız değişken türleriyle çağrıldığını doğrulamak için kontroller yürütebilmesidir. Hatta siz kodu düzenlerken bağımsız değişkenler önerebilir ve bunları doğrulayabilirler. Bu eğiticide tür ipuçları ele alınmamaktadır. Ancak, bu ipuçlarından haberdar olduğunuzda veya bunları doğal ortamda gördüğünüzde bunlardan haberdar olmanızı isteriz.

Değişken Adları

Python değişkenleri kaynak kodunda herhangi bir türde yazmadığından, değişkenlerinize anlamlı adlar vermek, değişkenlerinizi hatırlamak için size çok yardımcı olur. Dolayısıyla, tek bir adsa "ad"ı, bir ad listesiyse "adlar"ı, bir unsur listesiyse "tuples"ı kullanın. Temel Python hatalarının çoğu, her değişkende ne tür bir değer olduğunun unutulmasından kaynaklanır. Bu nedenle, her şeyi yoluna sokmak için değişken adlarınızı (yani sahip olduğunuz tek) kullanın.

Gerçek adlandırmada kullanılan bazı diller "birden fazla kelimeden oluşan" değişken adları için alt çizili_bölümleri tercih ederken, diğer diller deve-büyük harf kullanımını tercih eder. Genel olarak, Python alt çizgi yöntemini tercih eder ancak geliştiricileri, zaten bu stili kullanan mevcut Python koduna entegre ediyorsanız deveCasing'i kullanmaya yönlendirmeye yönlendirir. Okunabilirlik önemlidir. Daha fazla bilgi için PEP 8'de adlandırma kuralları bölümüne bakın.

Tahmin edebileceğiniz gibi, "if" ve "süre" gibi anahtar kelimeler değişken adı olarak kullanılamaz. Bu durumda söz dizimi hatası alırsınız. Ancak değişken adı olarak yerleşik anahtar kelime kullanmamaya dikkat edin. Örneğin, "str", "list" ve "print" adları güzel adlar gibi görünse de, bu sistem değişkenlerini geçersiz kılarsınız. Yerleşik şablonlar anahtar kelime değildir ve bu nedenle yeni Python geliştiricilerinin yanlışlıkla kullanabildiği durumlardır.

Modüller ve Ad Alanları hakkında daha fazla bilgi

"def foo()" içeren bir "binky.py" modülünüz olduğunu varsayalım. Bu foo işlevinin tam adı "binky.foo"dur. Bu şekilde, çeşitli Python modülleri işlevlerini ve değişkenlerini istedikleri gibi adlandırabilir ve değişken adları çakışmaz. Mod1.foo, modül2.foo'dan farklıdır. Python sözlüğünde, binky, modül1 ve modül2'nin her birinin kendi "ad alanları" olduğunu, tahmin edebileceğiniz gibi bunların değişken ad-nesne bağlamaları olduğunu söyleriz.

Örneğin, argv listesi ve exit() işlevi gibi bazı standart sistem özelliklerini içeren standart "sys" modülümüz vardır. Ardından, "import sys" ifadesiyle, sys modülündeki tanımlara erişebilir ve bunları tam nitelikli adlarıyla (ör. sys.exit()) kullanılabilir hale getirebilirsiniz. (Evet, 'sys' de bir ad alanına sahiptir!)

  import sys

  # Now can refer to sys.xxx facilities
  sys.exit(0)

Şuna benzeyen başka bir içe aktarma formu vardır: "from sys import argv, exit". Bu, argv ve exit() işlevlerini kısa adlarıyla kullanılabilir hale getirir. Ancak, bir işlevin veya özelliğin nereden geldiğini belirlemek çok daha kolay olduğundan, tam adlara sahip orijinal biçimi öneririz.

Python yorumlayıcısının standart kurulumuyla birlikte gelen birçok modül ve paket vardır. Dolayısıyla, bunları kullanmak için fazladan bir şey yapmanız gerekmez. Bunlar toplu olarak "Python Standart Kitaplığı" olarak bilinir. Yaygın olarak kullanılan modüller/paketler şunlardır:

  • sys — exit(), argv, stdin, stdout, ... öğesine erişim
  • re — normal ifadeler
  • os — işletim sistemi arayüzü, dosya sistemi

Tüm Standart Kitaplık modülleri ve paketleriyle ilgili belgeleri http://docs.python.org/library adresinde bulabilirsiniz.

Çevrimiçi yardım, help() ve dir()

Python ile ilgili yardım almanın çeşitli yolları vardır.

  • "python" kelimesiyle başlayıp "piton listesi" veya "python dizesinde küçük harf" gibi bir Google araması yapın. İlk isabet genellikle yanıttır. Bu teknik, bir nedenle Python'da diğer dillerde olduğundan daha iyi sonuç veriyor gibi görünüyor.
  • Resmi Python dokümanlar sitesi (docs.python.org) yüksek kaliteli dokümanlara sahiptir. Yine de Google'da genellikle birkaç kelimeyle yaptığım aramanın daha hızlı sonuç verdiğini düşünüyorum.
  • Ayrıca Python ve/veya programlama konusunda yeni olanlar için özel olarak tasarlanmış resmi bir Eğitmen posta listesi de vardır.
  • Birçok soruyu (ve yanıtını) StackOverflow ve Quora'da bulabilirsiniz.
  • Help() ve dir() işlevlerini kullanın (aşağıya bakın).

Python yorumlayıcısında, help() işlevi çeşitli modüller, işlevler ve yöntemler için belge dizeleri getirir. Bu doküman dizeleri Java'nın javadoc dosyasına benzer. dir() işlevi, bir nesnenin özelliklerini söyler. Çevirmenden Help() ve dir() işlevlerini çağırmanın bazı yollarını aşağıda bulabilirsiniz:

  • help(len) — yerleşik len() işlevi için yardım dizesi; işlevin bir çağrısı olan ve istemediğimiz "len()" olan"len()" değil "len" olduğunu unutmayın
  • help(sys)sys modülü için yardım dizesi (önce import sys yapılmalıdır)
  • dir(sys)dir(), help() gibidir ancak tanımlanmış simgelerinin veya "özelliklerinin" kısa bir listesini verir
  • help(sys.exit)sys modülündeki exit() işlevine ilişkin yardım dizesi
  • help('xyz'.split) — dize nesnelerinde split() yönteminin yardım dizesi. help() öğesini söz konusu nesnenin kendisi veya örnek ile birlikte özelliği ile çağırabilirsiniz. Örneğin, help('xyz'.split) çağırmak help(str.split) ile aynı şeydir.
  • help(list)list nesne için yardım dizesi
  • dir(list) — yöntemleri de dahil olmak üzere list nesne özelliklerini gösterir
  • help(list.append)list nesneleri için append() yönteminin yardım dizesi