1 Eylül 2014 Pazartesi

Python' da Modüller

Herkese Merhaba,

Fonksiyonlar konusunu bitirdikten sonra sıradaki konumuz Modüller. Yine oldukça önemli konulardan biri olan modüller işimizi oldukça kolaylaştıracak olan konulardan biri. Modülleri anlatabilmek için önce modül nedir bundan bahsetmek gerekiyor.

Modül kelime anlamı olarak parça anlamına gelmektedir. Şimdiye kadar Python ile yazmış olduğumuz .py uzantılı her şeye modül diyebiliriz. Peki bu modül ne işimize yarar.

Fonksiyonlar konusundan herkes hatırlıyordur. Yazdığımız bir fonksiyonu aynı fonksiyon içerisinde çağırarak tekrar tekrar kullanabiliyorduk. Peki yazdığımız fonksiyonu başka bir çalışmamızda kullanmak istersek ne yapacağız. Aynı fonksiyonu tekrar mı yazacağız? Yoksa elimizde var olan fonksiyonu kopyalayıp yapıştıracak mıyız? Bir fonksiyon elimizde varken tekrar yazmak zaman kaybından başka bir şey değildir. Kopyalayıp yapıştırmak ise hatalara oldukça açık bir yöntemdir. Aslında bu fonksiyonu bu dosyaya aktarmanın bir yolu var. Peki bunu nasıl yapacağız? Yazdığımız her .py uzantılı dosyanın modül olduğunu söylemiştik. Bu özellik sayesinde her fonksiyonu istediğimiz modül içerisinde kullanabiliriz. Hadi o zaman bunu nasıl yapabileceğimize bakalım.

Modülleri İçe Aktarma

Python' da bir modülü bir programdan başka bir programa aktarma işlemine modülü içe aktarma denir. Bu terimin İngilizce karşılığına ise import denilir.

Diyelim ki bir program yazdık. Bu programın adı deneme.py olsun. Bu program şu şekilde olsun.
def kare_al(a):
    a = a ** 2
    print(a) 
Aynı program içerisinde bu fonksiyona ihtiyacınız olursa bunu nasıl kullanacağınızı biliyorsunuz. Eğer bu fonksiyonu başka bir program içerisinde kullanmak isterseniz tek yapmanız gereken bu fonksiyonu çağırmak olacaktır. Peki nasıl çağırırız?

Şu durumda deneme.py bizim modülümüz olmaktadır. Modüller .py uzantısına sahiptir fakat söylenirken bu kısım söylenmez. Şimdi bu deneme.py adlı dosyanın bulunduğu dizin içinde bir komut satırı açıp Python’un etkileşimli kabuğunu çalıştırın. Mesela eğer deneme.py dosyasını masaüstüne kaydettiyseniz bir komut satırı açın, cd Desktop komutuyla masaüstüne gelin ve python komutunu vererek etkileşimli kabuğu başatın. Şimdi şu komutu verin:
>>> import deneme
Eğer bir şey olmadan alt satıra geçmişse verdiğiniz komut çalıştı demektir fakar bir hata almışşasnız büyük ihtimalle Python' u başlatamadınız demektir. Şuan bir sorun almadığınızı varsayarak devam edeceğim. Şimdi bu komutu vererek içe aktardığımız fonksiyon içindeki kullanılabilir yapıları göreceğiz.
>>> dir(deneme)
Bu komutu verdiğimizde şu şekilde bir çıktı alıyoruz.
[’__builtins__’, ’__doc__’, ’__file__’, ’__name__’, ’__package__’, ’kare_al’]
Bunlar içerisinde bizi ilgilendiren kısım en sondaki 'kare_al' kısmı. Bu demek oluyorki bu fonksiyon hazır biz bunu kullanabiliriz. Bunu bir örnek ile deneyelim ve 5 sayısının karesini almaya çalışalım.
>>> deneme.kare_al(5)
Bu komut bize şu şekide bir sonuç verir.
25
Gördüğünüz gibi deneme adlı program içerisindeki kare_al adlı fonksiyonu kullanarak 5'in karesini aldık.“deneme” modülünü nasıl içe aktardığımıza ve bu modülün içindeki bir fonksiyon olan kare_al() fonksiyonunu nasıl kullandığımıza çok dikkat edin. Önce modülümüzün adı olan “deneme”yi yazıyoruz. Ardından bir nokta işareti koyup, ihtiyacımız olan fonksiyonun adını belirtiyoruz. Yani şöyle bir formül takip ediyoruz:
modül_adı.fonksiyon
Burada unutulmaması gereken en önemli şey modülü import komutu ile içe aktarmayı unutmamak. Modülü içe aktarmazsak içindekilere erişemeyiz.

