Python101 – Modülleri Kullanma

Bu bölüm için bir alıştırma ile başlayalım. Aşağıdaki kodu cal.py olarak adlandırın (kullanacağımız import komutu calendar.py adlı bir dosya arar ve okur. Dosyayı calendar.py olarak adlandırırsak kendi kendisini okumaya çalışır.)

import calendar
yil = int(input("Bir yıl girin: "))
calendar.prcal(yil)

Çıktı:

Bir yıl girin: 2001

                                 2001                                  

       January                  February                    March      

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
1  2  3  4  5  6  7                1  2  3  4                1  2  3  4     
8  9 10 11 12 13 14       5  6  7  8  9 10 11       5  6  7  8  9 10 11
15 16 17 18 19 20 21      12 13 14 15 16 17 18      12 13 14 15 16 17 18     
22 23 24 25 26 27 28      19 20 21 22 23 24 25      19 20 21 22 23 24 25     
29 30 31                  26 27 28                  26 27 28 29 30 31        

(Çıktının bir kısmını atladım, ama sanırım fikri anladınız.) Peki program ne işe geliyor? İlk satır import calendar yeni bir komut kullanır. import komutu bir modül yükler (bu durumda calendar modülü). Standart modüllerde kullanılabilen komutları görmek için python kitaplık başvurusuna bakabilirsiniz veya http://docs.python.org/3/library/ gidin. Calender modülünün belgelerine bakarsanız, bir yıl için takvim yazdıran prcal adlı bir işlevi listeler. calendar.prcal(yil) satırı bu işlevi kullanır. Özetle bir modül kullanmak için import komutu, ve daha sonra bu modüldeki işlevler için kullanmak ise module_adi.fonksiyon komutunu kullanırız. Programı yazmanın başka bir yolu da:

from calendar import prcal

yil = int(input("Bir yıl girin: "))
prcal(yil)

Bu sürüm bir modülden belirli bir işlevi alır.

Python Kitaplığı’nı kullanan başka bir program da aşağıdaki gibi olabilir (clock.py gibi bir isim verin) (programı sonlandırmak için aynı anda Ctrl ve ‘c’ tuşuna basın):

from time import time, ctime

onceki_zaman = ""
while True:
    simdiki_zaman = ctime(time())
    if onceki_zaman != simdiki_zaman:
        print("Tarih ve saat:", ctime(time()))
        onceki_zaman = simdiki_zaman

Çıktının bir kısmı:

Tarih ve saat: Sun Aug 20 13:40:04 2000
Tarih ve saat: Sun Aug 20 13:40:05 2000
Tarih ve saat: Sun Aug 20 13:40:06 2000
Tarih ve saat: Sun Aug 20 13:40:07 2000

Traceback (innermost last):
 File "clock.py", line 5, in ?
    the_time = ctime(time())

KeyboardInterrupt

Çıktı elbette sonsuza kadar devam edecekti, bu yüzden iptal ettim (veya çıktı en azından Ctrl + C basılana kadar devam eder). Program sadece sonsuz bir döngü yapıyor (True her zaman doğrudur, bu yüzden while True sonsuza kadar gider) ve her seferinde zamanın değişip değişmediğini kontrol edip değişmişse yazdırıyor. import deyiminden sonra birden çok adın satırda nasıl kullanıldığına dikkat edin. from time import time, ctime

Python Kitaplığı birçok yararlı işlev içerir. Bu işlevler programlarınıza daha fazla yetenek verir ve birçoğu Python’da programlamayı basitleştirebilir.

Diğer modüller

Bazen Python kurulumuyla birlikte gelmeyen bir python modülü kullanmak istersiniz. Tabiki bunları da kullanabilirsiniz, ancak bilgisayarınızda yüklü olması gerekir.

Kendi modülünüzü oluşturma

Python import komutunu okuduğunda, önce dizininizdeki dosyaları, ardından site paketlerini veya önceden yüklenmiş modülleri denetler. Kendi modülünüzü oluşturmak için, geçerli dizinde bir .py dosyası oluşturmanız ve aşağıdaki komutu kullanmanız yeterlidir:

import module_adi

Bu komut, module.py dosyasını geçerli dizininizden ve bulunamazsa site paketlerinden ve önceden paketlenmiş modüllerden almaya çalışır.

Ancak, modülü aldığında, temelde dosyayı bir program olarak başlatır, böylece oradaki herhangi bir kod çalıştırılır. Dolayısıyla tüm kodu işlevler halinde gruplamak istersiniz.

__name__ == __main__ hilesi

Python’da __name__ değişkeni size programın geçerli adını verecektir. İçe aktardığınız bir modül __name__ değişkenini yazdırırsa, aslında modülün adını yazdırır. Geçerli dosya eğer __name__ değişkenini yazdırırsa program ana programın çalıştığını göstermek için __main__ yazdırır. 

Bir If deyimi __name__ değişkenini denetler ve ana programın çalıştığını görürse, bir modül alındığında oluşturulan istemeden çalıştırma sorunu atlanabilir. Örneğin, herhangi bir kodu çalıştıran bir dosyanız olduğunu varsayın. Bu kod, ayrıca, başka bir programda kullanmak istediğiniz bir işleve de sahip olsun. Ancak, siz kodu çalıştırmak değil de, yalnızca işlevi almak isteyin. Bu şekilde kod sadece yazıldığı dosyadan başlatıldıysa çalıştırır, içe aktarılmışsa çalışmaz.

if __name__ == '__main__':
    pass

Bu durumda, dosya çalıştırılırsa ancak içe alınmazsa, geçiş komutunu (pass) çalıştırır. Geçiş komutunu, içe aktarılmadığında çalıştırılmak istediğiniz kodla değiştirebilirsiniz. Kodu girintilemeyi unutmayın.

Pip modülü

Pip modülü, Python kurulumu ile birlikte gelen ve bir modül indiricisi / yöneticisi olarak hareket eden bir modüldür. Pip ile internetten diğer modülleri indirebilirsiniz.

Pip modülü python yorumlayıcısında kullanılmaz, ancak komut satırı boyunca çalıştırılır. Kullanmak için komut satırı yorumlayıcınızı açın (Windows için Komut İstemi, Mac/Linux için Terminal) ve aşağıdaki kodu yazın:

python -m pip install modul_adi

veya

pip install modul_adi

Bu, kullanıcı tarafından gönderilen python modülleri veritabanından istediğimiz modülü indirmeye ve yüklemeye çalışır. Pip kullanarak kurulum yapma ile ilgili daha detaylı okumayı buradan yapabilirsiniz. Pip ile ayrıca modül güncelleme de yapabiliriz.

Alıştırmalar

Kararlar bölümünde yazdığımız high_low.py‘yi yeniden yazalım. Bu sefer sabit bir sayı yerine 0 ile 99 arasında bir sayı üretsin. Rastgele sayı üreten uygun bir modül bulmak ve kullanabileceğiniz işlevleri görmek için Python belgelerini kullanın. 

Çözüm

from random import randint
number = randint(0, 99)
guess = -1
while guess != number: 
    guess = int(input ("Guess a number: "))
    if guess > number:
        print("Too high")
    elif guess < number:
            print("Too low")
print("Just right")

Bir yorum yapın

E-posta hesabınız yayımlanmayacak.

To top