to by šlo, ale bez podpory odsazování v IDE to není moc použitelné na delší funkce
import hy def fn(s): return lambda it: hy.eval(hy.read_str(s), {'it': it}) >>> list(map(fn('(* it 2)'), range(10))) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] def q(s): return hy.eval(hy.read_str(s)) >>> import functools >>> functools.reduce(q('*'), range(1,10)) # faktorial 362880
PyCharm vám to odsadí i obarví v rámci inline kódu, stačí pak tu sekvenci schovat do funkce a tu volat:
defhy("
(fn [x] + x 1)
")
Ale nijak si tím nepomůžete protože
lambda x: x+1
se moc neliší od zápisu
fn [x] + x 1
Liší se jen v délce klíčového slova, mě se osvědčilo spíše COBOLovské řazení a obdoba příkazu PERFORM
def fn1(x):
return x + 1
def fn2(x):
return x + n
map(fn2, map(fn1, list_data))
napadaji me jakekoli aplikace map a filter, popr. sort a dost jsem je pouzival pri registraci callback funkci pri zahazovani nepotrebnych parametru. Neco na zpusob:
on_something(lambda event: callback_function())
nebo naopak pro pridani uzaveru:
on_something(lambda: callback_function(uzaver))
samozrejme lambdy jako takove nejsou ze striktniho pohledu v jazyku typu Python nutne, ale to se da rict i naopak - funkce nejsou nutne, protoze lambdu jde priradit do promenne a tak ji "pojmenovat"
původní příkaz PERFORM :-) Tělo příkazu či cyklu mimo samotný příkaz.
viz
https://www.google.com/imgres?imgurl=http://www.mainframestechhelp.com/tutorials/cobol/cobol_common_files/images/perform_through_code.jpg&imgrefurl=http://www.mainframestechhelp.com/tutorials/cobol/cobol-perform-through.htm&h=862&w=1117&tbnid=KYEtR6e5ECiyVM:&tbnh=154&tbnw=199&usg=__OQ8AkPVsPFLKOqQr3ZNORSuzw14%3D&vet=10ahUKEwin2v--8JnbAhXDCSwKHfj3BpEQ_B0I8AEwEw..i&docid=gSfBS4Y6NTrybM&itg=1&client=ubuntu&sa=X&ved=0ahUKEwin2v--8JnbAhXDCSwKHfj3BpEQ_B0I8AEwEw#h=862&imgdii=KYEtR6e5ECiyVM:&tbnh=154&tbnw=199&vet=10ahUKEwin2v--8JnbAhXDCSwKHfj3BpEQ_B0I8AEwEw..i&w=1117