Lambda ile ilgili soru

Daha önce lambdayı görmüştüm ama hiç kullanmamıştım.
Sorum şu aşağıdaki kod def kullanarak nasıl yazılır (yada biri direk ne yaptığını açıklayabilir)

lambda x: 1 if x>0 else -1)
def func(x):
    return 1 if x > 0 else -1

def func(x):
    if x > 0:
        return 1
    else:
        return -1

Bu şekilde yazabilirsiniz.

&gt

açılımı ne, ne demek, nasıl bir kod açıklayabilirmisiniz?

Kodun tamamını veriyim isterseniz

import numpy as np
 
girdiler = np.array([5,6])
 
agirliklar = np.array([-1,0.8])
 
agirlikli_toplam = girdiler * agirliklar
 
toplam = sum(agirlikli_toplam)
 
aktivasyon_fonksiyonu = (lambda x: 1 if x>0 else -1)
 
cikti = aktivasyon_fonksiyonu(toplam)
 
print cikti
1 Like

@tekbir, Python ile ilgili değiller.

& is the character reference for “An ampersand”.
> stands for the greater-than sign ( > )

1 Like

python 3 te bunlar varmı?

python 3 te bunlar varmı?

Derken?

python 3 te bu şekilde yazarsak olur mu?çalışır mı?

Doğrusu benim aptalligim pardon anlamamıştım dediğinizi şimdi anladım bu kodların Python 2 için yazıldığını ama bilmem maalesef bilgisayarım yok şu anlık.

Üstte de belirttiğim gibi, onlar Python ile ilgili değiller. Arkadaş kopyalarken bir sorun olumuş ya da forumun > işaretine karşı bir davranışı. Sebebini tam olarak bilmiyorum, sadece ne olduklarını hakkında yardımcı olabilirim.

1 Like

Forum ile ilgili bir sorun değil, belki şifreleme(encoding) ile ilgili bir durumdur. Python’da böyle öğeler yok. Python’daki öğelere şuradan ulaşabilirsiniz: https://docs.python.org/3/reference/lexical_analysis.html

1 Like

Yeni bir konu açmaktan ise bu konudan sorayım istedim.

cmd = lambda x : x = Label(root2, text = ent_2.get()
Şeklinde yazıp
buton = Button(root2, text = “onayla”, command = cmd )
Yazdığımda hata veriyor fakat ;
cmd = lambda : Label(root2, text = ent_2.get()
Olarak yazdığımda çalışıyor. Yani bu Label içerisine entry içeriğini yazıyor. Benim amacım butona basıldığında entry içindeki değeri bir değişkene atamak. Bu cmd satırını lambda olmadan da kullansam yine olmuyor.
Belki de oluyordur ben bu bu bilgiyi kullanamıyorumdur

Sorunun iki kaynagi var:

  1. Lambda expression’larinda sadece bir tane expression kullanilabiliyor. Turkcesi, bir adet değer (veya degere sahip ifade).
    (lambda x: hede(x); hodo(x)) gibi iki adet ifade kullanamayacagimiz¹ gibi,
    (lambda x: del x) veya (lambda: raise 42) gibi degere sahip olmayan ifadeleri de kullanamayiz.
    Lambda’larin basit deger donduren matematiksel fonksiyonlar olmalari gerektigini goz onunde bulundurursak, bu mantikli. Icerdeki ifadeyi al, basina return koy, def'li fonksiyona cevir.

  2. x = y seklindeki assignment statement’lari expression degil, yani bir degere sahip degiller. Olsalardi, a = (x = y) veya return x = 42 diyebilirdik.

Python 3.8 ile birlikte assignment expression’lari geliyor; onlar bir degiskene deger atamakla beraber degeri de donduruyorlar. Yani a = (x := y) veya return x := 42'nin mumkun olacagi gibi, lambda icinde deger atamak da mumkun olacak.

Bu arada, bu veya benzeri kodun okunmasinin kolaylastigi basit ornekleri bir kenara koyarsak, genel olarak lambda expression’lari icine basit degerler disinda seyler konulmasini tavsiye etmiyorum. Konseptleri ve kullanimlari matematikten geliyor ve bu yuzden matematiksel, pure function olmalari bekleniyor. Isim verilmeyecek kadar degersiz bir fonksiyondan, dondurdugu deger disinda bir sey vermesi, kodun baska yerinde bir degisiklik yapmasi beklenemez.


1: ama (hede(x), hodo(x)) ifadesini kullanabiliriz: degeri ikili bir demet.