class etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
class etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

24 Nisan 2009 Cuma

Python’da Karakter Dizisi İşlemleri

(http://www.gokmengorgen.net adresinden alıntıdır.)

Geçenlerde bir arkadaşım, Python 3′te gettext modülünün nasıl kullanılacağını sormuştu, ben de henüz 3.* sürümünü denemediğim için bir cevap verememiştim. Hala da verebilecek aşamada değilim; ama bu konu üzerinde biraz araştırma yaparken, ilginç bir internet sayfasıyla[1] karşılaştım. Aşağıda paylaşacağım kodların ve bilgilerin Python 2.* serisinde çalışmaması söz konusu olabilir.

Python’da karakter dizilerini iki biçimde çağırabiliyoruz:

  • Karakter dizileri için % işleyicisi[2].

  • string.Template modülü[3]



% işleyicisiyle kullanım örneği, Python belgelerinde verilmiş:


>>> print('%(language)s has %(#)03d quot types.' % {'language': "Python", "#": 2})
#Python has 002 quot types.


Bu kodda değişkenler bir sözlük içinde eşleştirilmekte ve print çıktısında tanımlanmış değerleriyle ekrana yazılmaktadır. Bunun aynısı şu şekilde de yapabilirdik:


>>> print('%s has %03d quot types.' % ("Python", 2))
#Python has 002 quot types.


Birincisine göre daha basit olsa da, birinci kodda şöyle bir avantaj söz konusudur:

>>> print('The %(first)s variable, and the %(second)s variable.' % {'second': "New", 'first': "Old"})
#The Old variable, and the New variable.


Bu şekilde kullandığımız zaman, ikinci işleyiciyi ilk olarak tanımlayıp, ikinci işleyiciyi ise sonra tanımlayabilme fırsatımız olabiliyor. Nerelerde kullanılabileceği ayrı bir merak konusu. Bu merakı gidermeden önce bir de şu şekilde kullanıma bir bakalım:


>>> print('The {1} variable, and the {0} variable.'.format("New", "Old"))
#The Old variable, and the New variable.


İlginç, değil mi? Aslında bu kadar çeşitlilik olması garibime gidiyor; ama bu son yöntemin yüksek seviye programlama diline daha yakın bir tarz olduğunu düşünmeden edemiyorum. Yanılmıyorsam bu tip kullanım, C# ve Java’da da var. Şimdi son olarak aşağıdaki kodu inceleyelim:


import sys

class Main:
def __init__(self):
print("Python version is, {0}.".format(sys.version[:5])) # print'lerin yazimina dikkat..

digits_list = self.digits()

print("{1} is bigger than {0} as digit.".format(digits_list[0], digits_list[1]))

def digits(self):
try:
first_digit = int(input("Please write a digit: ")) # raw_input yerine input kullaniliyor.
second_digit = int(input("And second digit: "))

except ValueError:
print("\nSorry, you must enter a digit.")
exit()

return self.sort(first_digit, second_digit)

def sort(self, x, y):
return sorted([x,y])

if __name__ == "__main__":
Main()


Kodun yaptığı şey basit: Sizden iki sayı girmeniz isteniyor ve sayıları, büyüklüklerine göre {0} ve {1} ile eşleştirip, “X, Y’den sayıca büyüktür.” gibisinden bir cümle döndürüyor. Kod basit olduğu için bu tip karakter dizisi işleyicilerin faydası pek belli olmuyor; ama mutlaka bir yerde faydası vardır =). Son kodun çıktısı şu şekilde:


[gkmngrgn@gacer ~]$ python3 rank.py
Python version is, 3.0.1.
Please write a digit: 3
And second digit: 1
3 is bigger than 1 as digit.
[gkmngrgn@gacer ~]$


[1]: http://www.python.org/dev/peps/pep-3101/
[2]: http://docs.python.org/library/stdtypes.html#string-formatting-operations
[3]: http://docs.python.org/library/string.html#string.Template

18 Ağustos 2008 Pazartesi

Uml Modelleme - 1

