2017 jan-18 meetup-functional_python
-
Upload
michael-bright -
Category
Technology
-
view
24 -
download
0
Transcript of 2017 jan-18 meetup-functional_python
![Page 1: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/1.jpg)
FunctionalPython
PythonGrenobleMeetup,18Jan2017
MikeBright, @mjbright
@mjbright
![Page 2: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/2.jpg)
Whoareyou?
DoyouknoworuseFunctionalProgramming?
inwhatlanguages?
FunctionalPython-TourdeTable
@mjbright
![Page 3: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/3.jpg)
PleaseChallengeme!!I'mnotanFPexpert
DefinitionsofFParediscutable
@mjbright
![Page 4: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/4.jpg)
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
WhatisFunctionalProgramming?
![Page 5: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/5.jpg)
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.
WhatisFunctionalProgramming?
![Page 6: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/6.jpg)
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.
Apurefunctiontakesasetofarguments(x)andreturnsasetofvalues(y).Callingthefunctionwiththesameargumentswillalwaysproducethesameresult.
WhatisFunctionalProgramming?
![Page 7: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/7.jpg)
WikipediaFunctional
Programming
Thereisnoabsolutedefinition(butcommonprinciples).
Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.
Apurefunctiontakesasetofarguments(x)andreturnsasetofvalues(y).Callingthefunctionwiththesameargumentswillalwaysproducethesameresult.
Ithasnosideeffectsonit'senvironment
noreassignmentofvariables(notvariable!)noprints,orwritestodisk!!
Thisdoesn'tsoundveryusefulthough.
WhatisFunctionalProgramming?
![Page 8: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/8.jpg)
WikipediaFunctional
Programming
LookingatFPconceptsasperwikipediapage
Functionallanguagesprovidesupportfor
1st-classandhigher-orderfunctions
functionsareobjects,canbepassedasargumentscanreturnnewfunctionsfromafunction
Purefunctions
nosideeffects(memoryorI/O)canbereasonedabout
provableresultsoptimizationspossible
Recursion
"simulatelooping"byaccumulatingresultsTailrecursionoptimizationpossible(compiler)Higherorderfunctionscanfactoroutrecursion
WhatisFunctionalProgramming?-2
![Page 9: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/9.jpg)
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
![Page 10: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/10.jpg)
WikipediaFunctional
Programming
DataStructures
Linked-listsratherthanarrays(randomaccess)Operationsonlistssuchas
filter,map,reduce,flatMap
Monads(Collectionswithcertainoperations)
filter,map,flatMapusedbysomelanguagestohandle(isolate)statefuloperationssuchasi/o
WhatisFunctionalProgramming?-4
![Page 11: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/11.jpg)
Inpracticelanguagesaremoreorless"functional".
SomelanguagessuchasHaskellareclosertothe"ideal"ofapurefunctionallanguage.
Purelanguageshavetheadvantageofbeingprovablycorrect.
Otherlanguagesmixparadigms.
Scala:OOP,FPPython:OOP,FPJavaScript:"OOP",FPJava:OOP,FP
FunctionalProgrammingLanguages
![Page 12: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/12.jpg)
Inpracticelanguagesaremoreorless"functional".
SomelanguagessuchasHaskellareclosertothe"ideal"ofapurefunctionallanguage.
Purelanguageshavetheadvantageofbeingprovablycorrect.
Otherlanguagesmixparadigms.
Scala:OOP,FPPython:OOP,FPJavaScript:"OOP",FPJava:OOP,FP
Let'scompareseverallanguages.
WikipediaFunctionalProgLanugauescomparison
FunctionalProgrammingLanguages
![Page 13: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/13.jpg)
TheFunctionalparadigmcanbemixedwithotherswhilstencouraginggoodprogrammingpractices.
Itfacilitatesunderstandinganddebuggingofcode.
FunctionalProgrammingLanguages-2
![Page 14: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/14.jpg)
TheFunctionalparadigmcanbemixedwithotherswhilstencouraginggoodprogrammingpractices.
Itfacilitatesunderstandinganddebuggingofcode.
Note:SomesaythatObject-OrientedProgrammingiscontradictorytoFunctionalProgrammingbecauseofit'sfocusoninstancevariablesandtheuseofgettersandsetters.
OthersseethisasahierarchyofabstractionsFPaboveOOPabovelibraries(procedures).
FunctionalProgrammingLanguages-2
![Page 15: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/15.jpg)
StackOverflow:FunctionalprogrammingvsObjectOrientedprogramming
OO:goodwhenfixedsetofoperationsonthings,andyouprimarilyaddnewthings.FP:goodwhenfixedsetofthings,andyouprimarilyaddnewoperationsonexistingthings.
ButwhenyouneedtoaddnewoperationstoOO,ornewthingstoFPweencounterthe"expressionproblem".
Scalaprovidesaveryusablemixofbothparadigmsandmixinshelpaddressthe"expressionproblem".
FunctionalProgrammingLanguages-3
![Page 16: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/16.jpg)
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
![Page 17: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/17.jpg)
Pythonencouragesfunctionalprogrammingby
Tuples,Namedtuplesimmutabledatatypes.ListandDictionaryComprehensions
[x*2forxinrange(3)]==>[014]{x:x*2forxinrange(3)}==>[014]
GeneratorComprehensions(lazyevaluation)(x*2/0forxinrange(3))
MonadsPyMonadmodule
FunctionalProgramminginPython
![Page 18: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/18.jpg)
REMOVEFunctionalProgrammingFunctionalProgrammingFeatures
1st-classfunctionsImmutabledataStrictandnon-strictevaluationRecursionFunctionaltypesystemsAdvancedconcepts
Functions,IteratorsandGeneratorsCollectionsHigher-orderFunctionsRecursionsandReductionsAdditionalTupleTechniquesItertoolsModuleFunctoolsModuleDecoratorDesignTechniquesMultiprocessingandThreadingModulesConditionalExpressionsandOperatorModulesThePyMonadLibraryAFunctionalapproachtoWebServicesOptimizationsandImprovements
FunctionalPython-PacktPubIndex
@mjbright
![Page 19: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/19.jpg)
REMOVEWhatisFunctionalProgramming?AvoidingFlowControl
EncapsulationComprehensionsRecursionEliminatingLoops
CallablesNamedFunctionsandLambdasClosuresandCallableInstancesMethodsofClassesMultipleDispatch
LazyEvaluationTheIteratorProtocolModule:Itertools
Higher-orderFunctionsUtilityHigher-orderFunctionsTheoperatormoduleThefunctoolsmoduleDecorators
FunctionalPython-OReillyIndex
@mjbright
![Page 21: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/21.jpg)
Resourcespython.com
FunctionalProgrammingHOWTOHOWTO
OReilly"FunctionalProgramminginPython"
Freedownload
PacktPub"FunctionalPythonProgramming"
Info
github.comAwesomeFunctionalPython
Sources
@mjbright
![Page 22: 2017 jan-18 meetup-functional_python](https://reader031.fdocuments.net/reader031/viewer/2022030314/589986051a28abb97c8b6805/html5/thumbnails/22.jpg)
Thankyou!
Questions?