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&#39;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 &#39;compare and contrast&#39; is like when rubbing two sticks
> togethe=
> r:=C2=A0you get fire.&quot;</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&#39;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 &quot;parts of speech&quot; -- 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 &quot;over
> =
> the back fence technologies&quot; 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(&quot;ufo_reports&quot;) 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+
> &quot;.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 # &lt;-- 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&#39;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/

Reply via email to