Uml (unified modelling language) karmaşık bir sistemin elemanlarını , değişkenlerini çalışma prensipleri gibi bilgileri grafiksel şemalar ile ifade etmemize yarar. Uml sayesinde bir satır kod yazmadan bütün programın nasıl çalışacağını şema üzerinde görebilir, açıklarını-ihtiyaçlarını tespit edebiliriz. Tahmin edebilirsiniz ki bütün sistemi daha en başından basit bir şekilde modellemek sistemin açıklarını baştan görmek inanılmaz büyük bir avantaj.

Başka bir konu da anlaşılabilirlik... projenize dışardan biri katıldığı zaman birkaç saat içerisinde sizin projenizin bütün çalışma prensibini anlayabilir geriye ayrıntılar kalır.

Buradaki bahsi geçen sistem çok geniş bir kavramdır, vücudun çalışması, karayolu trafiği , yazdığımız program... herşey bu uml ile modellenebilir. Bu noktada uml: sınıf diagramı ,bileşen diagramı, birleşik yapı diyagramı gibi çeşitlere ayrılır. Biz bu yazımızda sınıf diagramları ile ilgileneceğiz.

Sınıf diagramı wikipedia da şu cümleyle açıklanmış : "Sınıf Diyagramı ("Class Diagram") vasıtası ile Nesnel Yönelimli Programlamada temel teşkil eden sınıflar net şekilde gösterilebilir ve böylece sağlanan ek görsellik ile yazılım tasarlamanın ilerleyen aşamalarında daha yüksek verimlilik sağlanabilir."

Buraya kadar herşey tamam. Peki bir uml şeması neye benzer diyecek olursanız ?? Aşağıdaki örneği verebiliriz


Şimdilik bu kadarı tanışma için yeterli sanırım. Bir daha ki yazıda burada gördüğümüz şekillerin anlamlarından bahsedeceğim.

14 Ağustos 2008 Perşembe

Pyton ve Nesnel Programlama

Nesnel programlama sizin programınızı gerçek dünyadaki sistemler gibi modelleyebilmenizi sağlayan bir güzelliktir , kim icat ettiyse elleri öpülesi mukaddes bir insandır.

  • Nesnel yaklaşımda bir sınıf yaratılır, sınıf bir genellemedir. Belli bir grup nesnenin ortak özelliklerini barındırır(örn: organism sınıfı bütün organizmalarda bulunan işlem ve özellikleri barındırır.)

  • Nesne bu sınıf'ın bir nesneye uygulanmasıdır animal = organism() yada human = organism() dediğimiz zaman buradaki animal ve human birer nesnedir.

  • Sınıf özellikleri bu sınıfa ait özelliklerdir. Örneğin her organizmanın bir yaşı vardır. Bu yaş bigisini organism sınıfı üzerinde age olarak tanımlarsak [1] daha sonra bu sınıfa ait nesnelerin age özelliğini animal.age şeklinde çağırabiliriz.

  • Bir sınıf kendi özelliklerini kendi kendine de değiştirebilir. Bu durumda self.ozellik = hede şeklinde kullanılır. Buradaki aslında self sınıfın kendisini ifade eder. Eğer bir fonksiyon içerisinde self. kullanılacaksa o fonksiyonun argümanı içerisinde self bulumalıdır.[2]

  • Bir nesne oluşturuluyorken __init__ fonksiyonu otomatik olarak çağırılır.

  • Bir nesne siliniyorken __del__ fonksiyonu otomatik olarak çağırılır. Eğer del(nesne) kullanılarak nesne silinmez ise nesne program sonunda silinir.


  • __init__ ve __del__ fonksiyonları self argümanı ile belirtilmek zorundadır.

  • örnek olarak bir organizma sınıfı şu şekilde tanımlanabilir.
    class organism:
    def __init__(self):
    print "ben doğdum"
    self.age = 0 [1]
    def grow_up(self,years):
    self.age += years
    def __del__(self):
    print "ben öldüm"
    animal = organism()
    print "animal age is :",animal.age
    animal.grow_up(3) # grow up 3 years
    print "animal age is :", animal.age