Python - Modüller
Bir modül, Python kodunuzu mantıksal olarak düzenlemenizi sağlar. İlgili kodu bir modülde gruplamak, kodun anlaşılmasını ve kullanılmasını kolaylaştırır. Bir modül, bağlayabileceğiniz ve referans verebileceğiniz, keyfi olarak adlandırılmış özniteliklere sahip bir Python nesnesidir.
Basitçe, bir modül Python kodundan oluşan bir dosyadır. Bir modül, fonksiyonları, sınıfları ve değişkenleri tanımlayabilir. Bir modül ayrıca çalıştırılabilir kod içerebilir.
Misal
Aname adlı bir modülün Python kodu normalde aname.py adlı bir dosyada bulunur . İşte basit bir modül örneği, support.py
def print_func( par ):
print "Hello : ", par
return
ithalat Beyanı
Herhangi bir Python kaynak dosyasını, başka bir Python kaynak dosyasında bir içe aktarma ifadesi çalıştırarak modül olarak kullanabilirsiniz. İthalat sözdizimi aşağıdaki gibidir -
import module1[, module2[,... moduleN]
Yorumlayıcı bir import ifadesiyle karşılaştığında, modül arama yolunda mevcutsa modülü içe aktarır. Arama yolu, yorumlayıcının bir modülü içe aktarmadan önce aradığı dizinlerin bir listesidir. Örneğin, support.py modülünü içe aktarmak için, komut dosyasının en üstüne aşağıdaki komutu koymanız gerekir -
#!/usr/bin/python
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Zara")
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
Hello : Zara
Bir modül, içe aktarılma sayısından bağımsız olarak yalnızca bir kez yüklenir. Bu, birden fazla içe aktarım meydana gelirse modül yürütmesinin tekrar tekrar yapılmasını engeller.
From ... import Bildirimi
Python'un from ifadesi, bir modülden belirli nitelikleri mevcut ad alanına aktarmanıza izin verir. Dan ... ithalat sözdizimi aşağıdaki gibidir -
from modname import name1[, name2[, ... nameN]]
Örneğin, fibonacci fonksiyonunu fib modülünden içe aktarmak için aşağıdaki ifadeyi kullanın -
from fib import fibonacci
Bu ifade, fib modülünün tamamını mevcut isim alanına aktarmaz; sadece modül fib'den gelen öğe fibonacci'yi içe aktaran modülün global sembol tablosuna sokar.
From ... import * Bildirimi
Aşağıdaki import ifadesini kullanarak bir modüldeki tüm adları mevcut ad alanına içe aktarmak da mümkündür -
from modname import *
Bu, bir modüldeki tüm öğeleri geçerli ad alanına aktarmanın kolay bir yolunu sağlar; ancak bu ifade idareli kullanılmalıdır.
Modülleri Yerleştirme
Bir modülü içe aktardığınızda, Python yorumlayıcısı modülü aşağıdaki dizilerde arar -
Geçerli dizin.
Modül bulunamazsa, Python daha sonra her bir dizini PYTHONPATH kabuk değişkeninde arar.
Her şey başarısız olursa, Python varsayılan yolu kontrol eder. UNIX'te bu varsayılan yol normalde / usr / local / lib / python / şeklindedir.
Modül arama yolu, sistem modülü sys'de sys.pathdeğişken. Sys.path değişkeni, geçerli dizini, PYTHONPATH'ı ve kuruluma bağlı varsayılanı içerir.
PYTHONPATH Değişken
PYTHONPATH, bir dizin listesinden oluşan bir ortam değişkenidir. PYTHONPATH'ın sözdizimi, PATH kabuk değişkeninin sözdizimi ile aynıdır.
İşte bir Windows sisteminden tipik bir PYTHONPATH -
set PYTHONPATH = c:\python20\lib;
Ve işte bir UNIX sisteminden tipik bir PYTHONPATH -
set PYTHONPATH = /usr/local/lib/python
Ad Alanları ve Kapsam Belirleme
Değişkenler, nesnelerle eşleşen adlardır (tanımlayıcılar). Bir ad değişken isimleri (anahtar) ve bunlara karşılık gelen nesneler (değerler) bir sözlüktür.
Bir Python ifadesi, yerel bir ad alanındaki ve genel ad alanındaki değişkenlere erişebilir . Bir yerel ve bir global değişken aynı ada sahipse, yerel değişken global değişkeni gölgeler.
Her işlevin kendi yerel ad alanı vardır. Sınıf yöntemleri, sıradan işlevlerle aynı kapsam kuralını izler.
Python, değişkenlerin yerel mi yoksa küresel mi olduğuna dair eğitimli tahminler yapar. Bir işleve bir değer atanan herhangi bir değişkenin yerel olduğunu varsayar.
Bu nedenle, bir fonksiyondaki global değişkene bir değer atamak için önce global ifadeyi kullanmalısınız.
Global VarName ifadesi Python'a VarName'in global bir değişken olduğunu söyler. Python, değişken için yerel ad alanını aramayı durdurur.
Örneğin , global isim alanında bir Money değişkeni tanımlıyoruz . Money işlevi içinde Money'ye bir değer atarız , bu nedenle Python Money'yi yerel bir değişken olarak kabul eder . Ancak, Money yerel değişkeninin değerine onu ayarlamadan önce eriştik, bu nedenle sonuç UnboundLocalError oldu. Global ifadenin yorumunu kaldırmak sorunu çözer.
#!/usr/bin/python
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money
Dir () İşlevi
Dir () yerleşik işlevi, bir modül tarafından tanımlanan adları içeren sıralı bir dizge listesi döndürür.
Liste, bir modülde tanımlanan tüm modüllerin, değişkenlerin ve işlevlerin adlarını içerir. Aşağıdaki basit bir örnektir -
#!/usr/bin/python
# Import built-in module math
import math
content = dir(math)
print content
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan',
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',
'sqrt', 'tan', 'tanh']
Burada, __name__ özel dize değişkeni modülün adıdır ve __file__ , modülün yüklendiği dosya adıdır .
Globaller () ve yerliler () Fonksiyonlar
Globaller () ve yerliler () fonksiyonları da denir yerden yere bağlı olarak küresel ve yerel ad alanlarında isimlerini döndürmek için kullanılabilir.
Locals () bir işlevin içinden çağrılırsa, o işlevden yerel olarak erişilebilen tüm isimleri döndürür.
Globals () bir işlevin içinden çağrılırsa, o işlevden global olarak erişilebilen tüm isimleri döndürür.
Bu iki işlevin de dönüş türü sözlüktür. Bu nedenle, isimler keys () fonksiyonu kullanılarak çıkarılabilir.
Yeniden () Fonksiyonu
Modül bir komut dosyasına aktarıldığında, bir modülün en üst düzey kısmındaki kod yalnızca bir kez yürütülür.
Bu nedenle, bir modüldeki en üst düzey kodu yeniden çalıştırmak istiyorsanız, reload () işlevini kullanabilirsiniz. Reload () işlevi, önceden alınmış bir modülü tekrar içe aktarır. Reload () fonksiyonunun sözdizimi şudur -
reload(module_name)
Burada modül_adı , modül adını içeren dizge değil, yeniden yüklemek istediğiniz modülün adıdır. Örneğin, merhaba modülünü yeniden yüklemek için aşağıdakileri yapın -
reload(hello)
Python'daki Paketler
Paket, modüller, alt paketler ve alt paketler vb. İçeren tek bir Python uygulama ortamını tanımlayan hiyerarşik bir dosya dizini yapısıdır.
Telefon dizininde bulunan bir Pots.py dosyasını düşünün . Bu dosya aşağıdaki kaynak kod satırına sahiptir -
#!/usr/bin/python
def Pots():
print "I'm Pots Phone"
Benzer şekilde, yukarıdaki ile aynı ada sahip farklı işlevlere sahip iki dosyamız daha var -
Isdn () işlevine sahip Telefon / Isdn.py dosyası
G3 () işlevine sahip telefon / G3.py dosyası
Şimdi, Telefon dizininde bir tane daha __init__.py dosyası oluşturun -
- Phone/__init__.py
Telefonu içe aktardığınızda tüm işlevlerinizi kullanılabilir kılmak için, __init__.py içine aşağıdaki gibi açık içe aktarma ifadeleri koymanız gerekir -
from Pots import Pots
from Isdn import Isdn
from G3 import G3
Bu satırları __init__.py'ye ekledikten sonra, Telefon paketini içe aktardığınızda bu sınıfların tümüne sahip olursunuz.
#!/usr/bin/python
# Now import your Phone Package.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone
Yukarıdaki örnekte, her dosyada tek bir işlev örneği aldık, ancak dosyalarınızda birden çok işlevi tutabilirsiniz. Ayrıca bu dosyalarda farklı Python sınıfları tanımlayabilir ve ardından bu sınıflardan paketlerinizi oluşturabilirsiniz.