Python ve Fonksiyon Argümanları

Geçen yaz python cgi ile ilgilenirken bir tema motoru yapmak için uğraşmıştım. Ama bazı konularda bilgi sahibi olamadığımdan ilerletememiştim. Bu konulardan biriside python fonksiyonlarına belirlenmemiş türde argümanlar göndermekti. Az önce bu konuda biraz araştırma yaptım ve sonuca ulaştım. Sonuç çok işime yarayacak çalışmalarımda. Kodlar şu şekilde:

 
#-*- coding:utf-8 -*-
 
def deneme(*degiskensiz,**degiskenli):
    print locals()
 
deneme("degiskensiz1","degiskensiz2",degisken1="deger1",degisken2="deger2")
 

Kodun çıktısı şu şekilde:

 
[omer@localhost programlama]$ python pythondeneme.py
{'degiskenli': {'degisken2': 'deger2', 'degisken1': 'deger1'}, 'degiskensiz': ('degiskensiz1', 'degiskensiz2')}
 

Deneme fonksiyonu içerisindeki argümanlar listesinde bulunan *degiskensiz değeri fonksiyona gönderilen eşitlenmemiş bilgileri (tek yıldızla belirlenen), **degiskenli değeri ise (çift yıldızla belirlenen) bir değere eşitlenmiş bilgileri taşımaktadır. locals() fonksiyonu ise deneme fonksiyonunun argüman listesini bir sözlük olarak döndürmektedir. Bu özelliği kullanarak şöyle bir örnek yaptım:

 
#-*- coding:utf-8 -*-
 
def _(*degiskensiz,**degiskenli):
    tag = degiskensiz[0]
    attr = "<%s" %(tag)
    for i in locals()["degiskenli"]:
        if (i!="value"):
            x = i
            if (i[0:1]=="_"):
                x = i.replace("_","")
            attr = "%s %s=\"%s\" " %(attr,x,locals()["degiskenli"][i])
    print "%s >%s</%s>" %(attr,locals()["degiskenli"]["value"],tag)
 
_("a",href="www.omerucel.com",onclick="alert(\"merhaba\");",_class="bağlantı",value="bir bağlantı")
_("h3",_class="bağlantı",value="bir bağlantı")
_("span",value="bir bağlantı")
 

Çıktısı ise şu şekilde:

 
[omer@localhost programlama]$ python pythondeneme.py
<a href="www.omerucel.com"  class="bağlantı"  onclick="alert("merhaba");"  >bir bağlantı</a>
<h3 class="baslik"  >bir başlık</h3>
<span >bir içerik</span>
 

Tags:

Leave a Reply