2017 jan-18 meetup-functional_python
TRANSCRIPT
FunctionalPython
PythonGrenobleMeetup,18Jan2017
MikeBright, @mjbright
@mjbright
Whoareyou?
DoyouknoworuseFunctionalProgramming?
inwhatlanguages?
FunctionalPython-TourdeTable
@mjbright
PleaseChallengeme!!I'mnotanFPexpert
DefinitionsofFParediscutable
@mjbright
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
WhatisFunctionalProgramming?
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.
WhatisFunctionalProgramming?
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.
Apurefunctiontakesasetofarguments(x)andreturnsasetofvalues(y).Callingthefunctionwiththesameargumentswillalwaysproducethesameresult.
WhatisFunctionalProgramming?
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.
Apurefunctiontakesasetofarguments(x)andreturnsasetofvalues(y).Callingthefunctionwiththesameargumentswillalwaysproducethesameresult.
Ithasnosideeffectsonit'senvironment
noreassignmentofvariables(notvariable!)noprints,orwritestodisk!!
Thisdoesn'tsoundveryusefulthough.
WhatisFunctionalProgramming?
WikipediaFunctional
Programming
LookingatFPconceptsasperwikipediapage
Functionallanguagesprovidesupportfor
1st-classandhigher-orderfunctions
functionsareobjects,canbepassedasargumentscanreturnnewfunctionsfromafunction
Purefunctions
nosideeffects(memoryorI/O)canbereasonedabout
provableresultsoptimizationspossible
Recursion
"simulatelooping"byaccumulatingresultsTailrecursionoptimizationpossible(compiler)Higherorderfunctionscanfactoroutrecursion
WhatisFunctionalProgramming?-2
WikipediaFunctional
Programming
Strict(eager)versusnon-strict(lazy)evaluation
Shouldlength([2+1,3*2,1/0,5-4])complete?lazyisdefaultinsomelanguages(e.g.Haskell)
Typesystems
tendtobestronglytyped(maybeimplicit)static(ML,Scala,Haskell)ordynamic(JS,Lisp,Python)
Statictypingcanfacilitatemathematicalproofs"caseclasses"
Referentialtransparency
Nostateismodified:functionsaretransparentx=x*10isnotlegalFunctionsreturn/accumulatenewvalues
WhatisFunctionalProgramming?-3
WikipediaFunctional
Programming
DataStructures
Linked-listsratherthanarrays(randomaccess)Operationsonlistssuchas
filter,map,reduce,flatMap
Monads(Collectionswithcertainoperations)
filter,map,flatMapusedbysomelanguagestohandle(isolate)statefuloperationssuchasi/o
WhatisFunctionalProgramming?-4
Inpracticelanguagesaremoreorless"functional".
SomelanguagessuchasHaskellareclosertothe"ideal"ofapurefunctionallanguage.
Purelanguageshavetheadvantageofbeingprovablycorrect.
Otherlanguagesmixparadigms.
Scala:OOP,FPPython:OOP,FPJavaScript:"OOP",FPJava:OOP,FP
FunctionalProgrammingLanguages
Inpracticelanguagesaremoreorless"functional".
SomelanguagessuchasHaskellareclosertothe"ideal"ofapurefunctionallanguage.
Purelanguageshavetheadvantageofbeingprovablycorrect.
Otherlanguagesmixparadigms.
Scala:OOP,FPPython:OOP,FPJavaScript:"OOP",FPJava:OOP,FP
Let'scompareseverallanguages.
WikipediaFunctionalProgLanugauescomparison
FunctionalProgrammingLanguages
TheFunctionalparadigmcanbemixedwithotherswhilstencouraginggoodprogrammingpractices.
Itfacilitatesunderstandinganddebuggingofcode.
FunctionalProgrammingLanguages-2
TheFunctionalparadigmcanbemixedwithotherswhilstencouraginggoodprogrammingpractices.
Itfacilitatesunderstandinganddebuggingofcode.
Note:SomesaythatObject-OrientedProgrammingiscontradictorytoFunctionalProgrammingbecauseofit'sfocusoninstancevariablesandtheuseofgettersandsetters.
OthersseethisasahierarchyofabstractionsFPaboveOOPabovelibraries(procedures).
FunctionalProgrammingLanguages-2
StackOverflow:FunctionalprogrammingvsObjectOrientedprogramming
OO:goodwhenfixedsetofoperationsonthings,andyouprimarilyaddnewthings.FP:goodwhenfixedsetofthings,andyouprimarilyaddnewoperationsonexistingthings.
ButwhenyouneedtoaddnewoperationstoOO,ornewthingstoFPweencounterthe"expressionproblem".
Scalaprovidesaveryusablemixofbothparadigmsandmixinshelpaddressthe"expressionproblem".
FunctionalProgrammingLanguages-3
PythonmixesseveralprogrammingstylessuchasImperative,OOP,Functional
Pythonhadfirstclassfunctionsfromits'inception.
Supportlateraddedfor"lambda","map","reduce",and"filter"in1994,aswellasclosuresinPython2.2.
lambdafunctionsareconvenientunnamedfunctionsdeclaredinasingleline(orargument)arepurefunctions,e.g.
incr=lambdax:returnx+1map(fn,iterable,...)
Applyfntoeachitem,returnresultelementsreduce(fn,iterable,[init])
Applyfntoeachitem,combiningresultelementsfilter(fn,iterable)
Usefntoselectornoteachitem,returnresultelements
Python3relegated"reduce"tothefunctoolsstandardlibrarymodule.
FunctionalPython
Pythonencouragesfunctionalprogrammingby
Tuples,Namedtuplesimmutabledatatypes.ListandDictionaryComprehensions
[x*2forxinrange(3)]==>[014]{x:x*2forxinrange(3)}==>[014]
GeneratorComprehensions(lazyevaluation)(x*2/0forxinrange(3))
MonadsPyMonadmodule
FunctionalProgramminginPython
REMOVEFunctionalProgrammingFunctionalProgrammingFeatures
1st-classfunctionsImmutabledataStrictandnon-strictevaluationRecursionFunctionaltypesystemsAdvancedconcepts
Functions,IteratorsandGeneratorsCollectionsHigher-orderFunctionsRecursionsandReductionsAdditionalTupleTechniquesItertoolsModuleFunctoolsModuleDecoratorDesignTechniquesMultiprocessingandThreadingModulesConditionalExpressionsandOperatorModulesThePyMonadLibraryAFunctionalapproachtoWebServicesOptimizationsandImprovements
FunctionalPython-PacktPubIndex
@mjbright
REMOVEWhatisFunctionalProgramming?AvoidingFlowControl
EncapsulationComprehensionsRecursionEliminatingLoops
CallablesNamedFunctionsandLambdasClosuresandCallableInstancesMethodsofClassesMultipleDispatch
LazyEvaluationTheIteratorProtocolModule:Itertools
Higher-orderFunctionsUtilityHigher-orderFunctionsTheoperatormoduleThefunctoolsmoduleDecorators
FunctionalPython-OReillyIndex
@mjbright
Resourcespython.com
FunctionalProgrammingHOWTOHOWTO
OReilly"FunctionalProgramminginPython"
Freedownload
PacktPub"FunctionalPythonProgramming"
Info
github.comAwesomeFunctionalPython
Sources
@mjbright
Thankyou!
Questions?