Katkıda bulunabildiğim halde satır kırıcı kullanıyorum:
x = lambda x,y: x-y if x<y \
else y-x if y<x \
else 0
Python'un oneliners yazabileceği en güzel şeyi, örneğin:
a=b=0; c=b+a; d = a+b**2 #etc etc
Ve lambda çok güçlüdür, ancak 1 bütün fonksiyonun yerine geçmek için tasarlanmamıştır, demek istediğin gibi kesebilirsin (yukarıdaki meslektaştan örnek ödünç alıyorsun):
makeTag = lambda tagName: "<{}>".format(tagName)
closeTag = lambda tagName: makeTag("/"+str(tagName))
openTag = lambda tagName: makeTag(tagName)
writeHMTLline = lambda tag,content: ""+opetTag(tag)+str(content)+closeTag(tag)
Ama gerçekten böyle yapmak istiyor musun? Bir süre sonra çoğunlukla okunamaz durumdadır, ipin çözülmemiş ucu ile başlayan başlangıcına ulaşmak gibidir.
Lambdalar, sadece bir fonksiyon olarak ele alınır, harita üzerinde, Fonksiyonel Yönelimli Programlamada (diğer şeylerin yanı sıra) fonksiyonları filtreler ve azaltır. Örneğin, tamsayı olan ve 2 ile bölünebilen değerlerin karakter değerlerini alma
chrDev2 = lambda INT: chr(INT) if isinstance(INT,int) and INT%2==0 else INT
someStringList = map( chrDev2, range(30) )
>>> ['\x00', 1, '\x02', 3, '\x04', 5, '\x06', 7, '\x08', 9, '\n', 11, '\x0c', 13, '\x0e', 15, '\x10', 17, '\x12', 19, '\x14', 21, '\x16', 23, '\x18', 25, '\x1a', 27, '\x1c', 29]
İşlev ifadeleri karmaşık işlev tanımlayarak (veya daha fazla ve birkaç lambda kullanarak ve başka bir lambda koyarak) kullanabilirsiniz.
def someAnon(*args): return sum(list(args))
defAnon = lambda list: [ x*someAnon(*list) for x in list]
ancak Python'un fonksiyon ifadeleri başka bir şekilde de desteklemektedir: -let'ler, çağrılan bir işleve sahip superAwesomeFunction
olduğunuzu ve bu işlevin bazı süper harika şeyler yapabileceğini söyler, şöyle bir değişkeni atayamazsınız, şöyle:
SAF = superAwesomeFunction # there is no () at the end,
Yani şimdi SAF'ı aradığınızda superAwesomeFunction veya yöntemini çağıracaksınız. Lib klasörünüzde arama yaparsanız, python __builtin__
modüllerinin çoğunun bu şekilde yazıldığını görebilirsiniz. Bu yapılır, çünkü bazen kullanıcı tarafından kullanılabilecek kadar gerekli olmayan, belirli bir görevi yerine getiren bazı işlevlere ihtiyaç duyacaksınız, ancak bu birkaç işlev için gereklidir. O zaman "superAwesomeFunction" adında 2 işleve sahip olamayacaksınız, "superAwesomeFunctionDoingBasicStuf" ve "realSuperAwesomeFunction" seçeneğine sahip olabilirsiniz ve "superAwesomeFunction" değişkenini "realSuperAwesomeFunction" yerine koyarsınız ve bitirdiniz.
Sen konsolunda girerek ithal edilen modüllerin yerini bulabilir importedModule.__file__
(gerçek örnek import os;os.__file__
), ve sadece bu dizin denilen dosyası için takip importedModule.py ve editörü açın ve kendi "bilgi" maksimize nasıl bulmak.
Umarım bu size ve belki de diğer meslektaşlarına dertte olur.