Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

Modüller ve Paketler


Programlamada, bir modül belirli bir işlevselliğe sahip bir yazılım parçasıdır. Örneğin, bir masa tenisi oyunu yaparken, bir modül oyun mantığını yönetirken diğer bir modül oyunu ekranda çizer. Her modül, ayrı ayrı düzenlenebilecek farklı bir dosyadan oluşur.

Modüller yazma

Python'da modüller, .py uzantılı Python dosyalarıdır. Modülün adı, dosya adı ile aynıdır. Bir Python modülü, tanımlanmış ve uygulanmış bir dizi işlev, sınıf veya değişken içerebilir. Yukarıdaki örnek iki dosya içerir:

mygame/

  • mygame/game.py

  • mygame/draw.py

Python betiği game.py, oyunu uygular. draw.py dosyasından draw_game fonksiyonunu kullanır; başka bir deyişle, oyunu ekranda çizmek için mantığı uygulayan draw modülü.

Modüller diğer modüllerden import komutu kullanılarak içe aktarılır. Bu örnekte, game.py betiği şöyle görünebilir:

game.py modülü draw modülünü içe aktarır ve bu sayede bu modülde uygulanmış işlevleri kullanabilir. main fonksiyonu, oyunu çalıştırmak için yerel fonksiyon play_game fonksiyonunu kullanır ve ardından draw modülünde draw_game adlı bir işlev kullanarak oyunun sonucunu çizer. draw modülünden draw_game işlevini kullanabilmek için, işlevin hangi modülde uygulandığını belirtmek üzere nokta operatörünü kullanmamız gerekir. game modülünden draw_game fonksiyonunu referans almak için, draw modülünü içe aktarmamız ve ardından draw.draw_game() çağırmamız gerekir.

import draw direktifi çalıştırıldığında, Python yorumlayıcısı, modül adı ve .py eki olan bir dosyayı, betiğin çalıştırıldığı dizinde arar. Bu durumda draw.py dosyasını arayacaktır. Bulunursa, içe aktarılacaktır. Bulunamazsa, gömülü modülleri aramaya devam edecektir.

Modül içe aktarılırken bir .pyc dosyası oluşturulduğunu fark etmiş olabilirsiniz. Bu, derlenmiş bir Python dosyasıdır. Python, dosyaları Python bayt koduna derlerlikle dosyalar her yüklendiğinde dosyaları analiz etmesi gerekmez. .pyc dosyası varsa, .py dosyasının yerine yüklenir. Bu işlem kullanıcıya şeffaftır.

Modül nesnelerini mevcut isim alanına aktarma

Bir isim alanı, her nesnenin adlandırıldığı ve Python'da erişilebileceği bir sistemdir. from komutunu kullanarak draw_game fonksiyonunu ana betiğin isim alanına aktarırız.

Bu örnekte, modülün adı draw_game fonksiyonu öncelik etmiyor, çünkü modül adını import komutuyla belirtmiştik.

Bu notasyonun avantajı, modülü tekrar tekrar referans almanız gerekmediğidir. Ancak, bir isim alanı aynı ada sahip iki nesneye sahip olamaz; bu yüzden import komutu, isim alanında mevcut olan bir nesnenin yerini alabilir.

Tüm modül nesnelerini aktarma

Bir modüldeki tüm nesneleri içe aktarmak için import * komutunu kullanabilirsiniz:

Bu biraz riskli olabilir çünkü modüldeki değişiklikler içe aktarıldığı modülü etkileyebilir, ancak daha kısadır ve modülden hangi nesneleri içe aktarmak istediğinizi belirtmenizi gerektirmez.

Özel içe aktarma adı

Modüller istediğiniz herhangi bir ad altında yüklenebilir. Bu, koşullu bir modül içe aktarıldığında kodun geri kalanında aynı adı kullanabilmek için faydalıdır.

Örneğin, isimleri biraz farklı olan iki draw modülüne sahipseniz, aşağıdaki gibi yapabilirsiniz:

Modül başlatma

Bir modül ilk kez çalışan bir Python betiğine yüklendiğinde, modüldeki kodu bir kez çalıştırarak başlatılır. Kodunuzdaki başka bir modül aynı modülü tekrar içe aktarsa bile, tekrar yüklenmeyecektir; bu yüzden modüldeki yerel değişkenler "tekil" olarak davranır, yani yalnızca bir kez başlatılırlar.

Bu durumu, nesneleri başlatmak için kullanabilirsiniz. Örneğin:

Yerel ekran elemanını bu modül içinde başlatabilirsiniz.

Modül yükleme yolunu genişletme

Python yorumlayıcısına, varsayılan yerel dizin ve yerleşik modüllerin dışında, modülleri nerede arayacaklarını söylemenin birkaç yolu vardır. Ek dizinleri modüllerin aranacağı yerlere belirtmek için PYTHONPATH çevre değişkenini kullanabilirsiniz:

Bu, game.py dosyasını çalıştırır ve betiğin foo dizininden ve yerel dizinden modülleri yüklemesini sağlar.

sys.path.append fonksiyonunu da kullanabilirsiniz. Bunu import komutunu çalıştırmadan önce çalıştırın:

Artık foo dizini modüllerin arandığı yolların listesine eklendi.

Yerleşik modülleri keşfetme

Python standart kütüphanesindeki yerleşik modüllerin tam listesine buradan göz atabilirsiniz.

Python'da modülleri keşfederken çok kullanışlı iki işlev vardır - dir ve help işlevleri.

URLs'den veri okumamıza olanak tanıyan urllib modülünü içe aktarmak için modülü import ederiz:

Her modülde hangi işlevlerin uygulandığını dir fonksiyonunu kullanarak arayabiliriz:

Modülde kullanmak istediğimiz işlevi bulduğumuzda, Python yorumlayıcısını kullanarak help fonksiyonu ile hakkında daha fazla bilgi okuyabiliriz:

Paket yazma

Paketler, birden fazla paket ve modül içeren isim alanlarıdır. Sadece dizinlerdir, ancak belirli gereksinimleri vardır.

Python'daki her paket, __init__.py adlı özel bir dosya içermesi gereken bir dizindir. Bu dosya, boş olabilir, dizinin bir Python paketi olduğunu belirtir. Bu şekilde, bir modül ile aynı şekilde içe aktarılabilir.

foo adlı bir dizin oluşturursak, bu paket adını belirtir, ardından bu paket içinde bar adlı bir modül oluşturabiliriz. foo dizinine __init__.py dosyasını ekleyin.

bar modülünü kullanmak için, iki şekilde içe aktarabiliriz:

İlk örnekte, bar modülüne her eriştiğimizde foo ön ekini kullanmak zorundayız. İkinci örnekte, buna gerek yoktur, çünkü modülü modülümüzün isim alanına içe aktardık.

__init__.py dosyası, diğer modülleri iç modüller olarak tutarken paketin API'si olarak hangi modülleri dışa aktardığını __all__ değişkenini geçersiz kılarak da belirleyebilir:

__init__.py:

__all__ = ["bar"]

Egzersiz

Bu egzersizde, re modülünde 'find' kelimesini içeren tüm işlevlerin alfabetik olarak sıralanmış bir listesini yazdırın.

import re # Your code goes here find_members = [] import re # Your code goes here find_members = [] for member in dir(re): if "find" in member: find_members.append(member) print(sorted(find_members)) test_object('find_members') success_msg('Great work!')

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Next Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy