logo
Hoşgeldiniz! Forumun bütün özelliklerini kullanmak için lütfen Giriş ya da Kayıt.

Bildirim

Icon
Error

Python ve Modüller
Mevt Offline
#1 Gönderildi : 09 Kasım 2011 Çarşamba 12:03:02(UTC)
Pys_Mevt



Sıralama: Çaylak


Mesajlar: 4
Puanlar: 12
Konum: İstanbul

3 Mesajına Toplam 3 Kere Teşekkür Edildi.

Bu bölümde yine çok önemli bir konu olan “modüller”den bahsedeceğiz. Peki nedir modül? “Modül” en basit tanımıyla, ”.py” uzantısına sahip bir dosyadır. Bu tanıma göre, Python’la yazdığınız bütün program dosyaları birer modüldür. Dolayısıyla bir program yazıp bunu “cımbız.py” adıyla kaydettiğinizi varsayarsak, işte bu “cımbız.py” adlı dosya bir modüldür... Buradan yola çıkarak şöyle bir tanım yapabiliriz o halde:



“Fonksiyonlar, deyimler ve ifadelerden oluşan, bu öğeleri içinde barındıran Python dosyalarına modül adı verilir.”
Peki modüller ne işe yarar?



Modüller Python’daki en yararlı öğelerden bir tanesidir. Bir modül içinde tanımladığımız fonksiyonları başka bir programa aktarabilir, bu fonksiyonları bir daha yazmak zorunda kalmadan tekrar tekrar kullanabiliriz.


Modüller Python’a güç ve esneklik kazandıran öğelerdir. Etrafta, emrimize amade bir şekilde bekleyen binlerce hazır modül bulunur. Bu modüllerden bir kısmı Python’un içindedir, bir kısmı ise internetten indirilebilmektedir. Hazır modülleri kullanarak Python’da inanılmaz işler başarabilirsiniz. Örneğin Tkinter adlı bir modül sayesinde Python’la arayüzlü programlar tasarlayabilirsiniz... Eğer matematiğe meraklıysanız math modülünü kullanarak karmaşık işlemleri son derece kolay bir şekilde halledebilirsiniz... Etrafta bunlar gibi bir yığın modül bulunur.


Python’un içinde yer alan modüllerin listesine  

Linkleri görebilmek için lütfen siteye üye olunuz!

  adresinden ulaşabilirsiniz.


Yukarıda söylediğimiz sözler kulağa biraz anlaşılmaz geliyor olabilir. Ama hiç dert etmeyin. İlerleyen sayfalarda modül konusunu ayrıntılı olarak inceleyeceğiz. O halde lafı daha fazla dolandırmadan işe koyulalım.


Modülleri İçe Aktarmak (importing modules)


Python’da bir modülü kullanabilmek için, o modülü öncelikle “içe aktarmamız” gerekiyor. Burada “içe aktarmak”tan kasıt, söz konusu modüle ait özellikleri başka bir dosyanın içine taşımaktır. Bir modül içe aktarıldığında, o modüle ait özellikler, modülün aktarıldığı dosya içinden de kullanılabilecektir. Bu söylediklerimiz kafanızı karıştırmasın. Şimdi bu anlattıklarımızın ne demek olduğunu çok basit örneklerle açıklayacağız.


Python’da os adlı bir modül bulunur. Bu modül Python’un en temel ve en önemli modüllerinden bir tanesidir. Şimdi bir modülün ne olup ne olmadığını anlayabilmek için etkileşimli kabukta aşağıdaki komutu verelim. Bu komut yardımıyla bu os adlı modülün içine bakacağız;


 



>>> dir(os)


 


Ne oldu? Python bize bir hata mesajı gösterdi, değil mi? Bu gayet normal. Çünkü biraz önce de söylediğimiz gibi, bir modülü kullanabilmek için öncelikle o modülü içe aktarmamız (import) gerekiyor. Hemen bu işlemi nasıl yapacağımıza bakalım:


 


>>> import os

 


Bu komut yardımıyla Python’a şu emri vermiş oluyoruz: “Ey Python! ‘os’ adlı modülü içe aktar, ki ben bu modülün bana sunduğu nimetlerden faydalanabileyim...


Bu emrimizi alan Python sessizce alt satıra geçecektir. Buraya kadar her şey normal. Bu yaptığımız işleme “içe aktarma” adı veriliyor. Yani biz bu işlemle, os adlı modülü içe aktarmış olduk. Artık bu modülün bütün özelliklerinden yararlanabiliriz. Öncelikle bu modülün içine bakalım neler varmış:


 


>>> dir(os)
['F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINH ERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEM PORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', ' P_OVERLAY', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_ OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__na me__', '__package__', '_copyreg', '_execvpe', '_exists', '_exit', '_get_exports_ list', '_keymap', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_res ult', '_pickle_statvfs_result', '_putenv', '_unsetenv', '_wrap_close', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'curdir', 'defpath' , 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'exe cl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'ext sep', 'fdopen', 'fstat', 'fsync', 'getcwd', 'getcwdb', 'getenv', 'getpid', 'isat ty', 'linesep', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open' , 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'remove', 'rem ovedirs', 'rename', 'renames', 'rmdir', 'sep', 'spawnl', 'spawnle', 'spawnv', 's pawnve', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result ', 'strerror', 'sys', 'system', 'times', 'umask', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']

 


Gördüğünüz gibi, os modülü içinde bir hayli araç bulunuyor. Peki bu os modülü ne işe yarar? İngilizce bilen arkadaşlarım şu komutu kullanarak bu modülün belgelendirme dizisine ulaşabilir (Belgelendirme dizilerinin ne olduğunu fonksiyonlar bölümünde işlemiştik...):


 



>>> print(os.__doc__)


 


İngilizce bilmeyen arkadaşlarım için bu modülün ne işe yaradığını biz söyleyelim:


os modülü Python içindeki en önemli modüllerden bir tanesidir. Bu modül, kullandığımız işletim sistemine ilişkin bazı önemli işlemler yapmamızı sağlar. Ayrıca bu modülden yararlanmak, birden fazla platform üzerinde çalışan programlar yazmanızı da kolaylaştıracaktır. Bu modülü ayrı bir başlık altında daha detaylı bir şekilde inceleyeceğiz. Ama şimdilik isterseniz bu modülle ilgili birkaç örnek yaparak modüller konusuna biraz olsun ısınmanızı kolaylaştırmaya çalışalım:


En başta da dediğimiz gibi, bir modülü kullanabilmek için öncelikle o modülü içe aktarmamız gerekiyor. Bunu sık sık tekrar ediyorum, çünkü Python’u öğrenenlerin en çok yaptığı hatalardan biri de bir modülü içe aktarmadan kullanmaya çalışmaktır... Şu halde hemen os modülünü içe aktaralım:


 



>>> import os


 


Eğer etkileşimli kabuk üzerinde çalışıyorsanız, bu modülü her oturumda bir kez içe aktarmak yeterli olacaktır.


Şimdi şu kodlara bakalım:


 



>>> import os

>>> if os.name == "posix":
... print("Merhaba GNU/Linux kullanıcısı... Stallman'a benden selam söyle!")

>>> elif os.name == "nt":
... print("Merhaba Windows kullanıcısı... Gates'e benden selam söyle!")



 


Eğer kullandığınız sistem GNU/Linux ise yukarıdaki kodları çalıştırdığınızda “Merhaba GNU/Linux kullanıcısı...” çıktısı verilecek, eğer Windows kullanıyorsanız “Merhaba Windows kullanıcısı...” çıktısı verilecektir. İsterseniz bu kodları biraz inceleyelim:


Öncelikle os modülünü içe aktarıyoruz. Çünkü bu modülü ve içindeki nitelikleri kullanabilmek için ilk yapmamız gereken şey bu modülü içe aktarmaktır. Modülü bir kez içe aktardıktan sonra “dir(os)” çıktısında görünen bütün niteliklerden, metotlardan ve fonksiyonlardan faydalanabiliriz. os modülü içinde, işletim sistemlerine ilişkin bazı işlemleri yerine getirmemizi sağlayacak araçlar bulunur. Eğer “os(dir)” çıktısına bakacak olursanız, orada name adlı bir ifade görürsünüz. “name” kelimesinin anlamı “isim”dir. Dolayısıyla bu ifade bize kullandığımız işletim sisteminin ismini söyleyecektir. os modülü içinde şu isimler tanımlanmıştır:


 



'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos'


 


Şimdi etkileşimli kabukta os modülünü içe aktardıktan sonra şu komutu verin:


 



>>> print(os.name)


 


Bu komut, kullandığınız işletim sistemine göre farklı çıktılar verecektir. Eğer GNU/Linux dağıtımlarından birini kullanıyorsanız yukarıdaki komuttan alacağınız çıktı “posix” olacaktır. Eğer Windows kullanıyorsanız bu komut size “nt” cevabını verir. Yok eğer siz bir Macintosh kullanıcısıysanız bu komuttan alacağınız cevap “mac” olacaktır...


Bu ifadeler arasında görünen “os2”, OS/2 adlı işletim sistemini, “ce” Windows CE işletim sistemini, “java” JavaOS işletim sistemini, “riscos” ise RISC OS işletim sistemini temsil eder...


