Тема: Чого вам не вистачає в Пітоні? Ділимося власними костилями
Так сталося, що свого часу я захопився ліспом (Scheme та Clojure, на останньому настворював досить чимало коду), але зараз мені більше імпонує Python, тож хотілось би якось прочитати й зрозуміти свої минулі напрацювання переписати старий код на нього.
Чого не вистачає і в чому взагалі складність? Перш за все, ліспоїдні мови є переважно функціональними, а Python, хоч і використовує чимало можливостей ФП, в основі має процедурний код. Досить сказати, що повноцінних анонімних функцій у синтасисі пітона не передбачено (лише лямбда, що може нести в собі лише один вираз) — у той час, як у ліспі вся програма може являти собою один великий вираз із включеними в нього алгоритмічними елементами. Не вистачає й ліспівських макросів (було б надто круто, якби нелісп використовував щось подібне) — таким чином, відсутні синтаксичні засоби можна замінити лише або функціями, або костилями.
Втім, не все так погано. Наприклад, можна замінити ліспівський let лямбдою:
;;SCHEME:
(let ((x 7) 
      (y 8))
      (let ((z (* x y)))
           (* x y z)))можна переписати, використавши виклик лямбди:
# Python:
(lambda x=8, 
        y=9: 
        (lambda z=x*y:
                x*y*z)())()Згадану вище проблему кількох інструкцій в одній лямбді можна обійти, використавши список чи кортеж (неоптимально й костильно, та все ж...):
s=(lambda:
(print('Hello, my friend!'), 
 print('What is your name?'), 
 input()) 
           [-1]) # беремо результат лише останньої інструкції(Далі буде…)


