2017 jan-18 meetup-functional_python

22
Functional Python Python Grenoble Meetup, 18 Jan 2017 Mike Bright, @mjbright @mjbright

Upload: michael-bright

Post on 13-Apr-2017

22 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 2017 jan-18 meetup-functional_python

FunctionalPython

PythonGrenobleMeetup,18Jan2017

MikeBright, @mjbright

@mjbright

Page 2: 2017 jan-18 meetup-functional_python

Whoareyou?

DoyouknoworuseFunctionalProgramming?

inwhatlanguages?

FunctionalPython-TourdeTable

@mjbright

Page 3: 2017 jan-18 meetup-functional_python

PleaseChallengeme!!I'mnotanFPexpert

DefinitionsofFParediscutable

@mjbright

Page 4: 2017 jan-18 meetup-functional_python

WikipediaFunctional

Programming

Thereisnoabsolutedefinition(butcommonprinciples).

WhatisFunctionalProgramming?

Page 5: 2017 jan-18 meetup-functional_python

WikipediaFunctional

Programming

Thereisnoabsolutedefinition(butcommonprinciples).

Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.

WhatisFunctionalProgramming?

Page 6: 2017 jan-18 meetup-functional_python

WikipediaFunctional

Programming

Thereisnoabsolutedefinition(butcommonprinciples).

Basicprincipleisfunctionswithoutsideeffectsorstate(variables)-unlikeImperativeProgramming.

Apurefunctiontakesasetofarguments(x)andreturnsasetofvalues(y).Callingthefunctionwiththesameargumentswillalwaysproducethesameresult.

WhatisFunctionalProgramming?

Page 7: 2017 jan-18 meetup-functional_python

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

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

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

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

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

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

TheFunctionalparadigmcanbemixedwithotherswhilstencouraginggoodprogrammingpractices.

Itfacilitatesunderstandinganddebuggingofcode.

FunctionalProgrammingLanguages-2

Page 14: 2017 jan-18 meetup-functional_python

TheFunctionalparadigmcanbemixedwithotherswhilstencouraginggoodprogrammingpractices.

Itfacilitatesunderstandinganddebuggingofcode.

Note:SomesaythatObject-OrientedProgrammingiscontradictorytoFunctionalProgrammingbecauseofit'sfocusoninstancevariablesandtheuseofgettersandsetters.

OthersseethisasahierarchyofabstractionsFPaboveOOPabovelibraries(procedures).

FunctionalProgrammingLanguages-2

Page 15: 2017 jan-18 meetup-functional_python

StackOverflow:FunctionalprogrammingvsObjectOrientedprogramming

OO:goodwhenfixedsetofoperationsonthings,andyouprimarilyaddnewthings.FP:goodwhenfixedsetofthings,andyouprimarilyaddnewoperationsonexistingthings.

ButwhenyouneedtoaddnewoperationstoOO,ornewthingstoFPweencounterthe"expressionproblem".

Scalaprovidesaveryusablemixofbothparadigmsandmixinshelpaddressthe"expressionproblem".

FunctionalProgrammingLanguages-3

Page 16: 2017 jan-18 meetup-functional_python

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

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

REMOVEFunctionalProgrammingFunctionalProgrammingFeatures

1st-classfunctionsImmutabledataStrictandnon-strictevaluationRecursionFunctionaltypesystemsAdvancedconcepts

Functions,IteratorsandGeneratorsCollectionsHigher-orderFunctionsRecursionsandReductionsAdditionalTupleTechniquesItertoolsModuleFunctoolsModuleDecoratorDesignTechniquesMultiprocessingandThreadingModulesConditionalExpressionsandOperatorModulesThePyMonadLibraryAFunctionalapproachtoWebServicesOptimizationsandImprovements

FunctionalPython-PacktPubIndex

@mjbright

Page 19: 2017 jan-18 meetup-functional_python

REMOVEWhatisFunctionalProgramming?AvoidingFlowControl

EncapsulationComprehensionsRecursionEliminatingLoops

CallablesNamedFunctionsandLambdasClosuresandCallableInstancesMethodsofClassesMultipleDispatch

LazyEvaluationTheIteratorProtocolModule:Itertools

Higher-orderFunctionsUtilityHigher-orderFunctionsTheoperatormoduleThefunctoolsmoduleDecorators

FunctionalPython-OReillyIndex

@mjbright

Page 20: 2017 jan-18 meetup-functional_python

FunctionalPythonDemo

Notebook

Page 21: 2017 jan-18 meetup-functional_python

Resourcespython.com

FunctionalProgrammingHOWTOHOWTO

OReilly"FunctionalProgramminginPython"

Freedownload

PacktPub"FunctionalPythonProgramming"

Info

github.comAwesomeFunctionalPython

Sources

@mjbright

Page 22: 2017 jan-18 meetup-functional_python

Thankyou!

Questions?