İşlev tanımlarının yanısıra modül içinde çalıştırılabilir ifadeler de
olabilir. Bu ifadeler modülün ilk kullanıma hazırlanması için
kullanılabilirler ve sadece modülün ilk yüklenişinde çalışırlar.
[87]
Her modülün o modül içindeki bütün işlevler tarafından global simge
tablosu olarak kullanılan kendi simge tablosu vardır. Bu özellik
sayesinde modülü yazan kişi rahatlıkla modül içnde global değişkenler
kullanabilir. Modülü kullanan diğer kişilerin global değişkenleri ile
isim çakışması olmaz. Modül içindeki global değişkenlere de
modulAdi.degiskenAdi şeklinde ulaşmak ve istenirse
bunları değiştirmek mümkündür.
Modüller diğer modülleri yükleyebilirler. Bütün import
ifadelerinin modülün (ya da betiğin) başına konması gelenektendir; ancak
şart değildir. Yüklenen modüller kendilerini yükleyen modülün global simge
tablosuna ekleniriler.
import deyiminin bir modüldeki isimleri doğrudan
yükleyen modülün simge tablosuna ekleyen kullanım şekli var. Örnek:
>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
Bu kullanım şeklinde yüklemenin yapıldığı modül adı yerel simge tablosuna
eklenmez (yani örnekteki fibo tanımlı değildir).
Bir modülde tanımlanmış bütün isimleri de yüklemek şu şekilde mümkündür:
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
Bu altçizgi ( _ ) ile başlayanlar dışındaki bütün
isimleri yükler.
spam isimli bir modül yüklenmek istendiğinde
yorumlayıcı önce çalıştırıldığı dizinde ve sonra
PYTHONPATH ortam değişkenince tanımlanan dizinler
içinde spam.py isimli bir dosya arar.
PYTHONPATH dizin isimlerinden oluşan bir listedir
(PATH gibi). Aranan dosya bulunmazsa arama, kuruluma bağlı başka bir
yolda da aranabilir. Genelde bu /usr/local/lib/python
dizinidir.
Aslında modüller sys.path değişkeninde bulunan dizin
listesinde aranırlar. Bu değişken değerini betiğin alıştırıldığı dizin,
PYTHONPATH ve kuruluma bağlı diğer dizinlerden alır.
sys.path değişkeni sayesinde Python programları modül
arama yolunu değiştirebilirler.
"Derlenmiş" Python Dosyaları
Derlenmiş Python dosyaları programların çalışmaya başlaması için
gereken süreyi kısaltırlar. Örneğin spam.py adlı
dosyanın bulunduğu dizinde spam.pyc adlı bir dosya
varsa bu modul, spam modülünün ikilik derlenmiş
halidir. spam.py dosyasının son değiştirilme
tarihi spam.pyc dosyasının içinde de kayıtlıdır ve
bu tarihler aynı değil ise .pyc dosyası dikkate
alınmaz.
spam.pyc dosyasının oluşması için bir şey yapmanız
gerekmez. spam.py her ne zaman başarılı olarak
derlenirse programın derlenmiş hali spam.pyc
dosyasına kaydedilir. Bunun yapılamaması bir hata değildir; herhangi
bir nedenle .pyc dosyası tam olarak yazılamazsa
geçersiz sayılır ve dikkate alınmaz. .pyc
dosyalarının içeriği platformdan bağımsızdır. Bu sayede bir Python
modülü dizini farklı mimarideki makineler tarafından paylaşılabilir.
Uzmanlar için birkaç ip ucu:
Python yorumlayıcısı -O parametresi ile
çalıştırıldığında eniyileştirilmiş (optimized) kod üretilir
ve .pyo uzantılı dosyalarda saklanır.
Eniyileştircinin (optimizer) şu anda pek bir yararı olmuyor;
sadece assert deyimlerini siliyor.
-O parametresi kullanıldığında tüm ikilik
kod eniyileştirilir, .pyc dosyaları göz ardı
edilir ve .py dosyaları eniyileştirilmiş
ikilik kod olarak derlenir.
Yorumlayıcıya iki tane -O parametresi
(-OO) vermek derleyicinin bazı ender durumlarda
doğru çalışmayan programlara neden olan eniyileştirmeler yapmasına
neden olur. Şu anda sadece __doc__ dizgeleri
silinerek daha küçük .pyo dosyaları üretilmektedir.
Bazı programların çalışması bunların varlığına bağımlı olabileceğinden
bu parametreyi kullanırken dikkatli olun.
Bir program .pyc ya da .pyo
dosyasından okunduğunda .py dosyasından okunan
halinden daha hızlı çalışmaz; sadece yüklenme süresi kısalır.
Bir betik komut satırından ismi verilerek çalıştırıldığında bunun
ikilik kodu asla bir .pyc ya da
.pyo dosyasına yazılmaz. Bu yüzden betiğin başlama
süresini kısaltmak için bunun bir kısmı bir modüle aktarılarak ve bu
modülü yükleyen küçük bir başlatıcı betik kullanılarak kısaltılabilir.
Komut satırından bir .pyc ya da .pyo
dosyası da ismi verilerek doğrudan çalıştırılabilir.
spam.py dosyası olmadan da spam.pyc
(ya da -O kullanıldığında spam.pyo)
dosyası kullanılabilir. Bunlar bir Python kodu kütüphanesinin
tersine mühendisliği zorlaştıran şekilde dağıtılmasında
kullanılabilir.
compileall modülü bir dizindeki bütün dosyalar
için spam.pyc (ya da -O
kullanıldığında spam.pyo) dosyaları yaratabilir.