Hi, Thanks, good to learn more about the context manager.
I have been learning to use it as part of probabilistic programming. Here is a cursory mention of it, by Thomas Wiecki - on Probabilistic Programming Data Science with PyMC3: https://youtu.be/LlzVlqVzeD8?t=732 And here by Eric Ma: "Bayesian Data Science: Probabilistic Programming | SciPy 2019 Tutorial" https://youtu.be/2wvt6GPZl1U?t=6341 Would it be possible to share your notebook so I could play with that context manager code? I looked on your github, but did not see it: https://github.com/4dsolutions?tab=repositories Cheers, Perry On Wed, Oct 30, 2019 at 12:05 PM <edu-sig-requ...@python.org> wrote: > Send Edu-sig mailing list submissions to > edu-sig@python.org > > To subscribe or unsubscribe via the World Wide Web, visit > https://mail.python.org/mailman3/lists/edu-sig.python.org/ > or, via email, send a message with subject or body 'help' to > edu-sig-requ...@python.org > > You can reach the person managing the list at > edu-sig-ow...@python.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Edu-sig digest..." > > Today's Topics: > > 1. Learn Python and what? How to teach about Context Managers (a > proposal) > (kirby urner) > > > ---------------------------------------------------------------------- > > Date: Tue, 29 Oct 2019 22:05:10 -0700 > From: kirby urner <kirby.ur...@gmail.com> > Subject: [Edu-sig] Learn Python and what? How to teach about Context > Managers (a proposal) > To: "edu-sig@python.org" <edu-sig@python.org> > Message-ID: > <CAPJgG3T=YTK-kQWn5k7adFjAdgpV3TAsmZxB1t= > kxnb+bx3...@mail.gmail.com> > Content-Type: multipart/alternative; > boundary="0000000000000ce136059619aebb" > > --0000000000000ce136059619aebb > Content-Type: text/plain; charset="UTF-8" > > Suppose you got this question: > > "I'm new to programming and heard that studying two languages, one front > burner, one back burner, is a best practice, as the benefits you get from > 'compare and contrast' is like when rubbing two sticks together: you get > fire." > > I've been suggesting learning Python (front burner) and... > > Go (interfaces vs types, slices, concurrency, garbage collected, > compiled) > Rust (no garbage collection, immutability the default, learns from Python) > Clojure (LISPish, big on immutability, targets JVM) > J (successor to APL, very different, uses "parts of speech" -- as in > grammar -- as shoptalk) > JavaScript (humongous stacks and frameworks, Node world, great learning > tools) > > what else is especially apropos I wonder. Of course we run up against SQL > and regexes in the course of teaching plain vanilla Python. Ditto HTML/CSS > (more punctuation to learn in your ordinary language class, e.g. English or > French grammar? -- I call these "over the back fence technologies" in the > Youtube below). > > ------ > > On another topic, as an instructor I wonder how to introduce context > managers as a topic and my best answer is: > > Take advantage of the sqlite3 module in Standard Library and show a context > manager like: > > with DB("ufo_reports") as db: > db.useful_tool( ) > > where DB is like: > > import sqlite3 as sql > > class DB: > > def __init__(self, dbname): > self.dbname = dbname + ".db" > > def __enter__(self): > # make the connection, could be to any SQL engine... > self.conn = sql.connect(self.dbname) > self.curs = self.conn.cursor() > return self # <-- to take advantage of related tools > > def useful_tool(self): > # have a number of methods geared for working with this > # specific database, up to you how generic we're trying to be > > # more useful tools go here > > def __exit__(self, *oops): > if self.conn: > self.conn.close() > if oops[0]: > # error handling > # yadda yadda > return False # or True > return True > > I yak about all this on Youtube. > > https://youtu.be/29p3Ckr8SOA > > Kirby > > --0000000000000ce136059619aebb > Content-Type: text/html; charset="UTF-8" > Content-Transfer-Encoding: quoted-printable > > <div dir=3D"ltr"><div class=3D"gmail_default" > style=3D"font-family:arial,he= > lvetica,sans-serif;font-size:small"><br></div><div class=3D"gmail_default" > = > style=3D"font-family:arial,helvetica,sans-serif;font-size:small">Suppose > yo= > u got this question:</div><div class=3D"gmail_default" > style=3D"font-family= > :arial,helvetica,sans-serif;font-size:small"><br></div><div > class=3D"gmail_= > default" > style=3D"font-family:arial,helvetica,sans-serif;font-size:small">&= > quot;I'm new to programming and heard that studying two languages, one > = > front burner, one back burner, is a best practice, as the benefits you get > = > from 'compare and contrast' is like when rubbing two sticks > togethe= > r:=C2=A0you get fire."</div><div class=3D"gmail_default" > style=3D"font= > -family:arial,helvetica,sans-serif;font-size:small"><br></div><div > class=3D= > "gmail_default" > style=3D"font-family:arial,helvetica,sans-serif;font-size:s= > mall">I've been suggesting learning Python (front burner) > and...</div><= > div class=3D"gmail_default" > style=3D"font-family:arial,helvetica,sans-serif= > ;font-size:small"><br></div><div class=3D"gmail_default" > style=3D"font-fami= > ly:arial,helvetica,sans-serif;font-size:small">Go=C2=A0 =C2=A0 > =C2=A0(inter= > faces vs types, slices, concurrency, garbage collected, compiled)=C2=A0=C2= > =A0</div><div class=3D"gmail_default" > style=3D"font-family:arial,helvetica,= > sans-serif;font-size:small">Rust=C2=A0 (no garbage collection, > immutability= > the default, learns from Python)</div><div class=3D"gmail_default" style= > =3D"font-family:arial,helvetica,sans-serif;font-size:small">Clojure > (LISPis= > h, big on immutability, targets JVM)</div><div class=3D"gmail_default" > styl= > e=3D"font-family:arial,helvetica,sans-serif;font-size:small">J=C2=A0 > (succe= > ssor to APL, very different, uses "parts of speech" -- as in > gram= > mar -- as shoptalk)</div><div class=3D"gmail_default" > style=3D"font-family:= > arial,helvetica,sans-serif;font-size:small">JavaScript (humongous stacks > an= > d frameworks, Node world, great learning tools)</div><div > class=3D"gmail_de= > fault" > style=3D"font-family:arial,helvetica,sans-serif;font-size:small"><br= > ></div><div class=3D"gmail_default" > style=3D"font-family:arial,helvetica,sa= > ns-serif;font-size:small">what else is especially apropos I wonder.=C2=A0 > O= > f course we run up against SQL and regexes in the course of teaching plain > = > vanilla Python. Ditto HTML/CSS (more punctuation to learn in your ordinary > = > language class, e.g. English or French grammar? -- I call these "over > = > the back fence technologies" in the Youtube below).</div><div > class=3D= > "gmail_default" > style=3D"font-family:arial,helvetica,sans-serif;font-size:s= > mall"><br></div><div class=3D"gmail_default" > style=3D"font-family:arial,hel= > vetica,sans-serif;font-size:small">------</div><div > class=3D"gmail_default"= > > style=3D"font-family:arial,helvetica,sans-serif;font-size:small"><br></div= > ><div class=3D"gmail_default" > style=3D"font-family:arial,helvetica,sans-ser= > if;font-size:small">On another topic, as an instructor I wonder how to > intr= > oduce context managers as a topic and my best answer is:</div><div > class=3D= > "gmail_default" > style=3D"font-family:arial,helvetica,sans-serif;font-size:s= > mall"><br></div><div class=3D"gmail_default" > style=3D"font-family:arial,hel= > vetica,sans-serif;font-size:small">Take advantage of the sqlite3 module in > = > Standard Library and show a context manager like:</div><div > class=3D"gmail_= > default" > style=3D"font-family:arial,helvetica,sans-serif;font-size:small"><= > br></div><div class=3D"gmail_default" style=3D"font-size:small"><font face= > =3D"monospace">with DB("ufo_reports") as db:</font></div><div > cla= > ss=3D"gmail_default" style=3D"font-size:small"><font > face=3D"monospace">=C2= > =A0 =C2=A0 db.useful_tool( )</font></div><div class=3D"gmail_default" > style= > =3D"font-size:small"><font face=3D"monospace"><br></font></div><div class= > =3D"gmail_default" style=3D"font-size:small"><font face=3D"arial, > sans-seri= > f">where DB is like:</font></div><div class=3D"gmail_default" > style=3D"font= > -size:small"><font face=3D"monospace"><br></font></div><div > class=3D"gmail_= > default" style=3D"font-size:small"><font face=3D"monospace">import sqlite3 > = > as sql</font></div><div class=3D"gmail_default" > style=3D"font-size:small"><= > font face=3D"monospace"><br></font></div><div class=3D"gmail_default" > style= > =3D"font-size:small"><font face=3D"monospace">class DB:</font></div><div > cl= > ass=3D"gmail_default" style=3D"font-size:small"><font > face=3D"monospace"><b= > r></font></div><div class=3D"gmail_default" > style=3D"font-size:small"><font= > face=3D"monospace">=C2=A0 =C2=A0 def __init__(self, > dbname):</font></div><= > div class=3D"gmail_default" style=3D"font-size:small"><font > face=3D"monospa= > ce">=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.dbname =3D dbname=C2=A0+ > ".db&quo= > t;</font></div><div class=3D"gmail_default" > style=3D"font-size:small"><font= > face=3D"monospace"><br></font></div><div class=3D"gmail_default" > style=3D"= > font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 def > __enter__(self)= > :</font></div><div class=3D"gmail_default" style=3D"font-size:small"><font > = > face=3D"monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 # make the connection, > could= > be to any SQL engine...</font></div><div class=3D"gmail_default" > style=3D"= > font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 > self.= > conn =3D sql.connect(self.dbname)</font></div><div class=3D"gmail_default" > = > style=3D"font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 =C2=A0 > =C2= > =A0 self.curs =3D self.conn.cursor()</font></div><div > class=3D"gmail_defaul= > t" style=3D"font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 =C2=A0 > = > =C2=A0 return self=C2=A0 # <-- to take advantage of related > tools</font>= > </div><div class=3D"gmail_default" style=3D"font-size:small"><font > face=3D"= > monospace"><br></font></div><div class=3D"gmail_default" > style=3D"font-size= > :small"><font face=3D"monospace">=C2=A0 =C2=A0 def > useful_tool(self):</font= > ></div><div class=3D"gmail_default" style=3D"font-size:small"><font > face=3D= > "monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 # have a number of methods geared > f= > or working with this</font></div><div class=3D"gmail_default" > style=3D"font= > -size:small"><font face=3D"monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 # > specifi= > c database, up to you how generic we're trying to be</font></div><div > c= > lass=3D"gmail_default" style=3D"font-size:small"><font > face=3D"monospace"><= > br></font></div><div class=3D"gmail_default" > style=3D"font-size:small"><fon= > t face=3D"monospace">=C2=A0 =C2=A0 # more useful tools go > here</font></div>= > <div class=3D"gmail_default" style=3D"font-size:small"><font > face=3D"monosp= > ace"><br></font></div><div class=3D"gmail_default" > style=3D"font-size:small= > "><font face=3D"monospace">=C2=A0 =C2=A0 def __exit__(self, > *oops):</font><= > /div><div class=3D"gmail_default" style=3D"font-size:small"><font > face=3D"m= > onospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 if self.conn:</font></div><div class= > =3D"gmail_default" style=3D"font-size:small"><font face=3D"monospace">=C2= > =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self.conn.close()</font></div><div > c= > lass=3D"gmail_default" style=3D"font-size:small"><font face=3D"monospace">= > =C2=A0 =C2=A0 =C2=A0 =C2=A0 if oops[0]:</font></div><div > class=3D"gmail_def= > ault" style=3D"font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 =C2= > =A0 =C2=A0 =C2=A0 =C2=A0 # error handling</font></div><div > class=3D"gmail_d= > efault" style=3D"font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 = > =C2=A0 =C2=A0 =C2=A0 =C2=A0 # yadda yadda</font></div><div > class=3D"gmail_d= > efault" style=3D"font-size:small"><font face=3D"monospace">=C2=A0 =C2=A0 = > =C2=A0 =C2=A0 =C2=A0 =C2=A0 return False # or True</font></div><div class= > =3D"gmail_default" style=3D"font-size:small"><font face=3D"monospace">=C2= > =A0 =C2=A0 =C2=A0 =C2=A0 return True</font></div><div > class=3D"gmail_defaul= > t" > style=3D"font-family:arial,helvetica,sans-serif;font-size:small"><br></d= > iv><div class=3D"gmail_default" > style=3D"font-family:arial,helvetica,sans-s= > erif;font-size:small">I yak about all this on Youtube.</div><div > class=3D"g= > mail_default" > style=3D"font-family:arial,helvetica,sans-serif;font-size:sma= > ll"><br></div><div class=3D"gmail_default" > style=3D"font-family:arial,helve= > tica,sans-serif;font-size:small"><a href=3D"https://youtu.be/29p3Ckr8SOA > ">h= > ttps://youtu.be/29p3Ckr8SOA</a><br></div><div class=3D"gmail_default" > style= > =3D"font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div > = > class=3D"gmail_default" > style=3D"font-family:arial,helvetica,sans-serif;fon= > t-size:small">Kirby</div><div class=3D"gmail_default" > style=3D"font-family:= > arial,helvetica,sans-serif;font-size:small"><br></div><div > class=3D"gmail_d= > efault" > style=3D"font-family:arial,helvetica,sans-serif;font-size:small"><b= > r></div></div> > > --0000000000000ce136059619aebb-- > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > Edu-sig mailing list -- edu-sig@python.org > To unsubscribe send an email to edu-sig-le...@python.org > https://mail.python.org/mailman3/lists/edu-sig.python.org/ > > > ------------------------------ > > End of Edu-sig Digest, Vol 192, Issue 9 > *************************************** >
_______________________________________________ Edu-sig mailing list -- edu-sig@python.org To unsubscribe send an email to edu-sig-le...@python.org https://mail.python.org/mailman3/lists/edu-sig.python.org/