Herkese merhabalar,
Python eğitim serisinin bir önceki yazısında kendi fonksiyonlarımızı oluşturmayı işledik. Bundan önceki bölüm olan Python: Bölüm 5 – Fonksiyonlar yazısını daha okumadıysanız bu linke tıklayarak ulaşabilirsiniz.
İçerik:
- Modüller
- Modül Oluşturma
- Paketler
Bu yazımızda ise detaylı bir şekilde modüller ve paketleri işleyeceğiz. Hadi başlayalım!!
Modüller
Python programlama dilinde modül, kısaca .py uzantılı python kodu içeren herhangi bir dosyadır diyebiliriz. Bu dosyanın içinde sınıflar, değişkenler, fonksiyonlar, veya çalışabilecek kodlar bulunabilir. Örneğin modul_1 isimli bir dosyayı aşağıdaki şekilde çağırabiliriz.
1 |
import modul_1 |
Böyle bir durumda, modul_1.py dosyasının içerdiği her fonksiyona, değişkene veya sınıfa sanki biz yazmışız gibi erişilebiliriz. Ayrıca, aşağıdaki gibi tek bir import ile birden fazla modül yükleyebiliriz.
1 |
import modul_1, modul_2, modul_3 |
Hadi şimdi bir örnek üzerinden gidelim. Aşağıdaki kodu modul_1.py isimli bir dosyaya yazıp kaydedip bir modül oluşturmuş olalım.
1 2 3 4 5 6 7 |
# modul_1.py print("Modül 1 çalıştırıldı.") x = 2 def a(x): return x**2 def b(): print("Merhaba Dünya") |
Komut satırında veya başka bir program içinde import modul_1 komutunu kullanarak (sonunda .py yazmadan) bu modülün içindeki bütün komutların erişilmesini sağlarız.
1 2 |
>>> import modul_1 Modül 1 çalıştırıldı |
Burada dosyayı nereye kaydettiğiniz önemli. modul_1.py ile bu modülü kullanacağımız dosya aynı dizinde olması gerekmektedir. Bunu yapmak çok önemli, aksi halde kodumuz hata verir.
Modülü “import” etmekle yeni bir isim alanı yaratmış oldunuz. Modülde tanımlanan isimlere erişmek için nokta kullanılır.
1 2 3 4 5 6 |
>>> print(modul_1.x) 2 >>> print(modul_1.a(5)) 25 >>> print(modul_1.b()) Merhaba Dünya |
Modül yüklemenin bir başka yolu ile from …. import ….. şeklindedir. Bu modülden sadece belli isimleri ana isim alanına yüklemek için kullanılır. O zaman seçilen isimlere nokta işlemi olmadan doğrudan erişebiliriz.
1 2 3 4 5 6 7 8 |
>>> from modul_1 import x,a >>> print(x, a(5)) 5 25 >>> b() Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> g() NameError: name 'b' is not defined |
Modüldeki bütün isimleri ana isim alanına aktarmak için from modul_1 import * komutu verilebilir. Ancak, modül içindeki nesnelere verdiğiniz isimler daha önce tanımlanmış isimlerin yerine geçebilir.
1 2 3 4 5 6 7 |
>>> def g(): print("Selam Dünya") >>> b() Selam Dünya >>> from modul_1 import * >>> b() Merhaba Dünya |
Modül ismini her seferinde uzun uzun yazmak epeyce zahmetli olabilir, ve kodun okunaklılığını azaltır. Python’un as kelimesi ile modüle daha kısa bir isim atayabiliriz.
1 2 3 4 |
>>> import modul_1 as md Modül 1 çalıştırıldı. >>> print(md.x, md.a(3)) 5 9 |
Modül Oluşturma:
Aslında .py uzantılı her dosya bir modül olduğundan yukarıda bahsetmiştik. Bu modülleri import ile çalıştırmakta olduğumuz dosyayı ekleyebiliriz. İçeri aktardığımız py dosyasındaki değişkenler, sabitler, fonksiyonlar ve sınıflar erişebilir hale gelirler. Doğrudan ulaşılabilir modüller için ek bir işleme gerek yoktur. Siz de kendi modüllerinizi kolayca oluşturup kullanabilirsiniz. Eğer alt-modüllere ihtiyacınız var ise o zaman bir paket yapısından yararlanmak gerekir.
Paketler
Paketler modül, alt-paket, alt-alt paket içeren hiyerarşik dizin yapılardır. Bir paket dizini, içi boş bile olsa mutlaka __init__.py isimli bir dosya içerir. Bu dosyada hangi modüllerin API olarak kullanımına izin verileceği, hangilerinin yerel kalacağı gibi bilgiler yer alır. Ama, ilk etapta biz içini boş bırakacağız.
Hadi şimdi bir örnek yapalım. my_module isimli bir dizin ve içinde üç dosya yaratalım: module_x, module_y, ve __init__.py. __init__.py dosyasının içi boş kalıcak. Dosyanın görevi o dizinin bir paket olduğunu yorumlayıcıya bildirmektir. İlk iki dosyanın içeriği şöyle olsun:
module_x:
1 2 3 4 5 6 |
# module_x.py print("Welcome to module") pi = 3.14159 def area(r): return pi*(r**2) |
module_y:
1 2 3 4 5 6 |
# module_y.py print ("Welcome to module") pi = 3.14159 def perimeter(r): return 2*pi*r |
Şimdi modülleri yükleyelim:
1 2 3 4 |
>>> import my_module.module_x Welcome to module >>> my_module.module_x.pi 3.14159 |
Diğer bir yükleme şekline göz atalım:
1 2 3 4 5 |
>>> from my_module import module_y >>> module_y.pi 3.14159 >>> module_y.perimeter(2) 12.56636 |
Üst dizin altında başka alt dizinler yaratarak daha da dallanıp budaklanan bir paket hiyerarşisi yaratabiliriz. Her alt dizinin içinde kendisine ait bir __init__.py dosyası bulunmalı (unutmayın içi boş olabilir). Nokta işlemini uygulayarak alt paketlere ulaşılır.
Bu yazıda işlediğimiz kodlara bu linkteki Github reposundan ulaşabilirsiniz.
Bu bölümde Python programlama dilinde modüller ve paketleri gördük. Umarım beğenmişsinizdir. Vakit ayırıp okuduğunuz için teşekkür ederim. Python programlama eğitim serimiz boyunca yazdığımız tüm kodlara erişmek için bu linke tıklamanız yeterlidir.
Kaynaklar:
- https://docs.python.org/3/tutorial/modules.html
- https://pybilim.wordpress.com/2013/10/21/moduller-ve-paketler/