Yorumlayıcı, Etkileşimli bir Kabuk¶
‘Etkileşimli’ ve ‘Kabuk’ Terimleri¶
“Etkileşimli” (interactive) terimi Latince'deki “inter agere” ifadesine kadar gider. “Agere” fiili, diğer anlamlarının yanında, “birşey yapmak” ve “hareket etmek” demekken “inter” birşeylerin ve olayların uzamsal ve zamansal konumunu anlatır, yani nesnelerin, kişilerin ve olayların “arasında” anlamına gelir. Dolayısıyla “inter agere” ifadesi birşeylerin arasında veya içinde hareket etmek anlamını taşır.
Bunu aklımızda tutarak, etkileşimli kabuğun kullanıcı ile işletim sistemi arasında (örneğin Linux, Unix, Windows vb.) görev yaptığını söyleyebiliriz. Bir işletim sistemi yerine, yorumlayıcı Python gibi bir programlama dili için de kullanılabilir. Python yorumlayıcısı etkileşimli kabuktan kullanılabilir. Etkileşimli kabuk, komutlar veya olaylar ile bunların yürütülmesi arasında yer aldığı için de etkileşimlidir. Yani, kabuk kullanıcıdan komut bekler, bunu yürütür ve yürütmenin sonucunu sunar. Bundan sonra da, kullanıcıdan sonraki girişi yapmasını bekler.
Biyolojideki kabuk, bir kalsiyum karbonat “duvar” olup sümüklüböcekleri veya midyeleri çevrelerinden veya düşmanlarından korur. Benzer şekilde, işletim sistemlerindeki kabuk da işletim sisteminin çekirdeği (kernel) ve kullanıcı arasında bulunur. Bu iki taraflı bir “korumadır”. Kullanıcı işletim sisteminin (OS) temel fonksiyonlarını kullanmak zorunda değildir, ancak kabuk komutlarının basit ve kolay anlaşılan olanlarını kullanabilir. Çekirdek, sistem fonksiyonunun istenmeden, yanlış bir şekilde kullanılmasından da korunur.
Python, Python kabuğu ile rahat kullanılan bir komut satırı arayüzü sunar, bu arayüz “Python etkileşimli kabuğu” olarak bilinir. “Etkileşimli Kabuk” terimi laf kalabalığı olarak görünmektedir, çünkü “Kabuk” kendi başına etkileşimlidir, en azından önceki paragraflarda tarif ettiğimiz kabuk türlerinde durum böyledir.
Python etkileşimli kabuğunun kullanımı¶
Python etkileşimli yorumlayıcısı ile Python komutlarını denemek kolaydır. Python yorumlayıcısı, “python” komutunu parametre almaksızın girerek ve ardından “return” tuşuna basarak çalıştırılabilir:
python
Python size şöyle yanıt verir:
$ python Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information.
Yukarıda yer alan bilgilere daha yakından baktığımızda yanlış Python sürümüne sahip olduğumuzu görüyoruz. Python 3.x’i kullanmak istiyorduk, ancak elimizde olanın işletim sistemine ait standart sürüm olduğunu (2.7.11) anlıyoruz. Bir Python 3.x sürümünün kurulup kurulmadığını kontrol etmek için en kolay yol bir terminal açmaktır. Python yazıp return tuşuna basmayın, bunun yerine Tab (sekme) tuşuna basın. Eğer varsa çok sayıda uzantıyı ve kurulu diğer sürümleri göreceksiniz.
bernd@venus:~$ $ python python python3 python3.7-config python-config python2 python3.6 python3.7m pythontex python2.7 python3.6-config python3.7m-config pythontex3 python2.7-config python3.6m python3-config python-whiteboard python2-config python3.6m-config python3m python2-pbr python3.7 python3m-config bernd@venus:~$ python
Başka bir Python sürümü gözükmüyorsa, python 3.x sürümünün kurulması gerekecektir. Bundan sonra python3 yazarak yeni kurulmuş sürümle çalışmaya başlayabiliriz:
$ python3 Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information.
Python yorumlayıcısı başladıktan sonra komut satırı olan “>>>” işaretinden sonra herhangi bir komutu çalıştırabilirsiniz. “Merhaba” kelimesini girerek ne olduğuna bakalım:
Merhaba
Elbette “merhaba” bir Python komutu değildir, bu yüzden etkileşimli kabuk hata verir. Kullanacağımız ilk gerçek komut print komutu olacak. Meşhur “Merhaba Dünya” ifadesini yazalım:
print("Merhaba Dünya")
Daha basiti olamazdı, değil mi? Aslında daha da kolay bir şekilde yazılabilir. Etkileşimli Python yorumlayıcısında (programda değil) print komutuna ihtiyaç yoktur. Bir kelime dizisi veya bir sayı girdiğimizde bunlar “yankılanır“:
"Merhaba Dünya"
3
Python Kabuğundan Nasıl Çıkılır¶
Daha yeni başladık, ve şimdiden kabuktan nasıl çıkacağımızı konuşuyoruz. Bunu yapmalıyız, çünkü bir programdan nasıl çıkacağımızı bilmezsek bunun ne kadar sinir bozucu olabileceğini biliyoruz. Etkileşimli kabuğu sonlandırmak basittir: exit() veya Ctrl-D (yani EOF, dosya sonu) kullanarak çıkabiliriz. Exit fonksiyonunun yanındaki parantezler gereklidir. (Uyarı: parantezsiz exit kullanımı Python 2.x’de işe yarar, ancak Python 3.x’de artık çalışmaz).
Basit bir Hesap Makinesi Olarak Kabuk¶
Aşağıdaki örnekte, bir aritmetik işlem kullanarak yorumlayıcıyı basit bir hesap makinesi olarak çalıştırıyoruz:
4.567 * 8.323 * 17
Python, ifadelerde genel işletim kurallarını (uygulama sırası) takip eder. Standart uygulama sırası şöyledir:
1. üs alma ve kök işlemleri,
2. çarpma ve bölme,
3. toplama ve çıkarma.
Yani “3 + (2 * 4)” ifadesinde parantezlere ihtiyaç duymayacağız:
3 + 2 * 4
En son çıktı değeri yorumlayıcı tarafından otomatik olarak “_” isimli özel bir değişkene yüklenir. Yani komut satırından sonra bir alt çizgi kullanarak son örneği tekrar yazdırabiliriz:
_
Alt çizgi, diğer değişkenlerde olduğu gibi, başka ifadelerde de kullanılabilir:
_ * 3
Alt çizgi değişkeni yalnızca Python kabuğunda mevcuttur. Python betilerinde veya programlarında mevcut DEĞİLDİR.
Değişkenlerin Kullanımı¶
Python kabuğunda değişkenlerin kullanılması basittir. Eğer tam bir acemiyseniz ve değişkenler hakkında hiçbir şey bilmiyorsanız, değişkenler ve veri türleri konusundaki bölümümüzü lütfen okuyunuz. Değerler değişkenler olarak kaydedilebilir. Değişkenler özel işaretlere gerek duymaz (örneğin Perl’de değişkenler dolar işareti, yüzde işareti ve @ ile işaretlenir.)
maksimum = 124
genişlik = 94
print(maksimum - genişlik)
Çok Satırlı İfadeler¶
Çok satırlı ifadeleri henüz işlemedik. Dolayısıyla yeni başlayanlar bu bölümün geri kalan kısmını atlayabilir ve sonraki bölümleri okuyabilir.
Şimdi for döngülerinde olduğu gibi çok satırlı ifadelerle, etkileşimli komut satırının nasıl çalıştığını göstereceğiz.
l = ["A", 42, 78, "Sadece bir Karakter Dizisi"]
for character in l:
print(character)
“for character in l:” girişini yaptıktan sonra, yorumlayıcı sonraki satırın girintileneceğini anlar ve girdiyi bekler. Başka bir deyişle, yorumlayıcı, döngünün parçası olan girintili bir blok bekler. Bu girintili blok tekrarlanacaktır. Yorumlayıcı bu “beklentiyi” üç nokta “...” göstererek size ifade eder, standart Python etkileşimli komut satırının biçimi “>>>” idi biliyorsunuz. Etkileşimli kabuğun bir başka özelliği de girintiye (bloğa) son vermemiz gerektiğinde boş bir satır girmemiz gerekmesidir.
Uyarı: İlave boş satır kullanımı yalnızca etkileşimli kabukta geçerlidir! Bir Python programında, “for” satırının girinti seviyesine, yani sonunda iki nokta üst üste (:) içeren satıra dönmek yeterlidir.
Karakter Dizileri¶
Karakter dizileri, bir seri karakteri tırnak işaretleri arasına alarak oluşturulur. Karakter dizileri tek tırnak, çift tırnak veya üç tırnak ile yapılabilir, üç tırnakta üç adet tek tırnak veya üç adet çift tırnak kullanılabilir. Karakter dizileri değiştirilemez. Yani bir kere tanımlandıklarında bunların değiştirilmesi mümkün değildir. Bu konuya başka bir bölümde ayrıntılarıyla değineceğiz.
"Merhaba" + " " + "Dünya"
Üç tırnaklı kelime dizileri, kaçış (escape) karakteri kullanmadan çok satırlı olarak devam edebilir:
city = """
Toronto Kanada’nın en büyük şehridir
ve Ontario’nun eyalet başkentidir.
Güney Ontario (Ontario Gölü’nün kuzeybatı
kıyısında) yer alır.
"""
print(city)
Karakter dizilerinin çarpılması tanımlı bir olaydır, aslında çoklu bir birleştirme (concatenation) işlevinden ibarettir:
".-." * 4