2017 jan-18 meetup-functional_python

Post on 13-Apr-2017

23 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

FunctionalPythonDemo

Notebook

Resourcespython.com

FunctionalProgrammingHOWTOHOWTO

OReilly"FunctionalProgramminginPython"

Freedownload

PacktPub"FunctionalPythonProgramming"

Info

github.comAwesomeFunctionalPython

Sources

@mjbright

Thankyou!

Questions?

top related