Python'daki modüller nelerdir?
Modül, python kodlu bir dosyadır. Kod değişkenler, işlevler veya tanımlanmış sınıf biçiminde olabilir. Dosya adı modül adı olur.
Örneğin, dosya adınız guru99.py ise, modül adı guru99 olacaktır . Modül işlevselliğiyle, her şeyi tek bir dosyaya yazmak yerine kodunuzu farklı dosyalara bölebilirsiniz.
Bu eğitimde şunları öğreneceksiniz:
- Python'daki modüller nelerdir?
- Python içe aktarma modülü
- Python'da bir modül nasıl oluşturulur ve içe aktarılır?
- Python'da Sınıf İçe Aktarma
- Modülünü içe aktarmak için kaynağından kullanma
- Her şeyi modülden içe aktarma
- İçe aktarma modülünü kullanma
- İçe aktarımı kullanma *
- Dir () işlevi
- Paketler
- PythonModuleSearchPath
- İçe aktarmada modül takma adını kullanma
- Python'da Mutlak ve Göreli İthalat
- UsingAbsoluteImports
- Göreli İthalat Kullanma
Python içe aktarma modülü nedir?
Bir dosya python'da bir modül olarak kabul edilir. Modülü kullanmak için , import anahtar sözcüğünü kullanarak içeri aktarmanız gerekir . Dosyanın içinde bulunan işlev veya değişkenler, modülü içe aktararak başka bir dosyada kullanılabilir. Bu işlevsellik, typcript, JavaScript, java, ruby vb. Gibi diğer dillerde mevcuttur.
Python'da bir modül nasıl oluşturulur ve içe aktarılır?
Şimdi bir modül oluşturup başka bir dosyaya aktaracağız.
Ekran görüntüsünde gösterildiği gibi modülü oluşturma ve içe aktarma akışı şu şekildedir:
Python'da bir modül oluşturmak için verilen adımları izleyin.
Kodu test etmek için kullanılan klasör yapısı aşağıdaki gibidir:
modtest/test.pydisplay.py
Adım 1) Bir dosya oluşturun ve test.py olarak adlandırın
Adım 2) test.py içinde display_message () adında bir işlev oluşturun
Def display_message():return "Welcome to Guru99 Tutorials!"
Adım 3) Şimdi başka bir display.py dosyası oluşturun.
Adım 4) Display.py içinde moduletest.py dosyasını aşağıda gösterildiği gibi içe aktarın:
import test
İçe aktarırken, test.py'den bahsetmek zorunda değilsiniz, sadece dosyanın adını belirtmek zorundasınız.
Adım 5)
Daha sonra display.py içinde test.py'den display_message () fonksiyonunu çağırabilirsiniz, module_name.function_name'i kullanmanız gerekir.
Örneğin test.display_message ().
Import testprint(test.display_message())
Adım 6)
Display.py'yi çalıştırdığınızda, aşağıdaki çıktıyı alacaksınız:
Welcome to Guru99 Tutorials!
Python'da Sınıf İçe Aktarma
Daha önce, bir işlevi olan basit bir modül görmüştük. Burada bir sınıf oluşturacak ve sınıfa başka bir dosya içinde başvuracaktır.
Kodu test etmek için klasör yapısı aşağıdaki gibidir:
myproj/Car.pydisplay.py
Aşağıdaki kodla Car.py adlı bir dosya oluşturun:
Dosya adı: Car.py
class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef car_details(self):print("Car brand is ", self.brand_name)print("Car model is ", self.model)print("Car manufacture year is ", self.manu_year)def get_Car_brand(self):print("Car brand is ", self.brand_name)def get_Car_model(self):print("Car model is ", self.model)
Car.py dosyasında marka_adı, model ve manu_year nitelikleri vardır. Sınıf içinde tanımlanan işlevler car_details (), get_Car_brand (), get_Car_model () 'dir.
Şimdi Car.py dosyasını display.py adlı başka bir dosyada modül olarak kullanalım.
Dosya adı: display.py
import Carcar_det = Car.Car("BMW","Z5", 2020)print(car_det.brand_name)print(car_det.car_details())print(car_det.get_Car_brand())print(car_det.get_Car_model())
Çıktı:
BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5
Böylece Car.py'deki tüm değişkenlere ve işlevlere Car modülünü kullanarak erişebiliriz.
Modülünü içe aktarmak için kaynağından kullanma
Modülün yalnızca küçük bir bölümünü, yani tam kodu içe aktarmak yerine modülden yalnızca gerekli işlevleri ve değişken adlarını içe aktarabilirsiniz.
Yalnızca belirli şeylerin içe aktarılmasını istediğinizde, istediğiniz şeyi içe aktarmak için "from" anahtar sözcüğünü kullanabilirsiniz.
Yani sözdizimi
from module import your function_name , variables,… etc.
Kodu test etmek için kullanılan klasör yapısı aşağıdaki gibidir:
modtest/test.pydisplay.py
Test.py'de gösterildiği gibi 2 işlev vardır:
Dosya adı: test.py
defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Şimdi display_message () işlevini istiyorsunuz. İçe aktardığınız işleve veya değişkene aşağıda gösterildiği gibi doğrudan erişilebilir:
Dosya Adı: display.py
from test import display_messageprint(display_message())
Çıktı:
Welcome to Guru99 Tutorials!
Şimdi, display_message1 () işlevini kullanırsanız, işlevin aşağıda gösterildiği gibi tanımlanmadığına dair bir hata atacaktır:
from test import display_messageprint(display_message1())
Çıktı:
Traceback (most recent call last):File "display.py", line 3, inprint(display_message1())Name Error: name 'display_message1' is not defined
Her şeyi modülden içe aktarma
İçe aktarma, içe aktarmayı ve ardından modül adını, yani kullanılacak dosya adını veya kitaplığı kullanarak tam modülü içe aktarmanıza izin verir.
Sözdizimi:
Import module
Veya kullanarak
from module import *
Kodu test etmek için kullanılan klasör yapısı aşağıdaki gibidir:
modtest/test.pydisplay.py
Test.py içindeki kod ayrıntıları aşağıdadır
my_name = "Guru99"my_address = "Mumbai"defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
İçe aktarma modülünü kullanma
Modülün içindeki değişkenlere ve işlevlere atıfta bulunmak için sadece içe aktar modül adını kullanarak, modül adını önek olarak almalıdır.
Misal
Dosya adı: display.py
Import testprint(test.display_message())print(test.display_message1())print(test.my_name)print(test.my_address)
Modül adı testi, modül testindeki işlev ve değişkenlere atıfta bulunmak için kullanılır.
Çıktı:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
İçe aktarımı kullanma *
Import * kullanan bir örnek görelim . Kullanma import * Örneğin aşağıda gösterildiği gibi, fonksiyonlar ve değişkenler, doğrudan erişilebilir:
from test import *print(display_message())print(display_message1())print(my_name)print(my_address)
Çıktı:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Dir () işlevi
Dir (), python'da yerleşik bir işlevdir. Dir (), verilen nesnenin yerleşik özellikleri dahil tüm özellikleri ve yöntemleri döndürür.
Yani modülde dir () kullanıldığında, size modülün içinde bulunan değişkenleri, fonksiyonları verecektir.
İşte bir modül üzerinde çalışan bir dir () örneği. Car.py adında bir sınıfımız var, çıktısını görmek için Car'ı içe aktaralım ve dir () 'e atayalım.
Kodu test etmek için klasör yapısı aşağıdaki gibi olacaktır:
test prop/Car.pytest.py
Dosya adı: Car.py
class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef car_details(self):print("Car brand is ", self.brand_name)print("Car model is ", self.model)print("Car manufacture year is ", self.manu_year)def get_Car_brand(self):print("Car brand is ", self.brand_name)def get_Car_model(self):print("Car model is ", self.model)
Dosya adı: test.py
import Carclass_contents = dir(Car)print(class_contents)
Çıktı bize sınıfın adını ve Car.py'de tanımlanan tüm işlevleri verir.
Python'da bulunan yerleşik bir modülde dir () kullanmayı da deneyebilirsiniz. Aşağıdaki örnekte gösterildiği gibi json modülünde de aynısını deneyelim . Json modülünde bulunan tüm özellikleri ve yöntemleri gösterecektir .
Import jsonjson_details = dir(json)print(json_details)
Çıktı:
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
Paketler
Bir paket, içinde tanımlanmış tüm modüllerin bulunduğu bir dizindir. Bir Python yorumlayıcısının onu bir paket olarak işlemesini sağlamak için dizininizin init.pyfile dosyasına sahip olması gerekir. İnit.py, dizini bir paket haline getirir. İşte üzerinde çalışacağımız paketin düzeni.
Paketin adı benim paketimdir . Paketle çalışmaya başlamak için package / adlı bir dizin oluşturun. Dizinin içinde __init__.py adında boş bir dosya oluşturun. Module1.py, module2.py ve module3.py olmak üzere 3 dosya daha oluşturun ve ekran görüntüsünde gösterildiği gibi işlevleri tanımlayın. Module1.py, module2.py ve module3.py'nin ayrıntıları burada verilmiştir
module1.py
def mod1_func1():print("Welcome to Module1 function1")def mod1_func2():print("Welcome to Module1 function2")def mod1_func3():print("Welcome to Module1 function3")
module2.py
def mod2_func1():print("Welcome to Module2 function1")def mod2_func2():print("Welcome to Module2 function2")def mod2_func3():print("Welcome to Module2 function3")
module3.py
def mod3_func1():print("Welcome to Module3 function1")def mod3_func2():print("Welcome to Module3 function2")def mod3_func3():print("Welcome to Module3 function3")
Paket kullanıma hazır. Şimdi, dosyanızdan herhangi birinin içindeki paketi aşağıda gösterildiği gibi arayın: test.py:
Burada, mypackage.module1 içe aktarılır ve mod1 olarak bir takma ad verilir. Benzer şekilde, benim paketimden module2.py ve module3.py diğer modülleri kullanabilirsiniz.
import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())
Çıktı:
Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None
Paketi, içinde fonksiyonlar bulunan basit bir modülle birlikte gösterdik. Projenize göre alt paketler ile de paketleyebilirsiniz. Alt klasörler / tanımlanmış sınıflara sahip modüller.
Python Modülü Arama Yolu
Yürütme sırasında, python içe aktarma modül adıyla karşılaştığında , yorumlayıcı modülü bulmaya çalışır. Yerleşik modül listesinde modülü arar. Daha sonra sys.path içinde tanımlanmış dizinler.
Özetlemek gerekirse, yorumlayıcı modülü bulmak için aşağıdaki aramayı yapar:
- Mevcut dizininizde.
- Yerleşik modül listesinde
- Sys.path dizinlerinin içinde
Sys modülünü içe aktararak ve sys.path yazdırarak sys.path detaylarını alabilirsiniz. Size aşağıda gösterildiği gibi dizinlerin listesini verecektir:
importsysprint(sys.path)
Çıktı:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\DLLs']
Ayrıca yolu değiştirebilir ve dizinleri gereksinimlerinize göre saklayabilirsiniz.
İçe aktarmada modül takma adını kullanma
Modül adını, bir takma ad vererek daha kısa bir forma da dönüştürebilirsiniz. Takma ad, anahtar kelime kullanılarak yapılabilir.
Sözdizimi:
import filename as alias name
Kodu test etmek için klasör yapısı aşağıdaki gibi olacaktır:
Mod test/test.pydisplay.py
Test.py içindeki kod aşağıdadır
my_name = "Guru99"my_address = "Mumbai"def display_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Şimdi display.py'de test.py için bir takma ad kullanacak
Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)
Test modülü için kullanılan diğer ad t'dir. Bu nedenle, test.py'deki işlev ve değişkenler t takma adı kullanılarak belirtilebilir.
Çıktı:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Python'da Mutlak ve Göreli İthalat
Artık bir dosyayı başka bir dosyanın içinde bir modül olarak nasıl içe aktaracağınızı biliyorsunuz. Şimdi klasörlerde bulunan dosyaların nasıl yönetileceğini görelim. Klasörlerdeki dosyalar, mutlak veya göreli içe aktarmalar kullanılarak içe aktarılabilir.
Aşağıda gösterildiği gibi proje klasör yapınıza sahip olduğunuzu düşünün:
Kök klasör benim projem /. İki alt klasörü vardır package1 ve package2.
Package1 klasörünün module1.py ve module2.py olmak üzere iki modülü vardır.
Package2 klasöründe bir sınıf myclass.py, module3.py ile bir alt paket alt paket ve son module4.py bulunur.
- Module1.py'de, myfunc1 adında bir işlev vardır.
- Module2.py'de, myfunc2 adında bir işlev vardır.
- Module3.py'de, işlevim3 adında bir işlev vardır.
- Module4.py'de, işlevim4 adında bir işlev vardır.
Mutlak İçe Aktarmaları Kullanma
Mutlak içe aktarmalar için, modülünüzün tüm yolunu doğrudan proje kök klasöründen eklemeniz gerekir.
Şimdi, modüllerin her birinde bulunan işlevlere başvurmak için mutlak içe aktarmalardan nasıl yararlanılacağını görelim.
Myfunc1 işleviyle çalışmak için, aşağıdaki şekilde içe aktarmanız gerekir:
from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()
Myfunc3 işleviyle çalışmak için aşağıdaki şekilde içe aktarmanız gerekir:
from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()
Mutlak ithalat kullanmanın avantajları ve dezavantajları
Mutlak ithalat kullanmanın avantajları şunlardır:
- Kod kontrolü için modülleri geriye doğru izlemek kolay hale gelir.
- Kullanımı kolay ve çok anlaşılır.
- Proje farklı bir yola taşınırsa, yine de ithalatlar aynı kalacaktır.
Mutlak ithalat kullanmanın dezavantajları
Mutlak ithalatı kullanmanın dezavantajları şunlardır:
Dezavantajları:
- İçe aktarma yolu, bu durumda çok uzun olabilir, modüller yuvalanır ve modüllerin adı uzunsa.
Göreli İthalatları Kullanma
Aşağıda belirtilen aynı klasör yapısını göz önünde bulundurarak, göreli içe aktarmaları kullanarak aynı şeyi nasıl içe aktaracağımızı göreceğiz.
Göreli içe aktarmada, içe aktarılacak modül, içe aktarım ifadesinin mevcut olduğu konum olan geçerli konuma bağlıdır.
Sözdizimi:
Göreli ithalat olarak, kullanmakta aktarırken modül adından önce bir nokta (.) Eklemek gerekir dan .
Modül, mevcut konumdan bir seviye üstteyse, modül adından önce 2 nokta (…) olacaktır.
Yukarıda bahsedilen klasör yapısı şekline atıfta bulunarak, bakmamız gereken aşağıdaki işlevlere sahip modüllerimiz var.
- Module1.py'de, myfunc1 adında bir işlev vardır.
- Module2.py'de, myfunc2 adında bir işlev vardır.
- Module3.py'de, işlevim3 adında bir işlev vardır.
- Module4.py'de, işlevim4 adında bir işlev vardır.
Myfunc1 işleviyle çalışmak için aşağıdaki şekilde içe aktarmanız gerekir:
from .module1 import myfunc1
Myfunc3 işleviyle çalışmak için, aşağıdaki şekilde içe aktarmanız gerekir:
from .subpkg.module3 import myfunc3
Göreli İthalatın Avantajları
Avantajlar:
- Göreli ithalatlarla çalışmak kolaydır.
- Mevcut konumdan, ithalat mutlak ithalata göre kısaltılabilir.
Göreli İthalatın Dezavantajları
Dezavantajları:
- Göreli içe aktarımları kullanarak, kodun bulunduğu yeri geriye doğru izlemek zordur
Özet:
- Python'da içe aktarma, koda, yani başka bir dosyada yazılan .fonksiyonlara / nesnelere başvurmanıza yardımcı olur. Ayrıca pip (python paket yöneticisi) kullanılarak kurulan python kitaplıklarını / paketlerini içe aktarmak için kullanılır ve daha sonra kodunuzda kullanmanız gerekir.
- İçe aktarma işlevi, typecript, JavaScript, java, ruby vb. Gibi diğer dillerde mevcuttur.
- Bir modül python, dosyanın içine yazılan koddur, örneğin (test.py). Dosyanızın içinde değişkenlerinizi, işlevlerinizi veya sınıfınızı tanımlayabilirsiniz. Dosyanın tamamı bir modül haline gelir ve koda başvurmak için başka bir dosyanın içine aktarılabilir.
- Modül işlevselliğiyle, her şeyi tek bir dosyaya yazmak yerine kodunuzu farklı dosyalara bölebilirsiniz. Daha sonra, içe aktarmayı kullanarak, ihtiyacınız olan dosyanın içindeki koda başvurabilirsiniz.
- Python'un yerleşik modülleri vardır ve ayrıca bir python paket yöneticisi (pip) kullanılarak kurulan harici kitaplıklar / paketler, örneğin pandalar, NumPy, vb. Modüller olarak adlandırılır.
- Modülün yalnızca küçük bir bölümünü, yani tam kodu içe aktarmak yerine modülden yalnızca gerekli işlevleri ve değişken adlarını içe aktarabilirsiniz.
- Modül adını, bir takma ad vererek daha kısa bir forma da dönüştürebilirsiniz. Takma ad, anahtar kelime kullanılarak yapılabilir.
- Bir paket, içinde tanımlanmış tüm modüllerin bulunduğu bir dizindir. Bir Python yorumlayıcısının onu bir paket olarak işlemesini sağlamak için dizininizin __init.pyfile dosyasına sahip olması gerekir. İnit.py, dizini bir paket haline getirir. İşte üzerinde çalışacağımız paketin düzeni.
- Yürütme sırasında, python içe aktarma modül adıyla karşılaştığında , yorumlayıcı modülü bulmaya çalışır. Yerleşik modül listesinde modülü arar. Daha sonra sys.path içinde tanımlanmış dizinler.
- Mutlak içe aktarmalar için, modülünüzün tüm yolunu doğrudan proje kök klasöründen eklemeniz gerekir.
- Göreli içe aktarmada, içe aktarılacak modül, içe aktarım ifadesinin mevcut olduğu konum olan geçerli konuma bağlıdır.