Yorumlayıcı, Etkileşimli bir Kabuk

‘Etkileşimli’ ve ‘Kabuk’ Terimleri

Python and the shell

“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:

In [3]:
Merhaba
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-52bbe095ee49> in <module>
----> 1 Merhaba

NameError: name 'Merhaba' is not defined

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:

In [4]:
print("Merhaba Dünya")
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“:

In [5]:
"Merhaba Dünya"
Out[5]:
'Merhaba Dünya'
In [6]:
3
Out[6]:
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:

In [7]:
4.567 * 8.323 * 17
Out[7]:
646.189397

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:

In [8]:
3 + 2 * 4
Out[8]:
11

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:

In [9]:
_
Out[9]:
11

Alt çizgi, diğer değişkenlerde olduğu gibi, başka ifadelerde de kullanılabilir:

In [10]:
_ * 3
Out[10]:
33

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.)

In [11]:
maksimum = 124
genişlik = 94
print(maksimum - genişlik)
30

Ç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.

In [14]:
l = ["A", 42, 78, "Sadece bir Karakter Dizisi"]
for character in l:
    print(character)
A
42
78
Sadece bir Karakter Dizisi

“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.

In [15]:
"Merhaba" + " " + "Dünya"
Out[15]:
'Merhaba Dünya'

Üç tırnaklı kelime dizileri, kaçış (escape) karakteri kullanmadan çok satırlı olarak devam edebilir:

In [16]:
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)
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.

Karakter dizilerinin çarpılması tanımlı bir olaydır, aslında çoklu bir birleştirme (concatenation) işlevinden ibarettir:

In [18]:
".-." * 4
Out[18]:
'.-..-..-..-.'