Python’da programımız içinde kullanaca˘gımız modülleri birkaç farklı yöntemle içe aktarabiliriz. Şimdi bunlara bakalım.

  • import modül_adı
Bu yöntem ile bir modülün bütün içeriğini aktarabiliriz. Yukarıda kullandığımız yöntem zaten bu yöntemdir.

  • from modül adı import *
Bu yöntemle bir modül içinde adı “__” ile başlayanlar hariç bütün fonksiyonları programımız içine aktarabiliriz. Yani bu yöntem de tıpkı yukarıda anlatılan yöntemde olduğu gibi, bütün fonksiyonları alacaktır. Yalnız “__” ile başlayan fonksiyonlar hariç.

Eğer bir modülü bu yöntemi kullanarak içe aktarmışsanız, içe aktardığımız modülün nitelik ve fonksiyonlarına doğrudan nitelik veya fonksiyon adını kullanarak erişebilirsiniz. Örneğin import modül_adı yöntemiyle içe aktardığımız modüllerin nitelik ve fonksiyonlarını şöyle kullanıyorduk:
>>> modül_adı.fonksiyon
from modül_adı import * yöntemiyle içe aktardığımız modüllerin nitelik ve fonksiyonlarını ise şöyle kullanıyoruz:
>>> fonksiyon
Mesela yukarıda bahsetti˘gimiz “deneme” modülünü örnek alalım:
>>> from deneme import *
>>> a = 5
>>> kare_al(a)
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
25
  • from modül_adı import xxx,yyy
Bu yöntem ile bir modülden istediğiniz fonksiyonu yada fonksiyonları çağırabilirsiniz. Başka fonksiyonları çağırmamış olursunuz. Bu fonksiyonu şu şekilde kullanıyoruz.
>>> from deneme import kare_al
Böylece deneme modülünün içerisindeki kare_al adlı fonksiyonu çağırmış olduk. Yanına o modülden çağırmak istediğiniz diğer fonksiyonların adlarını virgül ile ayırarak yazabilirsiniz. Şimdi kare_ al fonksiyonu ile 6' nın karesini almak istersek şunu yapmalıyız.
>>> a = 6
>>> kare_al(a) 
Bunu yazdığımızda çıktısı şu şekilde olacaktır.
36
  • import modül_adı as yeni_isim
Diyelim ki herhangi bir sebepten, modülün adını programınız içinde doğrudan kullanmak
istemiyorsunuz. O zaman bu yöntemi kullanarak modüle farklı bir ad verebilirsiniz:

>>> import deneme as dene
>>> a = 5
>>> dene.kare_al(a)
Mesela içe aktaracağınız modül adı çok uzunsa ve her defasında bu uzun ismi yazmak size zor geliyorsa bu yöntemi kullanarak modül adını kısaltabilirsiniz. Ayrıca programınızda zaten “deneme” adlı başka bir nitelik veya fonksiyon varsa bu ikisinin birbirine karışmasını engellemek için de bu yöntemi kullanmayı tercih edebilirsiniz.

Anlatacağım modül import etme yöntemleri bu kadar. Internet üzerinde, başkaları tarafından yazılmış binlerce modüle ulaşabilirsiniz. Hatta Python’un kendi içinde de Python geliştiricileri tarafından yazılmış onlarca faydalı modül bulunur. Zaten Python programlama diline asıl gücünü katan da bu ilave modüllerdir.

Bilgi paylaştıkça güzelleşir. Paylaşarak öğrenmek dileğiyle.

Osman

Hiç yorum yok:

Yorum Gönder