Burada os modülü içindeki bir niteliği nasıl kullandığımıza dikkat edin: os + ”.” + name. Burada “modül_adı” + “nokta” + “istenen_nitelik” yolunu izliyoruz.


Biz burada “print(os.name)” komutuyla aslında Python’a şöyle bir emir vermiş oluyoruz: “os adlı modülünün “name” adlı niteliği aracılığıyla bana kullandığım işletim sisteminin adını söyle!


Gelin isterseniz yine os modülü içinde yer alan araçlardan biriyle ilgili bir örnek daha yapalım:


 



>>> print(os.getcwd())


 


Bu komut bize, o anda hangi dizin içinde çalışıyorsak o dizinin adını verecektir. getcwd() adlı fonksiyonu da “dir(os)” çıktısı içinde görebilirsiniz. Bu arada, getcwd‘nin bir fonksiyon olduğuna dikkat edin. Bu araç bir fonksiyon olduğu için bunu parantezlerle kullanmayı unutmuyoruz. Biraz önce gördüğümüz name niteliği ise bir fonksiyon değil, os modülü içinde yer alan değişkenlerden biridir.


Burada da “print(os.getcwd())” komutuyla Python’a şu emri veriyoruz: “os adlı modülün “getcwd()” adlı niteliği aracılığıyla bana şu anda hangi dizinde çalıştığımı göster.


Bu arada, eğer os modülünün içeriğini merak ediyorsanız, bu dosyayı inceleyebilirsiniz. Bu modülün sisteminizde nerede bulunduğunu öğrenmek için şöyle bir komuttan yararlanabilirsiniz:


 



>>> os.__file__


 


Bu komut, size os modülünün hangi klasör içinde olduğunu söyleyecektir...


Dediğimiz gibi, ilerleyen sayfalarda bu os modülünü daha detaylı olarak inceleyeceğiz. Burada amacımız sadece modül konusuna sizleri ısındırmak...


Dilerseniz şimdi baştan beri söz ettiğimiz “içe aktarma” mevzuunu biraz deşelim...


Dedik ki, bir modülü herhangi bir şekilde kullanabilmek için öncelikle o modülü içe aktarmamız gerekiyor. Yabancılar bu kavrama “import” diyorlar... Python’da bir modülü birkaç farklı şekilde içe aktarabiliyoruz:




  1. import modül




  2. from modül import nitelik_adı




  3. from modül import *




  4. import modül as takma_ad




Peki bu biçimler arasındaki farklar nedir? Tek tek bakalım:


 



import modül


 


Python’da bir modülü bu şekilde içe aktardığımız zaman o modülün ismi dahil bütün nitelikleri kullanılabilir duruma gelir. Bir örnek verelim:


 


>>> import os >>> print(os.name)

 


Burada os adlı modülü “import os” biçimini kullanarak içe aktardığımız için, bu modül içinde bulunan niteliklerden biri olan name‘yi kullanabiliyoruz. os modülü içindeki nitelikleri kullanabilmek için “os.nitelik” yapısını kullanmamız gerekiyor.


Bir modülü bu şekilde içe aktardığımızda, o modülün kendi ismi de içe aktarılmış olur. Bu ne demek? Şu örneğe bakalım:


 



>>> dir(os)


 


Modülümüzü “import os” diyerek içe aktardığımız için “dir(os)” komutu çalışıyor. Bunun sebebi os isminin de içe aktarılmış olmasıdır. Bunu biraz sonra daha iyi anlayacağız.


NOT: İçerik tamamen "istihza.com" web sitesi ve "Herkes İçin Python" kitabının sahibi Fırat ÖZGÜL arkadaşımındır.

Mevt: 1 Kişi mesajın için Teşekkür Etti.
@butun 21.03.2012(UTC) tarihinde
@butun Offline
#2 Gönderildi : 21 Mart 2012 Çarşamba 14:18:39(UTC)
@butun



Sıralama: Yönetici

Madalyalar:
Anahtar Kişi: Forumda anahtar rol oynayan kullanıcılara verilirAltın Madalya: Forumda üstün hizmetleri olan kullanıcılara verilirKod Erişimi: Forum kodlarına doğrudan erişimi bulunan kullanıcılara verilirVeritabanı Erişimi: Forum veri tabanına doğrudan erişimi olan kullanıcılara verilirSistemin Efendisi: Sisteminin tamamına hükmeden kullanıcılara verilir

Mesajlar: 1,852
Puanlar: 12,672
Konum: Istanbul

Thanks: 23 times
17 Mesajına Toplam 26 Kere Teşekkür Edildi.

Paylaşımların için çok çok teşekkür ediyorum Mevt, paylaşımlarının devamını diliyorum.

Bu konudaki kullanıcılar
Ziyaretçi
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.