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.