<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Real Python</title>
  <link href="https://realpython.com/atom.xml" rel="self"/>
  <link href="https://realpython.com/"/>
  <updated>2022-07-06T14:00:00+00:00</updated>
  <id>https://realpython.com/</id>
  <author>
    <name>Real Python</name>
  </author>

  
    <entry>
      <title>Python News: What&#x27;s New From June 2022</title>
      <id>https://realpython.com/python-news-june-2022/</id>
      <link href="https://realpython.com/python-news-june-2022/"/>
      <updated>2022-07-06T14:00:00+00:00</updated>
      <summary>June 2022 was full of exciting Python news! Quickly get up to speed on what&#x27;s been happening in the world of Python in the past month. You&#x27;ll read about the PSF elections, PEP 691, the 2021 Python Developers Survey results, and more.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;&lt;strong&gt;June 2022&lt;/strong&gt; brought a flurry of exciting news for the Python community! The PSF received funding for a new role focused on security, and held elections for four seats on the board of directors. Results from two important &lt;strong&gt;developer surveys&lt;/strong&gt; were published, and new versions of both Python and some popular packages saw the light of day.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PEP 691&lt;/strong&gt; got accepted, extending the Simple API for Python packaging indexes. With the Python 3.12 change page live, you can now start hitting refresh to be the first to know about upcoming features and deprecations in next year’s major Python release.&lt;/p&gt;
&lt;p&gt;With summer in full swing, there have also been more in-person meetups in the Python community, and others are still to come.&lt;/p&gt;
&lt;p&gt;Let’s dive into the biggest &lt;strong&gt;Python news&lt;/strong&gt; from the past month!&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;&lt;p&gt;&lt;strong&gt;Join Now:&lt;/strong&gt; &lt;a href=&quot;&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-newsletter&quot; data-focus=&quot;false&quot;&gt;Click here to join the Real Python Newsletter&lt;/a&gt; and you&#x27;ll never miss another Python tutorial, course update, or post.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;the-python-software-foundation-has-news&quot;&gt;The Python Software Foundation Has News&lt;a class=&quot;headerlink&quot; href=&quot;#the-python-software-foundation-has-news&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.python.org/psf/&quot;&gt;Python Software Foundation (PSF)&lt;/a&gt; is the organization behind Python. It aims to “promote, protect, and advance the Python programming language, and to support and facilitate the growth of a &lt;a href=&quot;https://www.python.org/psf/diversity/&quot;&gt;diverse&lt;/a&gt; and international community of Python programmers” (&lt;a href=&quot;https://www.python.org/psf/mission/&quot;&gt;Source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;If you haven’t heard of the PSF before, make sure to check out &lt;a href=&quot;https://pyfound.blogspot.com/&quot;&gt;the PSF blog&lt;/a&gt;, which you’ll see linked a few times in this news article.&lt;/p&gt;
&lt;h3 id=&quot;psf-elects-new-board-directors&quot;&gt;PSF Elects New Board Directors&lt;a class=&quot;headerlink&quot; href=&quot;#psf-elects-new-board-directors&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Elections to fill four seats on the PSF board of directors took place during &lt;a href=&quot;https://pyfound.blogspot.com/2022/06/the-psf-board-election-is-open.html&quot;&gt;the second half of June&lt;/a&gt;. A term for a seat on the PSF board of directors lasts for three years, and directors are eligible for reelection. To vote in this election, you had to be a registered PSF member &lt;a href=&quot;https://www.python.org/psf/membership/#what-membership-classes-are-there&quot;&gt;with voting rights&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This year, there were &lt;a href=&quot;https://www.python.org/nominations/elections/2022-python-software-foundation-board/nominees/&quot;&gt;a lot of nominees&lt;/a&gt;, and the &lt;a href=&quot;https://pyfound.blogspot.com/2022/07/board-election-results-for-2022.html&quot;&gt;seats were filled&lt;/a&gt; with the four nominees who received the most votes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/nominations/elections/2022-python-software-foundation-board/nominees/kushal-das/&quot;&gt;Kushal Das&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/nominations/elections/2022-python-software-foundation-board/nominees/jannis-leidel/&quot;&gt;Jannis Leidel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/nominations/elections/2022-python-software-foundation-board/nominees/dawn-wages/&quot;&gt;Dawn Wages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.python.org/nominations/elections/2022-python-software-foundation-board/nominees/simon-willison/&quot;&gt;Simon Willison&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you’re curious what it means to serve on the PSF board and &lt;a href=&quot;https://wiki.python.org/moin/PythonSoftwareFoundation/DutiesAndResponsibilitiesOfDirectors&quot;&gt;what a director’s duties&lt;/a&gt; are, then you can watch a video in which three board members describe &lt;a href=&quot;https://www.youtube.com/watch?v=ZLKj6FaQA4M&quot;&gt;Life as a Python Software Foundation Director&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Congratulations to the new and returning board directors, and big thanks to all the other nominees for their continued engagement in the Python community.&lt;/p&gt;
&lt;h3 id=&quot;psf-releases-2021-annual-report&quot;&gt;PSF Releases 2021 Annual Report&lt;a class=&quot;headerlink&quot; href=&quot;#psf-releases-2021-annual-report&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This month, the PSF also &lt;a href=&quot;https://pyfound.blogspot.com/2022/06/annual-report-2021.html&quot;&gt;released its 2021 annual report&lt;/a&gt;. Last year marked the twentieth anniversary of the Python Software Foundation, and the thirtieth anniversary for Python itself:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/psf-report-2021.84df1b852d49.png&quot; target=&quot;_blank&quot;&gt;&lt;img loading=&quot;lazy&quot; class=&quot;img-fluid mx-auto d-block w-66&quot; src=&quot;https://files.realpython.com/media/psf-report-2021.84df1b852d49.png&quot; width=&quot;2212&quot; height=&quot;1708&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/psf-report-2021.84df1b852d49.png&amp;amp;w=553&amp;amp;sig=334df3a031651b9826b8681457eeb910d95c50c2 553w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/psf-report-2021.84df1b852d49.png&amp;amp;w=1106&amp;amp;sig=39975d52b33eea557fc4e4595ad8105eca2e0dc0 1106w, https://files.realpython.com/media/psf-report-2021.84df1b852d49.png 2212w&quot; sizes=&quot;75vw&quot; alt=&quot;A page from the annual report of the PSF for 2021, showing some highlights of the year&quot; data-asset=&quot;4465&quot;&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p&gt;The report highlights how four team members joined the PSF in new roles during 2021. Python packaging and CPython itself received strong support through the dedicated roles of &lt;a href=&quot;https://realpython.com/python-news-august-2021/#python-has-a-packaging-project-manager&quot;&gt;Packaging Project Manager&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/python-news-july-2021/#cpython-has-a-full-time-developer-in-residence&quot;&gt;Developer in Residence&lt;/a&gt;. Funding for event grants started up again, with a focus on online events. The PSF also organized PyCon US 2021 as a fully online event.&lt;/p&gt;
&lt;p&gt;If you’re curious to learn more, then you can &lt;a href=&quot;https://www.python.org/psf/annual-report/2021/&quot;&gt;read the full report&lt;/a&gt; online.&lt;/p&gt;
&lt;h3 id=&quot;openssf-funds-a-security-role-for-the-python-ecosystem&quot;&gt;OpenSSF Funds A Security Role for the Python Ecosystem&lt;a class=&quot;headerlink&quot; href=&quot;#openssf-funds-a-security-role-for-the-python-ecosystem&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Sadly not for the first time, there was another set of &lt;a href=&quot;https://blog.sonatype.com/python-packages-upload-your-aws-keys-env-vars-secrets-to-web&quot;&gt;malicious packages identified on PyPI&lt;/a&gt;. Because Python is used by such a large community worldwide, such attacks can have dangerous and wide-reaching consequences. In the news article linked above, you’ll see that these packages aimed to expose programmers’ secrets.&lt;/p&gt;
&lt;p&gt;Therefore, it’s great news that the &lt;a href=&quot;https://openssf.org/&quot;&gt;Open Source Security Foundation (OpenSSF)&lt;/a&gt; has decided to fund a new role in the PSF.&lt;/p&gt;
&lt;p&gt;The person filling the role will have a chance to positively impact the current state of security in the wider Python ecosytem as they “provide security expertise for Python, the Python Package Index (PyPI), and the rest of the Python ecosystem” (&lt;a href=&quot;https://openssf.org/blog/2022/06/20/openssf-funds-python-and-eclipse-foundations-and-acquires-sos-dev-through-alpha-omega-project/&quot;&gt;Source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The grant money will also be used to complete a security audit on critical open source infrastructure in the Python ecosystem, such as PyPI and the CPython source code itself. Having a dedicated role and financing will hopefully go a long way in boosting security for Python’s large global community.&lt;/p&gt;
&lt;h2 id=&quot;survey-results-are-in&quot;&gt;Survey Results Are In!&lt;a class=&quot;headerlink&quot; href=&quot;#survey-results-are-in&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-news-june-2022/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-news-june-2022/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Using the Python and Operator</title>
      <id>https://realpython.com/courses/and-operator-python/</id>
      <link href="https://realpython.com/courses/and-operator-python/"/>
      <updated>2022-07-05T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how Python&#x27;s &quot;and&quot; operator works and how to use it in your code. You&#x27;ll get to know its special features and see what kind of programming problems you can solve by using &quot;and&quot; in Python.</summary>
      <content type="html">
        &lt;p&gt;Python has three &lt;a href=&quot;https://realpython.com/python-boolean/&quot;&gt;Boolean&lt;/a&gt; operators, or &lt;strong&gt;logical operators&lt;/strong&gt;: &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt;, and &lt;code&gt;not&lt;/code&gt;. You can use them to check if certain conditions are met before deciding the execution path your programs will follow. In this video course, you&amp;rsquo;ll learn about the &lt;code&gt;and&lt;/code&gt; operator and how to use it in your code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand the logic behind Python&amp;rsquo;s &lt;strong&gt;&lt;code&gt;and&lt;/code&gt; operator&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Build and understand &lt;strong&gt;Boolean&lt;/strong&gt; and &lt;strong&gt;non-Boolean expressions&lt;/strong&gt; that use the &lt;code&gt;and&lt;/code&gt; operator&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;and&lt;/code&gt; operator in &lt;strong&gt;Boolean contexts&lt;/strong&gt; to decide the &lt;strong&gt;course of action&lt;/strong&gt; of your programs&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;and&lt;/code&gt; operator in &lt;strong&gt;non-Boolean contexts&lt;/strong&gt; to make your code more concise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ll also code a few practical examples that will help you understand how to use the &lt;code&gt;and&lt;/code&gt; operator to approach different problems in a &lt;a href=&quot;https://realpython.com/learning-paths/writing-pythonic-code/&quot;&gt;Pythonic&lt;/a&gt; way. Even if you don&amp;rsquo;t use all the features of &lt;code&gt;and&lt;/code&gt;, learning about them will allow you to write better and more accurate code.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Python 3.11 Preview: TOML and tomllib</title>
      <id>https://realpython.com/python311-tomllib/</id>
      <link href="https://realpython.com/python311-tomllib/"/>
      <updated>2022-07-04T14:00:00+00:00</updated>
      <summary>Python 3.11 will be released in October 2022. In this tutorial, you&#x27;ll install the latest beta release of Python 3.11 in order to preview the new tomllib module that&#x27;s added to the standard library. You&#x27;ll also explore some of the static typing enhancements that are coming.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Python 3.11 is getting closer to its final release, which will happen in October 2022. The new version is currently going through beta testing, and you can install it yourself to preview and test some of the new features, including support for reading TOML with the new &lt;code&gt;tomllib&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;TOML is a configuration file format that’s getting more and more popular in the Python ecosystem. This is driven by the adoption of &lt;code&gt;pyproject.toml&lt;/code&gt; as the central configuration file in Python packaging. Other important tools, like &lt;a href=&quot;https://pypi.org/project/black/&quot;&gt;Black&lt;/a&gt;, &lt;a href=&quot;https://mypy.readthedocs.io/en/stable/&quot;&gt;mypy&lt;/a&gt;, and &lt;a href=&quot;https://realpython.com/pytest-python-testing/&quot;&gt;pytest&lt;/a&gt;, also use TOML for their configuration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Install&lt;/strong&gt; Python 3.11 beta on your computer, next to your current Python installations&lt;/li&gt;
&lt;li&gt;Get familiar with the basics of the &lt;strong&gt;TOML format&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read TOML&lt;/strong&gt; files with the new &lt;code&gt;tomllib&lt;/code&gt; module&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write TOML&lt;/strong&gt; with third-party libraries and learn why this functionality is &lt;strong&gt;not included&lt;/strong&gt; in &lt;code&gt;tomllib&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Explore Python 3.11’s new &lt;strong&gt;typing features&lt;/strong&gt;, including the &lt;code&gt;Self&lt;/code&gt; and &lt;code&gt;LiteralString&lt;/code&gt; types as well as variadic generics&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many other new features and improvements coming in Python 3.11. Check out &lt;a href=&quot;https://docs.python.org/3.11/whatsnew/3.11.html&quot;&gt;what’s new&lt;/a&gt; in the changelog for an up-to-date list, and read other &lt;a href=&quot;https://realpython.com/search?kind=article&amp;amp;q=python+3.11&quot;&gt;Python 3.11 previews&lt;/a&gt; on Real Python to learn about other features.&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Free Bonus:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/python-mastery-course/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-python-mastery-course&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;5 Thoughts On Python Mastery&lt;/a&gt;, a free course for Python developers that shows you the roadmap and the mindset you’ll need to take your Python skills to the next level.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;python-311-beta&quot;&gt;Python 3.11 Beta&lt;a class=&quot;headerlink&quot; href=&quot;#python-311-beta&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A new version of Python is released in October each year. The code is developed and tested over a &lt;a href=&quot;https://www.python.org/dev/peps/pep-0602/&quot;&gt;seventeen-month period&lt;/a&gt; before the release date. New features are implemented during the &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha&quot;&gt;alpha phase&lt;/a&gt;. For Python 3.11, seven &lt;strong&gt;alpha releases&lt;/strong&gt; were made between October 2021 and April 2022.&lt;/p&gt;
&lt;p&gt;The first &lt;strong&gt;beta release&lt;/strong&gt; of Python 3.11 happened in the &lt;a href=&quot;https://twitter.com/pyblogsal/status/1523636192587423744&quot;&gt;early hours&lt;/a&gt; of May 8, 2022. Each such pre-release is coordinated by a release manager—currently &lt;a href=&quot;https://twitter.com/pyblogsal&quot;&gt;Pablo Galindo Salgado&lt;/a&gt;—and ties together hundreds of commits from Python’s core developers and other volunteers.&lt;/p&gt;
&lt;p&gt;This release also &lt;a href=&quot;https://twitter.com/pyblogsal/status/1523635910696652800&quot;&gt;marked&lt;/a&gt; the &lt;strong&gt;feature freeze&lt;/strong&gt; for the new version. In other words, no new features will be added to Python 3.11 that aren’t already present in Python 3.11.0b1. Instead, the time between the feature freeze and the release date—October 3, 2022—is used to test and solidify the code.&lt;/p&gt;
&lt;p&gt;About &lt;a href=&quot;https://www.python.org/dev/peps/pep-0664/&quot;&gt;once a month&lt;/a&gt; during the &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle#Beta&quot;&gt;beta phase&lt;/a&gt;, Python’s core developers release a new &lt;strong&gt;beta version&lt;/strong&gt; to continue showing off the new features, testing them, and getting early feedback. Currently, the latest beta version of Python 3.11 is &lt;strong&gt;3.11.0b3&lt;/strong&gt;, released on &lt;a href=&quot;https://www.python.org/downloads/release/python-3110b3/&quot;&gt;June 1, 2022&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This tutorial uses the third beta version of Python 3.11. You might experience small differences if you use a later version. However, &lt;code&gt;tomllib&lt;/code&gt; builds on a mature library, and you can expect that what you learn in this tutorial will stay the same through the beta phase and in the final release of Python 3.11.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;If you’re maintaining your own Python package, then the beta phase is an important period when you should start testing your package with the new version. Together with the community, the core developers want to find and fix as many bugs as possible before the final release.&lt;/p&gt;
&lt;h3 id=&quot;cool-new-features&quot;&gt;Cool New Features&lt;a class=&quot;headerlink&quot; href=&quot;#cool-new-features&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Some of the highlights of Python 3.11 include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced error messages&lt;/strong&gt;, which help you more effectively debug your code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task and exception groups&lt;/strong&gt;, which streamline the use of asynchronous code and allow programs to raise and handle multiple exceptions at the same time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TOML support&lt;/strong&gt;, which allows you to parse TOML documents using the standard library&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static typing improvements&lt;/strong&gt;, which let you annotate your code more precisely&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizations&lt;/strong&gt;, which promise to make Python 3.11 significantly faster than previous versions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There’s a lot to look forward to in Python 3.11! You can already read about the &lt;a href=&quot;https://realpython.com/python311-error-messages/&quot;&gt;enhanced error messages&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/python311-exception-groups/&quot;&gt;task and exception groups&lt;/a&gt; in earlier &lt;a href=&quot;https://realpython.com/search?kind=article&amp;amp;q=python+3.11&quot;&gt;Python 3.11 preview&lt;/a&gt; articles.&lt;/p&gt;
&lt;p&gt;In this tutorial, you’ll focus on how you can use the new &lt;code&gt;tomllib&lt;/code&gt; library to read and parse TOML files. You’ll also get a short peek at some of the typing improvements that’ll be shipping with Python 3.11.&lt;/p&gt;
&lt;h3 id=&quot;installation&quot;&gt;Installation&lt;a class=&quot;headerlink&quot; href=&quot;#installation&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To play with the code examples in this tutorial, you’ll need to install a version of Python 3.11 onto your system. In this subsection, you’ll learn about a few different ways to do this: using &lt;strong&gt;Docker&lt;/strong&gt;, using &lt;strong&gt;pyenv&lt;/strong&gt;, or installing from &lt;strong&gt;source&lt;/strong&gt;. Pick the one that works best for you and your system.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Beta versions are previews of upcoming features. While most features will work well, you shouldn’t depend on any Python 3.11 beta version in production or anywhere else where potential bugs will have serious consequences.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;If you have access to &lt;a href=&quot;https://docs.docker.com/get-docker/&quot;&gt;Docker&lt;/a&gt; on your system, then you can download the latest version of Python 3.11 by pulling and running the &lt;code&gt;python:3.11-rc-slim&lt;/code&gt; &lt;a href=&quot;https://hub.docker.com/_/python&quot;&gt;Docker image&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight sh&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;docker pull python:3.11-rc-slim
&lt;span class=&quot;go&quot;&gt;3.11-rc-slim: Pulling from library/python&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;[...]&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;docker.io/library/python:3.11-rc-slim&lt;/span&gt;

&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;docker run -it --rm python:3.11-rc-slim
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This drops you into a Python 3.11 REPL. Check out &lt;a href=&quot;https://realpython.com/python-versions-docker/#running-python-in-a-docker-container&quot;&gt;Run Python Versions in Docker&lt;/a&gt; for more information about working with Python through Docker, including how to run scripts.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://realpython.com/intro-to-pyenv/&quot;&gt;pyenv&lt;/a&gt; tool is great for managing different versions of Python on your system, and you can use it to install Python 3.11 beta if you like. It comes with two different versions, one for Windows and one for Linux and macOS. Choose your platform with the switcher below:&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python311-tomllib/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python311-tomllib/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #116: Exploring Functional Programming in Python With Bruce Eckel</title>
      <id>https://realpython.com/podcasts/rpp/116/</id>
      <link href="https://realpython.com/podcasts/rpp/116/"/>
      <updated>2022-07-01T12:00:00+00:00</updated>
      <summary>Would you like to explore the functional programming side of Python? What are the advantages of this approach, and what tools are built into the language? This week on the show, author Bruce Eckel talks about functional programming in Python.</summary>
      <content type="html">
        &lt;p&gt;Would you like to explore the functional programming side of Python? What are the advantages of this approach, and what tools are built into the language? This week on the show, author Bruce Eckel talks about functional programming in Python.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Python Stacks, Queues, and Priority Queues in Practice</title>
      <id>https://realpython.com/queue-in-python/</id>
      <link href="https://realpython.com/queue-in-python/"/>
      <updated>2022-06-29T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll take a deep dive into the theory and practice of queues in programming. Along the way, you&#x27;ll get to know the different types of queues, implement them, and then learn about the higher-level queues in Python&#x27;s standard library. Be prepared to do a lot of coding.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Queues are the backbone of numerous algorithms found in games, artificial intelligence, satellite navigation, and task scheduling. They’re among the top &lt;strong&gt;abstract data types&lt;/strong&gt; that computer science students learn early in their education. At the same time, software engineers often leverage higher-level &lt;strong&gt;message queues&lt;/strong&gt; to achieve better scalability of a &lt;a href=&quot;https://realpython.com/python-microservices-grpc/&quot;&gt;microservice architecture&lt;/a&gt;. Plus, using queues in Python is simply fun!&lt;/p&gt;
&lt;p&gt;Python provides a few &lt;strong&gt;built-in flavors of queues&lt;/strong&gt; that you’ll see in action in this tutorial. You’re also going to get a quick primer on the &lt;strong&gt;theory of queues&lt;/strong&gt; and their types. Finally, you’ll take a look at some &lt;strong&gt;external libraries&lt;/strong&gt; for connecting to popular message brokers available on major cloud platform providers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Differentiate between various &lt;strong&gt;types of queues&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Implement the &lt;strong&gt;queue data type&lt;/strong&gt; in Python&lt;/li&gt;
&lt;li&gt;Solve &lt;strong&gt;practical problems&lt;/strong&gt; by applying the right queue&lt;/li&gt;
&lt;li&gt;Use Python’s &lt;strong&gt;thread-safe&lt;/strong&gt;, &lt;strong&gt;asynchronous&lt;/strong&gt;, and &lt;strong&gt;interprocess&lt;/strong&gt; queues&lt;/li&gt;
&lt;li&gt;Integrate Python with &lt;strong&gt;distributed message queue brokers&lt;/strong&gt; through libraries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get the most out of this tutorial, you should be familiar with Python’s sequence types, such as &lt;a href=&quot;https://realpython.com/python-lists-tuples/&quot;&gt;lists and tuples&lt;/a&gt;, and the higher-level &lt;a href=&quot;https://realpython.com/python-collections-module/&quot;&gt;collections&lt;/a&gt; in the standard library.&lt;/p&gt;
&lt;p&gt;You can download the complete source code for this tutorial with the associated sample data by clicking the link in the box below:&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Get Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/queue-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-queue-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get access to the source code and sample data&lt;/a&gt; that you’ll use to explore queues in Python.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;learning-about-the-types-of-queues&quot;&gt;Learning About the Types of Queues&lt;a class=&quot;headerlink&quot; href=&quot;#learning-about-the-types-of-queues&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A queue is an &lt;a href=&quot;https://en.wikipedia.org/wiki/Abstract_data_type&quot;&gt;abstract data type&lt;/a&gt; that represents a &lt;strong&gt;sequence&lt;/strong&gt; of elements arranged according to a set of rules. In this section, you’ll learn about the most common types of queues and their corresponding element arrangement rules. At the very least, every queue provides operations for adding and removing elements in &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_complexity#Constant_time&quot;&gt;constant time&lt;/a&gt; or O(1) using the &lt;a href=&quot;https://realpython.com/binary-search-python/#the-big-o-notation&quot;&gt;Big O&lt;/a&gt; notation. That means both operations should  be instantaneous regardless of the queue’s size.&lt;/p&gt;
&lt;p&gt;Some queues may support other, more specific operations. It’s time to learn more about them!&lt;/p&gt;
&lt;h3 id=&quot;queue-first-in-first-out-fifo&quot;&gt;Queue: First-In, First-Out (FIFO)&lt;a class=&quot;headerlink&quot; href=&quot;#queue-first-in-first-out-fifo&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The word &lt;em&gt;queue&lt;/em&gt; can have different meanings depending on the context. However, when people refer to a queue without using any qualifiers, they usually mean a &lt;a href=&quot;https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)&quot;&gt;FIFO queue&lt;/a&gt;, which resembles a line that you might find at a grocery checkout or tourist attraction:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/IMG_3976.aaccf0e9a1fb.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img loading=&quot;lazy&quot; class=&quot;img-fluid mx-auto d-block border w-66&quot; src=&quot;https://files.realpython.com/media/IMG_3976.aaccf0e9a1fb.jpg&quot; width=&quot;2736&quot; height=&quot;3648&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/IMG_3976.aaccf0e9a1fb.jpg&amp;amp;w=684&amp;amp;sig=273dda8edf6838f2a81a147877a2bc5adb203a29 684w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/IMG_3976.aaccf0e9a1fb.jpg&amp;amp;w=1368&amp;amp;sig=989980be706762e156a17c2aa1830cc1f31caf61 1368w, https://files.realpython.com/media/IMG_3976.aaccf0e9a1fb.jpg 2736w&quot; sizes=&quot;75vw&quot; alt=&quot;Tourists Queuing Up to Enter the American Museum of Natural History in New York&quot; data-asset=&quot;4332&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;figure-caption text-center&quot;&gt;Tourists Queuing Up to Enter the American Museum of Natural History in New York&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;Note that unlike the line in the photo, where people are clustering side by side, a queue in a strict sense will be single file, with people admitted one at a time.&lt;/p&gt;
&lt;p&gt;FIFO is short for &lt;strong&gt;first-in, first-out&lt;/strong&gt;, which describes the flow of elements through the queue. Elements in such a queue will be processed on a &lt;a href=&quot;https://www.merriam-webster.com/dictionary/first%20come%2C%20first%20served&quot;&gt;first-come, first-served&lt;/a&gt; basis, which is how most real-life queues work. To better visualize the element movement in a FIFO queue, have a look at the following animation:&lt;/p&gt;
&lt;figure&gt;
  &lt;div class=&quot;embed-responsive embed-responsive-16by9 rounded mb-3 border&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; class=&quot;embed-responsive-item&quot; src=&quot;https://player.vimeo.com/video/723390369?background=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;
  &lt;figcaption class=&quot;figure-caption text-center&quot;&gt;Unbounded FIFO Queue&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Notice that, at any given time, a new element is only allowed to join the queue on one end called the &lt;strong&gt;tail&lt;/strong&gt;—which is on the right in this example—while the oldest element must leave the queue from the opposite end. When an element leaves the queue, then all of its followers shift by exactly one position towards the &lt;strong&gt;head&lt;/strong&gt; of the queue. These few rules ensure that elements are processed in the order of their arrival.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can think of elements in a FIFO queue as cars stopping at a traffic light.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Adding an element to the FIFO queue is commonly referred to as an &lt;strong&gt;enqueue&lt;/strong&gt; operation, while retrieving one from it is known as a &lt;strong&gt;dequeue&lt;/strong&gt; operation. Don’t confuse a &lt;em&gt;dequeue&lt;/em&gt; operation with the &lt;a href=&quot;#deque-double-ended-queue&quot;&gt;deque (double-ended queue)&lt;/a&gt; data type that you’ll learn about later!&lt;/p&gt;
&lt;p&gt;Enqueuing and dequeuing are two independent operations that may be taking place at different speeds. This fact makes FIFO queues the perfect tool for &lt;strong&gt;buffering data&lt;/strong&gt; in streaming scenarios and for &lt;strong&gt;scheduling tasks&lt;/strong&gt; that need to wait until some &lt;a href=&quot;https://en.wikipedia.org/wiki/Shared_resource&quot;&gt;shared resource&lt;/a&gt; becomes available. For example, a web server flooded with HTTP requests might place them in a queue instead of immediately rejecting them with an error.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In programs that leverage &lt;a href=&quot;https://realpython.com/python-concurrency/&quot;&gt;concurrency&lt;/a&gt;, a FIFO queue often becomes the shared resource itself to facilitate two-way communication between asynchronous workers. By temporarily locking the read or write access to its elements, a &lt;strong&gt;blocking queue&lt;/strong&gt; can elegantly coordinate a pool of producers and a pool of consumers. You’ll find more information about this use case in later sections about queues in &lt;a href=&quot;#using-thread-safe-queues&quot;&gt;multithreading&lt;/a&gt; and &lt;a href=&quot;#using-multiprocessingqueue-for-interprocess-communication-ipc&quot;&gt;multiprocessing&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Another point worth noting about the queue depicted above is that it can grow without bounds as new elements arrive. Picture a checkout line stretching to the back of the store during a busy shopping season! In some situations, however, you might prefer to work with a &lt;strong&gt;bounded queue&lt;/strong&gt; that has a fixed capacity known upfront. A bounded queue can help to keep scarce resources under control in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;By irreversibly rejecting elements that don’t fit&lt;/li&gt;
&lt;li&gt;By overwriting the oldest element in the queue&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Under the first strategy, once a FIFO queue becomes saturated, it won’t take any more elements until others leave the queue to make some space. You can see an animated example of how this works below:&lt;/p&gt;
&lt;figure&gt;
  &lt;div class=&quot;embed-responsive embed-responsive-16by9 rounded mb-3 border&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; class=&quot;embed-responsive-item&quot; src=&quot;https://player.vimeo.com/video/723396777?background=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;
  &lt;figcaption class=&quot;figure-caption text-center&quot;&gt;Bounded FIFO Queue (Bounce)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/queue-in-python/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/queue-in-python/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Building a Site Connectivity Checker</title>
      <id>https://realpython.com/courses/python-site-connectivity-checker/</id>
      <link href="https://realpython.com/courses/python-site-connectivity-checker/"/>
      <updated>2022-06-28T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll build a Python site connectivity checker for the command line. While building this app, you&#x27;ll integrate knowledge related to making HTTP requests with standard-library tools, creating command-line interfaces, and managing concurrency with asyncio and aiohttp.</summary>
      <content type="html">
        &lt;p&gt;Building a site connectivity checker in Python is an interesting project to level up your skills. With this project, you&amp;rsquo;ll integrate knowledge related to handling &lt;strong&gt;HTTP requests&lt;/strong&gt;, creating &lt;strong&gt;command-line interfaces (CLI)&lt;/strong&gt;, and organizing your application&amp;rsquo;s code using common Python &lt;strong&gt;project layout&lt;/strong&gt; practices.&lt;/p&gt;
&lt;p&gt;By building this project, you&amp;rsquo;ll learn how Python&amp;rsquo;s &lt;strong&gt;asynchronous features&lt;/strong&gt; can help you deal with multiple HTTP requests efficiently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create command-line interfaces (CLI) using Python&amp;rsquo;s &lt;strong&gt;&lt;code&gt;argparse&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Check if a website is online using Python&amp;rsquo;s &lt;strong&gt;&lt;code&gt;http.client&lt;/code&gt;&lt;/strong&gt; from the standard library&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;synchronous checks&lt;/strong&gt; for multiple websites&lt;/li&gt;
&lt;li&gt;Check if a website is online using the &lt;strong&gt;&lt;code&gt;aiohttp&lt;/code&gt;&lt;/strong&gt; third-party library&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;asynchronous checks&lt;/strong&gt; for multiple websites&lt;/li&gt;
&lt;/ul&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Build a Tic-Tac-Toe Game With Python and Tkinter</title>
      <id>https://realpython.com/tic-tac-toe-python/</id>
      <link href="https://realpython.com/tic-tac-toe-python/"/>
      <updated>2022-06-27T14:00:00+00:00</updated>
      <summary>In this step-by-step project, you&#x27;ll learn how to create a tic-tac-toe game using Python and the Tkinter GUI framework. Tkinter is cross-platform and is available in the Python standard library. Creating a game in Python is a great and fun way to learn something new and exciting!</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Playing computer games is a great way to unwind or challenge yourself. Some people even do it professionally. It’s also fun and educational to build your own computer games. In this tutorial, you’ll build a classic tic-tac-toe game using Python and Tkinter.&lt;/p&gt;
&lt;p&gt;With this project, you’ll go through the thought processes required for creating your own game. You’ll also learn how to integrate your diverse programming skills and knowledge to develop a functional and fun computer game.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Program the &lt;strong&gt;classic tic-tac-toe game’s logic&lt;/strong&gt; using Python&lt;/li&gt;
&lt;li&gt;Create the game’s &lt;strong&gt;graphical user interface (GUI)&lt;/strong&gt; using the Tkinter tool kit&lt;/li&gt;
&lt;li&gt;Integrate the game’s logic and GUI into a &lt;strong&gt;fully functional computer game&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As mentioned, you’ll be using the Tkinter GUI framework from the Python standard library to create your game’s interface. You’ll also use the model-view-controller pattern and an object-oriented approach to organize your code. For more on these concepts, check out the links in the &lt;a href=&quot;#prerequisites&quot;&gt;prerequisites&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To download the entire source code for this project, click the link in the box below:&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Get Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/tic-tac-toe-python-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-tic-tac-toe-python-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get access to the source code&lt;/a&gt; that you’ll use to build your tic-tac-toe game.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;demo-a-tic-tac-toe-game-in-python&quot;&gt;Demo: A Tic-Tac-Toe Game in Python&lt;a class=&quot;headerlink&quot; href=&quot;#demo-a-tic-tac-toe-game-in-python&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this step-by-step project, you’ll build a tic-tac-toe game in Python. You’ll use the &lt;a href=&quot;https://realpython.com/python-gui-tkinter/&quot;&gt;Tkinter&lt;/a&gt; tool kit from the Python &lt;a href=&quot;https://docs.python.org/3/library/index.html&quot;&gt;standard library&lt;/a&gt; to create the game’s GUI. In the following demo video, you’ll get a sense of how your game will work once you’ve completed this tutorial:&lt;/p&gt;
&lt;figure&gt;
  &lt;div class=&quot;embed-responsive embed-responsive-16by9 rounded mb-3 &quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; class=&quot;embed-responsive-item&quot; src=&quot;https://player.vimeo.com/video/717834507?background=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;

&lt;/figure&gt;

&lt;p&gt;Your tic-tac-toe game will have an interface that reproduces the classic three-by-three game board. The players will take turns making their moves on a shared device. The game display at the top of the window will show the name of the player who gets to go next.&lt;/p&gt;
&lt;p&gt;If a player wins, then the game display will show a winning message with the player’s name or mark (&lt;em&gt;X&lt;/em&gt; or &lt;em&gt;O&lt;/em&gt;). At the same time, the winning combination of cells will be highlighted on the board.&lt;/p&gt;
&lt;p&gt;Finally, the game’s &lt;em&gt;File&lt;/em&gt; menu will have options to reset the game if you want to play again or to exit the game when you’re done playing.&lt;/p&gt;
&lt;p&gt;If this sounds like a fun project to you, then read on to get started!&lt;/p&gt;
&lt;h2 id=&quot;project-overview&quot;&gt;Project Overview&lt;a class=&quot;headerlink&quot; href=&quot;#project-overview&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Your goal with this project is to create a tic-tac-toe game in Python. For the game interface, you’ll use the Tkinter GUI tool kit, which comes in the standard Python installation as an &lt;a href=&quot;https://peps.python.org/pep-0206/#batteries-included-philosophy&quot;&gt;included battery&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The tic-tac-toe game is for two players. One player plays &lt;em&gt;X&lt;/em&gt; and the other plays &lt;em&gt;O&lt;/em&gt;. The players take turns placing their marks on a grid of three-by-three cells. If a given player gets three marks in a row horizontally, vertically, or diagonally, then that player wins the game. The game will be tied if no one gets three in a row by the time all the cells are marked.&lt;/p&gt;
&lt;p&gt;With these rules in mind, you’ll need to put together the following game components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The game’s &lt;strong&gt;board&lt;/strong&gt;, which you’ll build with a class called &lt;code&gt;TicTacToeBoard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The game’s &lt;strong&gt;logic&lt;/strong&gt;, which you’ll manage using a class called &lt;code&gt;TicTacToeGame&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The game board will work as a mix between &lt;strong&gt;view&lt;/strong&gt; and &lt;strong&gt;controller&lt;/strong&gt; in a model-view-controller design. To build the board, you’ll use a Tkinter window, which you can create by instantiating the &lt;a href=&quot;https://realpython.com/python-gui-tkinter/#building-your-first-python-gui-application-with-tkinter&quot;&gt;&lt;code&gt;tkinter.Tk&lt;/code&gt;&lt;/a&gt; class. This window will have two main components:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Top display:&lt;/strong&gt; Shows information about the game’s status&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grid of cells:&lt;/strong&gt; Represents previous moves and available spaces or cells&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You’ll create the game display using a &lt;a href=&quot;https://realpython.com/python-gui-tkinter/#displaying-text-and-images-with-label-widgets&quot;&gt;&lt;code&gt;tkinter.Label&lt;/code&gt;&lt;/a&gt; widget, which allows you to display text and images.&lt;/p&gt;
&lt;p&gt;For the grid of cells, you’ll use a series of &lt;a href=&quot;https://realpython.com/python-gui-tkinter/#displaying-clickable-buttons-with-button-widgets&quot;&gt;&lt;code&gt;tkinter.Button&lt;/code&gt;&lt;/a&gt; widgets arranged in a &lt;a href=&quot;https://realpython.com/python-gui-tkinter/#the-grid-geometry-manager&quot;&gt;grid&lt;/a&gt;. When a player clicks one of these buttons, the game logic will run to process the player’s move and determine whether there’s a winner. In this case, the game logic will work as the &lt;strong&gt;model&lt;/strong&gt;, which will manage the data, logic, and rules of your game.&lt;/p&gt;
&lt;p&gt;Now that you have a general idea of how to build your tic-tac-toe game, you should check out a few knowledge prerequisites that’ll allow you to get the most out of this tutorial.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;a class=&quot;headerlink&quot; href=&quot;#prerequisites&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/tic-tac-toe-python/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/tic-tac-toe-python/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #115: Digging Into PyScript &amp; Preventing or Handling Python Errors</title>
      <id>https://realpython.com/podcasts/rpp/115/</id>
      <link href="https://realpython.com/podcasts/rpp/115/"/>
      <updated>2022-06-24T12:00:00+00:00</updated>
      <summary>Have you heard about PyScript? The brand-new framework has the community excited about building interactive Python applications that run entirely within the user&#x27;s browser. Would you like to dig into the details beyond the &quot;Hello World&quot; examples? This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.</summary>
      <content type="html">
        &lt;p&gt;Have you heard about PyScript? The brand-new framework has the community excited about building interactive Python applications that run entirely within the user&#x27;s browser. Would you like to dig into the details beyond the &quot;Hello World&quot; examples? This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Effective Python Testing With Pytest</title>
      <id>https://realpython.com/pytest-python-testing/</id>
      <link href="https://realpython.com/pytest-python-testing/"/>
      <updated>2022-06-22T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn how to take your testing to the next level with pytest. You&#x27;ll cover intermediate and advanced pytest features such as fixtures, marks, parameters, and plugins. With pytest, you can make your test suites fast, effective, and less painful to maintain.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;&lt;a href=&quot;https://realpython.com/python-testing/&quot;&gt;Testing your code&lt;/a&gt; brings a wide variety of benefits. It increases your confidence that the code behaves as you expect and ensures that changes to your code won’t cause regressions. Writing and maintaining tests is hard work, so you should leverage all the tools at your disposal to make it as painless as possible. &lt;a href=&quot;https://docs.pytest.org/&quot;&gt;&lt;code&gt;pytest&lt;/code&gt;&lt;/a&gt; is one of the best tools that you can use to boost your testing productivity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What &lt;strong&gt;benefits&lt;/strong&gt; &lt;code&gt;pytest&lt;/code&gt; offers&lt;/li&gt;
&lt;li&gt;How to ensure your tests are &lt;strong&gt;stateless&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to make repetitious tests more &lt;strong&gt;comprehensible&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to run &lt;strong&gt;subsets&lt;/strong&gt; of tests by name or custom groups&lt;/li&gt;
&lt;li&gt;How to create and maintain &lt;strong&gt;reusable&lt;/strong&gt; testing utilities&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Free Bonus:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/python-mastery-course/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-python-mastery-course&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;5 Thoughts On Python Mastery&lt;/a&gt;, a free course for Python developers that shows you the roadmap and the mindset you’ll need to take your Python skills to the next level.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;how-to-install-pytest&quot;&gt;How to Install &lt;code&gt;pytest&lt;/code&gt;&lt;a class=&quot;headerlink&quot; href=&quot;#how-to-install-pytest&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To follow along with some of the examples in this tutorial, you’ll need to install &lt;code&gt;pytest&lt;/code&gt;. As most &lt;a href=&quot;https://realpython.com/python-modules-packages/&quot;&gt;Python packages&lt;/a&gt;, &lt;code&gt;pytest&lt;/code&gt; is available on &lt;a href=&quot;https://realpython.com/pypi-publish-python-package/&quot;&gt;PyPI&lt;/a&gt;. You can install it in a &lt;a href=&quot;https://realpython.com/python-virtual-environments-a-primer/&quot;&gt;virtual environment&lt;/a&gt; using &lt;a href=&quot;https://realpython.com/what-is-pip/&quot;&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul class=&quot;nav nav-tabs justify-content-end js-platform-widget-tabs&quot; role=&quot;tablist&quot;&gt;

  &lt;li class=&quot;nav-item mb-0 js-platform-widget-tab-windows&quot; role=&quot;presentation&quot;&gt;
    &lt;a class=&quot;nav-link link-unstyled text-body active small&quot; id=&quot;windows-tab-1&quot; data-toggle=&quot;tab&quot; href=&quot;#windows-1&quot; role=&quot;tab&quot; aria-controls=&quot;windows-1&quot; aria-selected=&quot;true&quot;&gt;&lt;i class=&quot;fa fa-windows text-muted mr-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;Windows&lt;/a&gt;
  &lt;/li&gt;




  &lt;li class=&quot;nav-item mb-0 js-platform-widget-tab-linuxmacos&quot; role=&quot;presentation&quot;&gt;
    &lt;a class=&quot;nav-link link-unstyled text-body small&quot; id=&quot;macos-tab-1&quot; data-toggle=&quot;tab&quot; href=&quot;#linux-macos-1&quot; role=&quot;tab&quot; aria-controls=&quot;linux-macos-1&quot; aria-selected=&quot;false&quot;&gt;&lt;i class=&quot;fa fa-linux text-muted mr-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;&lt;i class=&quot;fa fa-apple text-muted mr-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;Linux + macOS&lt;/a&gt;
  &lt;/li&gt;

&lt;/ul&gt;
&lt;div class=&quot;tab-content mt-2 mb-0 js-platform-widget-content&quot;&gt;
&lt;div aria-labelledby=&quot;windows-tab-1&quot; class=&quot;tab-pane fade show active&quot; id=&quot;windows-1&quot; role=&quot;tabpanel&quot;&gt;
&lt;div class=&quot;highlight pscon&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;PS&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;venv&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;venv&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;PS&amp;gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.\&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;venv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Scripts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;activate&lt;/span&gt;
&lt;span class=&quot;gp gp-VirtualEnv&quot;&gt;(venv)&lt;/span&gt; &lt;span class=&quot;gp&quot;&gt;PS&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pip&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pytest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div aria-labelledby=&quot;linux-macos-tab-1&quot; class=&quot;tab-pane fade &quot; id=&quot;linux-macos-1&quot; role=&quot;tabpanel&quot;&gt;
&lt;div class=&quot;highlight sh&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;python -m venv venv
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt; venv/bin/activate
&lt;span class=&quot;gp gp-VirtualEnv&quot;&gt;(venv)&lt;/span&gt; &lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;python -m pip install pytest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;pytest&lt;/code&gt; command will now be available in your installation environment.&lt;/p&gt;
&lt;h2 id=&quot;what-makes-pytest-so-useful&quot;&gt;What Makes &lt;code&gt;pytest&lt;/code&gt; So Useful?&lt;a class=&quot;headerlink&quot; href=&quot;#what-makes-pytest-so-useful&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you’ve written unit &lt;a href=&quot;https://realpython.com/python-testing/&quot;&gt;tests&lt;/a&gt; for your Python code before, then you may have used Python’s built-in &lt;strong&gt;&lt;code&gt;unittest&lt;/code&gt;&lt;/strong&gt; module. &lt;code&gt;unittest&lt;/code&gt; provides a solid base on which to build your test suite, but it has a few shortcomings.&lt;/p&gt;
&lt;p&gt;A number of third-party testing frameworks attempt to address some of the issues with &lt;code&gt;unittest&lt;/code&gt;, and &lt;code&gt;pytest&lt;/code&gt; has proven to be one of the most popular. &lt;code&gt;pytest&lt;/code&gt; is a feature-rich, plugin-based ecosystem for testing your Python code.&lt;/p&gt;
&lt;p&gt;If you haven’t had the pleasure of using &lt;code&gt;pytest&lt;/code&gt; yet, then you’re in for a treat! Its philosophy and features will make your testing experience more productive and enjoyable. With &lt;code&gt;pytest&lt;/code&gt;, common tasks require less code and advanced tasks can be achieved through a variety of time-saving commands and plugins. It’ll even run your existing tests out of the box, including those written with &lt;code&gt;unittest&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As with most frameworks, some development patterns that make sense when you first start using &lt;code&gt;pytest&lt;/code&gt; can start causing pains as your test suite grows. This tutorial will help you understand some of the tools &lt;code&gt;pytest&lt;/code&gt; provides to keep your testing efficient and effective even as it scales.&lt;/p&gt;
&lt;h3 id=&quot;less-boilerplate&quot;&gt;Less Boilerplate&lt;a class=&quot;headerlink&quot; href=&quot;#less-boilerplate&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Most functional tests follow the Arrange-Act-Assert model:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Arrange&lt;/strong&gt;, or set up, the conditions for the test&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Act&lt;/strong&gt; by calling some function or method&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assert&lt;/strong&gt; that some end condition is true&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Testing frameworks typically hook into your test’s &lt;a href=&quot;https://realpython.com/python-assert-statement/&quot;&gt;assertions&lt;/a&gt; so that they can provide information when an assertion fails. &lt;code&gt;unittest&lt;/code&gt;, for example, provides a number of helpful assertion utilities out of the box. However, even a small set of tests requires a fair amount of &lt;a href=&quot;https://en.wikipedia.org/wiki/Boilerplate_code&quot;&gt;boilerplate code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Imagine you’d like to write a test suite just to make sure that &lt;code&gt;unittest&lt;/code&gt; is working properly in your project. You might want to write one test that always passes and one that always fails:&lt;/p&gt;
&lt;div class=&quot;highlight python&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# test_with_unittest.py&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;unittest&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TryTesting&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_always_passes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertTrue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_always_fails&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertTrue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can then run those tests from the command line using the &lt;code&gt;discover&lt;/code&gt; option of &lt;code&gt;unittest&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight sh&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp gp-VirtualEnv&quot;&gt;(venv)&lt;/span&gt; &lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;python -m unittest discover
&lt;span class=&quot;go&quot;&gt;F.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;======================================================================&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;FAIL: test_always_fails (test_with_unittest.TryTesting)&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;----------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Traceback (most recent call last):&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  File &quot;...\effective-python-testing-with-pytest\test_with_unittest.py&quot;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  line 10, in test_always_fails&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;    self.assertTrue(False)&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;AssertionError: False is not true&lt;/span&gt;

&lt;span class=&quot;go&quot;&gt;----------------------------------------------------------------------&lt;/span&gt;

&lt;span class=&quot;go&quot;&gt;Ran 2 tests in 0.006s&lt;/span&gt;

&lt;span class=&quot;go&quot;&gt;FAILED (failures=1)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As expected, one test passed and one failed. You’ve proven that &lt;code&gt;unittest&lt;/code&gt; is working, but look at what you had to do:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Import the &lt;code&gt;TestCase&lt;/code&gt; class from &lt;code&gt;unittest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;TryTesting&lt;/code&gt;, a &lt;a href=&quot;https://realpython.com/python3-object-oriented-programming/&quot;&gt;subclass&lt;/a&gt; of &lt;code&gt;TestCase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Write a method in &lt;code&gt;TryTesting&lt;/code&gt; for each test&lt;/li&gt;
&lt;li&gt;Use one of the &lt;code&gt;self.assert*&lt;/code&gt; methods from &lt;code&gt;unittest.TestCase&lt;/code&gt; to make assertions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s a significant amount of code to write, and because it’s the minimum you need for &lt;em&gt;any&lt;/em&gt; test, you’d end up writing the same code over and over. &lt;code&gt;pytest&lt;/code&gt; simplifies this workflow by allowing you to use normal functions and Python’s &lt;code&gt;assert&lt;/code&gt; keyword directly:&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/pytest-python-testing/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/pytest-python-testing/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Python mmap: Doing File I/O With Memory Mapping</title>
      <id>https://realpython.com/courses/python-mmap-io/</id>
      <link href="https://realpython.com/courses/python-mmap-io/"/>
      <updated>2022-06-21T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how to use Python&#x27;s mmap module to improve your code&#x27;s performance when you&#x27;re working with files. You&#x27;ll get a quick overview of the different types of memory before diving into how and why memory mapping with mmap can make your file I/O operations faster.</summary>
      <content type="html">
        &lt;p&gt;The &lt;a href=&quot;https://www.python.org/dev/peps/pep-0020/&quot;&gt;Zen of Python&lt;/a&gt; has a lot of wisdom to offer. One especially useful idea is that &amp;ldquo;There should be one&amp;mdash;and preferably only one&amp;mdash;obvious way to do it.&amp;rdquo; Yet there are multiple ways to do most things in Python, and often for good reason. For example, there are &lt;a href=&quot;https://realpython.com/read-write-files-python/&quot;&gt;multiple ways to read a file in Python&lt;/a&gt;, including the rarely used &lt;code&gt;mmap&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;Python&amp;rsquo;s &lt;code&gt;mmap&lt;/code&gt; provides memory-mapped file input and output (I/O). It allows you to take advantage of lower-level operating system functionality to read files as if they were one large &lt;a href=&quot;https://realpython.com/python-strings/&quot;&gt;string&lt;/a&gt; or &lt;a href=&quot;https://dbader.org/blog/python-arrays&quot;&gt;array&lt;/a&gt;. This can provide significant performance improvements in code that requires a lot of file I/O.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What kinds of &lt;strong&gt;computer memory&lt;/strong&gt; exist&lt;/li&gt;
&lt;li&gt;What problems you can solve with &lt;strong&gt;&lt;code&gt;mmap&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How use memory mapping to &lt;strong&gt;read large files faster&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to change a &lt;strong&gt;portion of a file&lt;/strong&gt; without rewriting the entire file&lt;/li&gt;
&lt;li&gt;How to use &lt;code&gt;mmap&lt;/code&gt; to &lt;strong&gt;share information&lt;/strong&gt; between multiple processes&lt;/li&gt;
&lt;/ul&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>How Can You Emulate Do-While Loops in Python?</title>
      <id>https://realpython.com/python-do-while/</id>
      <link href="https://realpython.com/python-do-while/"/>
      <updated>2022-06-20T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn how to emulate do-while loops in Python. The most common technique to do this is to create an infinite while loop with a conditional statement that controls the loop and jumps out of it using a break statement.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;If you came to Python from a language like &lt;a href=&quot;https://realpython.com/c-for-python-programmers/&quot;&gt;C&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/python-vs-cpp/&quot;&gt;C++&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/java-vs-python/&quot;&gt;Java&lt;/a&gt;, or &lt;a href=&quot;https://realpython.com/python-vs-javascript/&quot;&gt;JavaScript&lt;/a&gt;, then you may be missing their &lt;a href=&quot;https://en.wikipedia.org/wiki/Do_while_loop&quot;&gt;do-while&lt;/a&gt; loop construct. A do-while loop is a common &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_flow&quot;&gt;control flow&lt;/a&gt; statement that executes its code block at least once, regardless of whether the &lt;strong&gt;loop condition&lt;/strong&gt; is true or false. This behavior relies on the fact that the loop condition is evaluated at the end of each iteration. So, the first iteration always runs.&lt;/p&gt;
&lt;p&gt;One of the most common use cases for this type of loop is accepting and processing the user’s input. Consider the following example written in C:&lt;/p&gt;
&lt;div class=&quot;highlight c&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;hll&quot;&gt;    &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Enter a positive number: &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;scanf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;%d&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;%d&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;hll&quot;&gt;    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This small program runs a &lt;code&gt;do&lt;/code&gt; … &lt;code&gt;while&lt;/code&gt; loop that asks the user to enter a positive number. The input is then stored in &lt;code&gt;number&lt;/code&gt; and printed to the screen. The loop keeps running these operations until the user enters a non-positive number.&lt;/p&gt;
&lt;p&gt;If you compile and run this program, then you’ll get the following behavior:&lt;/p&gt;
&lt;div class=&quot;highlight sh&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;go&quot;&gt;Enter a positive number: 1&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Enter a positive number: 4&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Enter a positive number: -1&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The loop condition, &lt;code&gt;number &amp;gt; 0&lt;/code&gt;, is evaluated at the end of the loop, which guarantees that the loop’s &lt;strong&gt;body&lt;/strong&gt; will run at least once. This characteristic distinguishes do-while loops from regular &lt;a href=&quot;https://en.wikipedia.org/wiki/While_loop&quot;&gt;while&lt;/a&gt; loops, which evaluate the loop condition at the beginning. In a while loop, there’s no guarantee of running the loop’s body. If the loop condition is false from the start, then the body won’t run at all.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In this tutorial, you’ll refer to the condition that controls a while or do-while loop as the &lt;strong&gt;loop condition&lt;/strong&gt;. This concept shouldn’t be confused with the &lt;strong&gt;loop’s body&lt;/strong&gt;, which is the code block that’s sandwiched between curly brackets in languages like C or indented in Python.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;One reason for having a do-while loop construct is &lt;em&gt;efficiency&lt;/em&gt;. For example, if the loop condition implies costly operations and the loop must run &lt;em&gt;n&lt;/em&gt; times (&lt;em&gt;n&lt;/em&gt; ≥ 1), then the condition will run &lt;em&gt;n&lt;/em&gt; times in a do-while loop. In contrast, a regular while loop will run the costly condition &lt;em&gt;n&lt;/em&gt; + 1 times.&lt;/p&gt;
&lt;p&gt;Python doesn’t have a do-while loop construct. Why? Apparently, the core developers never found a good syntax for this type of loop. Probably, that’s the reason why &lt;a href=&quot;https://twitter.com/gvanrossum&quot;&gt;Guido van Rossum&lt;/a&gt; &lt;a href=&quot;https://mail.python.org/pipermail/python-ideas/2013-June/021610.html&quot;&gt;rejected&lt;/a&gt; PEP &lt;a href=&quot;https://peps.python.org/pep-0315/&quot;&gt;315&lt;/a&gt;, which was an attempt to add do-while loops to the language. Some core developers would prefer to have a do-while loop and are looking to &lt;a href=&quot;https://twitter.com/raymondh/status/1528772337306419200&quot;&gt;revive the discussion around this topic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the meantime, you’ll explore the alternatives available in Python. In short, &lt;strong&gt;how can you emulate do-while loops in Python?&lt;/strong&gt; In this tutorial, you’ll learn how you can create loops with &lt;code&gt;while&lt;/code&gt; that behave like do-while loops.&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Free Download:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/python-tricks-sample-pdf/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-python-tricks-sample-pdf&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Get a sample chapter from Python Tricks: The Book&lt;/a&gt; that shows you Python’s best practices with simple examples you can apply instantly to write more beautiful + Pythonic code.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;in-short-use-a-while-loop-and-the-break-statement&quot;&gt;In Short: Use a &lt;code&gt;while&lt;/code&gt; Loop and the &lt;code&gt;break&lt;/code&gt; Statement&lt;a class=&quot;headerlink&quot; href=&quot;#in-short-use-a-while-loop-and-the-break-statement&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The most common technique to emulate a do-while loop in Python is to use an infinite &lt;a href=&quot;https://realpython.com/python-while-loop/&quot;&gt;&lt;code&gt;while&lt;/code&gt; loop&lt;/a&gt; with a &lt;a href=&quot;https://realpython.com/python-keywords/#iteration-keywords-for-while-break-continue-else&quot;&gt;&lt;code&gt;break&lt;/code&gt;&lt;/a&gt; statement wrapped in an &lt;a href=&quot;https://realpython.com/python-conditional-statements/&quot;&gt;&lt;code&gt;if&lt;/code&gt; statement&lt;/a&gt; that checks a given condition and breaks the iteration if that condition becomes true:&lt;/p&gt;
&lt;div class=&quot;highlight python&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# Do some processing...&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# Update the condition...&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;condition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;break&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-do-while/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-do-while/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #114: Getting Started in Python Cybersecurity and Forensics</title>
      <id>https://realpython.com/podcasts/rpp/114/</id>
      <link href="https://realpython.com/podcasts/rpp/114/"/>
      <updated>2022-06-17T12:00:00+00:00</updated>
      <summary>Are you interested in a career in security using Python? Would you like to stay ahead of potential vulnerabilities in your Python applications? This week on the show, James Pleger talks about Python information security, incident response, and forensics.</summary>
      <content type="html">
        &lt;p&gt;Are you interested in a career in security using Python? Would you like to stay ahead of potential vulnerabilities in your Python applications? This week on the show, James Pleger talks about Python information security, incident response, and forensics.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Build Your Python Project Documentation With MkDocs</title>
      <id>https://realpython.com/python-project-documentation-with-mkdocs/</id>
      <link href="https://realpython.com/python-project-documentation-with-mkdocs/"/>
      <updated>2022-06-15T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn how to build professional documentation for a Python package using MkDocs and mkdocstrings. These tools allow you to generate nice-looking and modern documentation from Markdown files and, more importantly, from your code&#x27;s docstrings.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;In this tutorial, you’ll learn how to quickly build &lt;strong&gt;documentation&lt;/strong&gt; for a Python package using &lt;strong&gt;MkDocs&lt;/strong&gt; and &lt;strong&gt;mkdocstrings&lt;/strong&gt;. These tools allow you to generate nice-looking and modern documentation from &lt;strong&gt;Markdown&lt;/strong&gt; files and your code’s &lt;strong&gt;docstrings&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Maintaining &lt;strong&gt;auto-generated documentation&lt;/strong&gt; means less effort because you’re linking information between your code and the documentation pages. However, good documentation is &lt;em&gt;more&lt;/em&gt; than just the technical description pulled from your code! Your project will appeal more to users if you guide them through examples and connect the dots between the docstrings.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Material for MkDocs theme&lt;/strong&gt; makes your documentation &lt;strong&gt;look good&lt;/strong&gt; without any extra effort and is used by popular projects such as &lt;a href=&quot;https://typer.tiangolo.com&quot;&gt;Typer CLI&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/fastapi-python-web-apis/&quot;&gt;FastAPI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Work with &lt;strong&gt;MkDocs&lt;/strong&gt; to produce &lt;strong&gt;static pages from Markdown&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Pull in &lt;strong&gt;code documentation from docstrings&lt;/strong&gt; using &lt;strong&gt;mkdocstrings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Follow &lt;strong&gt;best practices&lt;/strong&gt; for project documentation&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Material for MkDocs theme&lt;/strong&gt; to make your documentation look good&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt; your documentation on &lt;strong&gt;GitHub Pages&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use the auto-generation features of MkDocs together with mkdocstrings, then you can create good documentation with less effort. Start your documentation with docstrings in your code, then build it into a deployed and user-friendly online resource that documents your Python project.&lt;/p&gt;
&lt;p&gt;Ready to go? Then click the link below to get the source code for the project:&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Get Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/mkdocs-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-mkdocs-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get access to the source code&lt;/a&gt; that you’ll use to build your documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;a class=&quot;headerlink&quot; href=&quot;#demo&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this tutorial, you’ll build project documentation that’s partly auto-generated from docstrings in your code. The example code package is intentionally simplistic, so you can focus your attention on learning how to use MkDocs and the associated libraries.&lt;/p&gt;
&lt;p&gt;After you set up your project documentation locally, you’ll learn how to host it on GitHub Pages, so it’ll be available for everyone to see:&lt;/p&gt;
&lt;figure&gt;
  &lt;div class=&quot;embed-responsive embed-responsive-16by9 rounded mb-3 border&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; class=&quot;embed-responsive-item&quot; src=&quot;https://player.vimeo.com/video/709676922&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;

&lt;/figure&gt;

&lt;p&gt;You can use the example project documentation that you’ll build in this tutorial as a blueprint to create documentation for your own Python projects.&lt;/p&gt;
&lt;h2 id=&quot;project-overview&quot;&gt;Project Overview&lt;a class=&quot;headerlink&quot; href=&quot;#project-overview&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You’ll build project documentation for a toy package called &lt;code&gt;calculator&lt;/code&gt; that contains only one module named &lt;code&gt;calculations.py&lt;/code&gt;, which has a couple of example Python functions.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The provided code doesn’t offer any new functionality and is only meant as a basis to learn how to use existing project code to build your documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You’ll follow a guideline for project documentation called the &lt;a href=&quot;https://diataxis.fr/&quot;&gt;Diátaxis documentation framework&lt;/a&gt;, which has widespread &lt;a href=&quot;https://diataxis.fr/adoption/&quot;&gt;adoption&lt;/a&gt; in the Python community and is used by large projects such as &lt;a href=&quot;https://www.djangoproject.com&quot;&gt;Django&lt;/a&gt; and &lt;a href=&quot;https://numpy.org&quot;&gt;NumPy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This system suggests splitting up your documentation into four different parts with different orientations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://diataxis.fr/tutorials/&quot;&gt;Tutorials&lt;/a&gt;:&lt;/strong&gt; Learning-oriented&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://diataxis.fr/how-to-guides/&quot;&gt;How-To Guides&lt;/a&gt;:&lt;/strong&gt; Problem-oriented&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://diataxis.fr/reference/&quot;&gt;Reference&lt;/a&gt;:&lt;/strong&gt; Information-oriented&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://diataxis.fr/explanation/&quot;&gt;Explanation&lt;/a&gt;:&lt;/strong&gt; Understanding-oriented&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Splitting your project documentation into these four different purposes with different orientations will help you create comprehensive documentation for your Python project.&lt;/p&gt;
&lt;p&gt;From a technical perspective, you’ll build your documentation using three Python packages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mkdocs.org&quot;&gt;MkDocs&lt;/a&gt; for building static pages from Markdown&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mkdocstrings.github.io/&quot;&gt;mkdocstrings&lt;/a&gt; for auto-generating documentation from docstrings in your code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/squidfunk/mkdocs-material&quot;&gt;Material for MkDocs&lt;/a&gt; for styling your documentation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When you want to use MkDocs for auto-generating parts of your documentation from your docstrings, you’ll &lt;em&gt;need&lt;/em&gt; to add the mkdocstrings package.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;a href=&quot;http://sphinx-autoapi.readthedocs.io/&quot;&gt;Sphinx&lt;/a&gt;, another popular tool for Python project documentation, can auto-generate text from your docstrings without additional extensions. However, Sphinx primarily uses reStructuredText instead of Markdown and is overall less straightforward to work with than MkDocs.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You don’t absolutely need to add the Material for MkDocs theme for building your project documentation, but it’ll help to render the documentation in a user-friendly manner.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-project-documentation-with-mkdocs/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-project-documentation-with-mkdocs/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Combining Data in pandas With concat() and merge()</title>
      <id>https://realpython.com/courses/data-pandas-concat-and-merge/</id>
      <link href="https://realpython.com/courses/data-pandas-concat-and-merge/"/>
      <updated>2022-06-14T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn two techniques for combining data in pandas: merge() and concat(). Combining Series and DataFrame objects in pandas is a powerful way to gain new insights into your data.</summary>
      <content type="html">
        &lt;p&gt;The &lt;code&gt;Series&lt;/code&gt; and &lt;code&gt;DataFrame&lt;/code&gt; objects in pandas are powerful tools for exploring and analyzing data. Part of their power comes from a multifaceted approach to combining separate datasets. With pandas, you can &lt;strong&gt;merge&lt;/strong&gt; and &lt;strong&gt;concatenate&lt;/strong&gt; your datasets, allowing you to unify and better understand your data as you analyze it. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn how and when to combine your data in pandas with:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;merge()&lt;/code&gt;&lt;/strong&gt; for combining data on common columns or indices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;concat()&lt;/code&gt;&lt;/strong&gt; for combining DataFrames across rows or columns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have some experience using &lt;a href=&quot;https://realpython.com/pandas-dataframe/&quot;&gt;&lt;code&gt;DataFrame&lt;/code&gt;&lt;/a&gt; and &lt;code&gt;Series&lt;/code&gt; objects in &lt;a href=&quot;https://realpython.com/pandas-python-explore-dataset/&quot;&gt;pandas&lt;/a&gt; and you&amp;rsquo;re ready to learn how to combine them, then this video course will help you do exactly that. If you&amp;rsquo;re feeling a bit rusty, then you can &lt;a href=&quot;https://realpython.com/courses/pandas-dataframe-working-with-data/&quot;&gt;watch a quick refresher on DataFrames&lt;/a&gt; before proceeding.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The subprocess Module: Wrapping Programs With Python</title>
      <id>https://realpython.com/python-subprocess/</id>
      <link href="https://realpython.com/python-subprocess/"/>
      <updated>2022-06-13T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn how to leverage other apps and programs that aren&#x27;t Python, wrapping them or launching them from your Python scripts using the subprocess module. You&#x27;ll learn about processes all the way up to interacting with a process as it executes.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;If you’ve ever wanted to simplify your command-line scripting or use Python alongside command-line applications—or any applications for that matter—then the Python &lt;code&gt;subprocess&lt;/code&gt; module can help. From running shell commands and command-line applications to launching &lt;a href=&quot;https://en.wikipedia.org/wiki/Graphical_user_interface&quot;&gt;GUI&lt;/a&gt; applications, the Python &lt;code&gt;subprocess&lt;/code&gt; module can help.&lt;/p&gt;
&lt;p&gt;By the end of this tutorial, you’ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand how the Python &lt;code&gt;subprocess&lt;/code&gt; module interacts with the &lt;strong&gt;operating system&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Issue &lt;strong&gt;shell commands&lt;/strong&gt; like &lt;code&gt;ls&lt;/code&gt; or &lt;code&gt;dir&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Feed &lt;strong&gt;input&lt;/strong&gt; into a process and use its &lt;strong&gt;output&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Handle &lt;strong&gt;errors&lt;/strong&gt; when using &lt;code&gt;subprocess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Understand the &lt;strong&gt;use cases&lt;/strong&gt; for &lt;code&gt;subprocess&lt;/code&gt; by considering practical examples&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this tutorial, you’ll get a &lt;a href=&quot;#processes-and-subprocesses&quot;&gt;high-level mental model&lt;/a&gt; for understanding processes, subprocesses, and Python before getting stuck into the &lt;code&gt;subprocess&lt;/code&gt; module and &lt;a href=&quot;#basic-usage-of-the-python-subprocess-module&quot;&gt;experimenting with an example&lt;/a&gt;. After that, you’ll start exploring the shell and learn how you can leverage Python’s &lt;code&gt;subprocess&lt;/code&gt; with &lt;a href=&quot;#basic-usage-of-subprocess-with-windows-shells&quot;&gt;Windows&lt;/a&gt; and &lt;a href=&quot;#basic-usage-of-subprocess-with-unix-based-shells&quot;&gt;UNIX-based&lt;/a&gt; shells and systems. Specifically, you’ll cover &lt;a href=&quot;#communication-with-processes&quot;&gt;communication with processes&lt;/a&gt;, &lt;a href=&quot;#introduction-to-pipes&quot;&gt;pipes&lt;/a&gt; and &lt;a href=&quot;#subprocess-exceptions&quot;&gt;error handling&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;subprocess&lt;/code&gt; isn’t a GUI automation module or a way to achieve concurrency. For GUI automation, you might want to look at &lt;a href=&quot;https://github.com/asweigart/pyautogui&quot;&gt;PyAutoGUI&lt;/a&gt;. For concurrency, take a look at this tutorial’s section on &lt;a href=&quot;#python-modules-associated-with-subprocess&quot;&gt;modules related to &lt;code&gt;subprocess&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Once you have the basics down, you’ll be exploring some &lt;a href=&quot;#practical-ideas&quot;&gt;practical ideas&lt;/a&gt; for how to leverage Python’s &lt;code&gt;subprocess&lt;/code&gt;. You’ll also dip your toes into &lt;a href=&quot;#the-popen-class&quot;&gt;advanced usage&lt;/a&gt; of Python’s &lt;code&gt;subprocess&lt;/code&gt; by experimenting with the underlying &lt;code&gt;Popen()&lt;/code&gt; constructor.&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;&lt;p&gt;&lt;strong&gt;Join Now:&lt;/strong&gt; &lt;a href=&quot;&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-newsletter&quot; data-focus=&quot;false&quot;&gt;Click here to join the Real Python Newsletter&lt;/a&gt; and you&#x27;ll never miss another Python tutorial, course update, or post.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;processes-and-subprocesses&quot;&gt;Processes and Subprocesses&lt;a class=&quot;headerlink&quot; href=&quot;#processes-and-subprocesses&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First off, you might be wondering why there’s a &lt;code&gt;sub&lt;/code&gt; in the Python &lt;code&gt;subprocess&lt;/code&gt; module name. And what exactly is a process, anyway? In this section, you’ll answer these questions. You’ll come away with a high-level mental model for thinking about processes. If you’re already familiar with processes, then you might want to skip directly to &lt;a href=&quot;#basic-usage-of-the-python-subprocess-module&quot;&gt;basic usage of the Python &lt;code&gt;subprocess&lt;/code&gt; module&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;processes-and-the-operating-system&quot;&gt;Processes and the Operating System&lt;a class=&quot;headerlink&quot; href=&quot;#processes-and-the-operating-system&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Whenever you use a computer, you’ll always be interacting with programs. A &lt;strong&gt;process&lt;/strong&gt; is the operating system’s abstraction of a running program. So, using a computer always involve processes. Start menus, app bars, command-line interpreters, text editors, browsers, and more—every application comprises one or more processes.&lt;/p&gt;
&lt;p&gt;A typical operating system will report hundreds or even thousands of running processes, which you’ll get to explore &lt;a href=&quot;#active-processes-on-your-system&quot;&gt;shortly&lt;/a&gt;. However, central &lt;em&gt;processing&lt;/em&gt; units (CPUs) typically only have a handful of cores, which means that they can only run a handful of instructions simultaneously. So, you may wonder how thousands of processes can appear to run at the same time.&lt;/p&gt;
&lt;p&gt;In short, the operating system is a marvelous multitasker—as it has to be. The CPU is the brain of a computer, but it operates at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nanosecond&quot;&gt;nanosecond&lt;/a&gt; timescale. Most other components of a computer are far slower than the CPU. For instance, a magnetic hard disk read takes thousands of times longer than a typical CPU operation. &lt;/p&gt;
&lt;p&gt;If a process needs to write something to the hard drive, or wait for a response from a remote server, then the CPU would sit idle &lt;em&gt;most of the time&lt;/em&gt;. Multitasking keeps the CPU busy.&lt;/p&gt;
&lt;p&gt;Part of what makes the operating system so great at multitasking is that it’s fantastically organized too. The operating system keeps track of processes in a process table or &lt;a href=&quot;https://en.wikipedia.org/wiki/Process_control_block&quot;&gt;process control block&lt;/a&gt;. In this table, you’ll find the process’s &lt;a href=&quot;https://realpython.com/why-close-file-python/#in-short-files-are-resources-limited-by-the-operating-system&quot;&gt;file handles&lt;/a&gt;, security context, references to its &lt;a href=&quot;https://en.wikipedia.org/wiki/Address_space&quot;&gt;address spaces&lt;/a&gt;, and more.&lt;/p&gt;
&lt;p&gt;The process table allows the operating system to abandon a particular process at will, because it has all the information it needs to come back and continue with the process at a later time. A process may be interrupted many thousands of times during execution, but the operating system always finds the exact point where it left off upon returning.&lt;/p&gt;
&lt;p&gt;An operating system doesn’t boot up with thousands of processes, though. Many of the processes you’re familiar with are started by you. In the next section, you’ll look into the lifetime of a process.&lt;/p&gt;
&lt;h3 id=&quot;process-lifetime&quot;&gt;Process Lifetime&lt;a class=&quot;headerlink&quot; href=&quot;#process-lifetime&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Think of how you might start a Python application from the command line. This is an instance of your command-line &lt;em&gt;process&lt;/em&gt; starting a Python &lt;em&gt;process&lt;/em&gt;:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/Peek_2022-05-06_11-31.b24eb35f6ed0.gif&quot; target=&quot;_blank&quot;&gt;&lt;img loading=&quot;lazy&quot; class=&quot;img-fluid mx-auto d-block &quot; src=&quot;https://files.realpython.com/media/Peek_2022-05-06_11-31.b24eb35f6ed0.gif&quot; width=&quot;474&quot; height=&quot;286&quot; srcset=&quot;https://files.realpython.com/media/Peek_2022-05-06_11-31.b24eb35f6ed0.gif 118w, https://files.realpython.com/media/Peek_2022-05-06_11-31.b24eb35f6ed0.gif 237w, https://files.realpython.com/media/Peek_2022-05-06_11-31.b24eb35f6ed0.gif 474w&quot; sizes=&quot;75vw&quot; alt=&quot;Animation of basic process creation&quot; data-asset=&quot;4357&quot;&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p&gt;The process that starts another process is referred to as the &lt;strong&gt;parent&lt;/strong&gt;, and the new process is referred to as the &lt;strong&gt;child&lt;/strong&gt;. The parent and child processes run mostly independently. Sometimes the child inherits specific resources or contexts from the parent.&lt;/p&gt;
&lt;p&gt;As you learned in &lt;a href=&quot;#processes-and-the-operating-system&quot;&gt;Processes and the Operating System&lt;/a&gt;, information about processes is kept in a table. Each process keeps track of its parents, which allows the process hierarchy to be represented as a tree. You’ll be exploring your system’s process tree in the &lt;a href=&quot;#active-processes-on-your-system&quot;&gt;next section&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;alert alert-primary&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The precise mechanism for creating processes differs depending on the operating system. For a brief overview, the Wikipedia article on process management has a short section on &lt;a href=&quot;https://en.wikipedia.org/wiki/Process_management_(computing)#Process_creation&quot;&gt;process creation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more details about the Windows mechanism, check out the win32 API documentation page on &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/procthread/creating-processes&quot;&gt;creating processes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On UNIX-based systems, processes are typically created by using &lt;a href=&quot;https://man7.org/linux/man-pages/man2/fork.2.html&quot;&gt;&lt;code&gt;fork()&lt;/code&gt;&lt;/a&gt; to copy the current process and then replacing the child process with one of the &lt;a href=&quot;https://man7.org/linux/man-pages/man3/exec.3.html&quot;&gt;&lt;code&gt;exec()&lt;/code&gt;&lt;/a&gt; family of functions.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The parent-child relationship between a process and its subprocess isn’t always the same. Sometimes the two processes will share specific resources, like inputs and outputs, but sometimes they won’t. Sometimes child processes live longer than the parent. A child outliving the parent can lead to &lt;a href=&quot;https://en.wikipedia.org/wiki/Orphan_process&quot;&gt;orphaned&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Zombie_process&quot;&gt;zombie&lt;/a&gt; processes, though more discussion about those is outside the scope of this tutorial.&lt;/p&gt;
&lt;p&gt;When a process has finished running, it’ll usually end. Every process, on exit, should return an integer. This integer is referred to as the &lt;strong&gt;return code&lt;/strong&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Exit_status&quot;&gt;exit status&lt;/a&gt;. Zero is synonymous with success, while any other value is considered a failure. Different integers can be used to indicate the reason why a process has failed.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-subprocess/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-subprocess/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #113: Build Streamlit Data Science Dashboards &amp; Verbose Regex f-Strings</title>
      <id>https://realpython.com/podcasts/rpp/113/</id>
      <link href="https://realpython.com/podcasts/rpp/113/"/>
      <updated>2022-06-10T12:00:00+00:00</updated>
      <summary>Would you like a fast way to share your data science project results as an interactive dashboard instead of a Jupyter notebook? Streamlit is a library for creating simple web apps and dashboards using just Python. This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.</summary>
      <content type="html">
        &lt;p&gt;Would you like a fast way to share your data science project results as an interactive dashboard instead of a Jupyter notebook? Streamlit is a library for creating simple web apps and dashboards using just Python. This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Build a Quiz Application With Python</title>
      <id>https://realpython.com/python-quiz-application/</id>
      <link href="https://realpython.com/python-quiz-application/"/>
      <updated>2022-06-08T14:00:00+00:00</updated>
      <summary>In this step-by-step project, you&#x27;ll build a Python quiz application for the terminal. Your app will ask you multiple-choice questions that you can use to strengthen your own knowledge or challenge your friends to test theirs.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;In this tutorial, you’ll build a &lt;strong&gt;Python quiz application&lt;/strong&gt; for the terminal. The word &lt;strong&gt;quiz&lt;/strong&gt; was &lt;a href=&quot;https://www.merriam-webster.com/dictionary/quiz#first-known&quot;&gt;first used&lt;/a&gt; in 1781 to mean &lt;em&gt;eccentric person&lt;/em&gt;. Nowadays, it’s mostly used to describe short tests of trivia or expert knowledge with questions like the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When was the first known use of the word &lt;em&gt;quiz&lt;/em&gt;?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;By following along in this step-by-step project, you’ll build an application that can test a person’s expertise on a range of topics. You can use this project to strengthen your own knowledge or to challenge your friends to a fun battle of wits.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interact&lt;/strong&gt; with the user in the terminal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improve&lt;/strong&gt; the usability of your application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refactor&lt;/strong&gt; your application to continuously improve it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Store&lt;/strong&gt; data in dedicated data files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The quiz application is a comprehensive project for anyone comfortable with the basics of Python. Throughout the tutorial, you’ll get all the code you need in separate, bite-size steps. You can also find the full source code of the application by clicking on the link below:&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Get Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/python-quiz-application-project-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-python-quiz-application-project-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get access to the source code&lt;/a&gt; that you’ll use to build your quiz application.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Whether you’re an eccentric person or not, read on to learn how to create your own quiz.&lt;/p&gt;
&lt;h2 id=&quot;demo-your-python-quiz-application&quot;&gt;Demo: Your Python Quiz Application&lt;a class=&quot;headerlink&quot; href=&quot;#demo-your-python-quiz-application&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this step-by-step project, you’ll build a terminal application that can quiz you and your friends on a range of topics:&lt;/p&gt;
&lt;figure&gt;
  &lt;div class=&quot;embed-responsive embed-responsive-16by9 rounded mb-3 border&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; class=&quot;embed-responsive-item&quot; src=&quot;https://player.vimeo.com/video/717554866?background=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;

&lt;/figure&gt;

&lt;p&gt;You first choose a topic for your questions. Then, for each question, you’ll choose an answer from a set of alternatives. Some questions may have multiple correct answers. You can access a hint to help you along the way. After answering a question, you’ll read an explanation that can provide more context for the answer.&lt;/p&gt;
&lt;h2 id=&quot;project-overview&quot;&gt;Project Overview&lt;a class=&quot;headerlink&quot; href=&quot;#project-overview&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You’ll start by creating a basic Python quiz application that’s only capable of asking a question, collecting an answer, and checking whether the answer is correct. From there, you’ll add more and more features in order to make your app more interesting, user-friendly, and fun.&lt;/p&gt;
&lt;p&gt;You’ll build the quiz application iteratively by going through the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a basic application that can ask multiple-choice questions.&lt;/li&gt;
&lt;li&gt;Make the app more user-friendly by improving how it looks and how it handles user errors.&lt;/li&gt;
&lt;li&gt;Refactor the code to use functions.&lt;/li&gt;
&lt;li&gt;Separate question data from source code by storing questions in a dedicated data file.&lt;/li&gt;
&lt;li&gt;Expand the app to handle multiple correct answers, give hints, and provide explanations.&lt;/li&gt;
&lt;li&gt;Add interest by supporting different quiz topics to choose from.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As you follow along, you’ll gain experience in starting with a small script and expanding it. This is an important skill in and of itself. Your favorite program, app, or game probably started as a small &lt;a href=&quot;https://en.wikipedia.org/wiki/Proof_of_concept&quot;&gt;proof of concept&lt;/a&gt; that later grew into what it is today.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;a class=&quot;headerlink&quot; href=&quot;#prerequisites&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this tutorial, you’ll build a quiz application using Python’s basic building blocks. While working through the steps, it’s helpful if you’re comfortable with the following concepts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/python-input-output/&quot;&gt;Reading input&lt;/a&gt; from the user at the terminal&lt;/li&gt;
&lt;li&gt;Organizing data in &lt;a href=&quot;https://realpython.com/python-data-structures/&quot;&gt;structures&lt;/a&gt; like &lt;a href=&quot;https://realpython.com/python-lists-tuples/#python-lists&quot;&gt;lists&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/python-lists-tuples/#python-tuples&quot;&gt;tuples&lt;/a&gt;, and &lt;a href=&quot;https://realpython.com/python-dicts/&quot;&gt;dictionaries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Using &lt;a href=&quot;https://realpython.com/python-conditional-statements/&quot;&gt;&lt;code&gt;if&lt;/code&gt; statements&lt;/a&gt; to check different conditions&lt;/li&gt;
&lt;li&gt;Repeating actions with &lt;a href=&quot;https://realpython.com/python-for-loop/&quot;&gt;&lt;code&gt;for&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/python-while-loop/&quot;&gt;&lt;code&gt;while&lt;/code&gt;&lt;/a&gt; loops&lt;/li&gt;
&lt;li&gt;Encapsulating code with &lt;a href=&quot;https://realpython.com/defining-your-own-python-function/&quot;&gt;functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you’re not confident in your knowledge of these prerequisites, then that’s okay too! In fact, going through this tutorial will help you practice these concepts. You can always stop and review the resources linked above if you get stuck.&lt;/p&gt;
&lt;h2 id=&quot;step-1-ask-questions&quot;&gt;Step 1: Ask Questions&lt;a class=&quot;headerlink&quot; href=&quot;#step-1-ask-questions&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this step, you’ll learn how to create a program that can ask questions and check answers. This will be the foundation of your quiz application, which you’ll improve upon in the rest of the tutorial. At the end of this step, your program will look like this:&lt;/p&gt;
&lt;figure&gt;
  &lt;div class=&quot;embed-responsive embed-responsive-16by9 rounded mb-3 border&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; class=&quot;embed-responsive-item&quot; src=&quot;https://player.vimeo.com/video/717554848?background=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;

&lt;/figure&gt;

&lt;p&gt;Your program will be able to ask questions and check answers. This version includes the basic functionality that you need, but you’ll add more functionality in later steps. If you prefer, then you can download the source code as it’ll look when you’re done with this step by clicking the link below and entering the &lt;code&gt;source_code_step_1&lt;/code&gt; directory:&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-quiz-application/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-quiz-application/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Write and Test a Python Function: Interview Practice</title>
      <id>https://realpython.com/courses/interview-practice-python-function/</id>
      <link href="https://realpython.com/courses/interview-practice-python-function/"/>
      <updated>2022-06-07T14:00:00+00:00</updated>
      <summary>In this interview practice session, you&#x27;ll tackle creating a function that will double every character within a string. This challenge is typical of what you might encounter in a Python job interview. You&#x27;ll explore how to add tests to your code.</summary>
      <content type="html">
        &lt;p&gt;Whether you&amp;rsquo;re looking to ace your coding interview or simply to level up your development skills, solving &lt;strong&gt;coding challenges&lt;/strong&gt; can help you grow as a programmer. In this Real Python Code Conversation, Philipp challenges Martin to write a function that doubles each character in a string. Through their conversation, you&amp;rsquo;ll learn how to tackle a coding challenge and stand out from the pack in your job search.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;functions&lt;/strong&gt; to write reusable, maintainable code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Communicate&lt;/strong&gt; your thoughts in a &lt;strong&gt;coding interview&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;if __name__ == &quot;__main__&quot;&lt;/code&gt; to build &lt;strong&gt;multipurpose code&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Write &lt;strong&gt;tests&lt;/strong&gt; and use &lt;strong&gt;test-driven development&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the end of the course, you&amp;rsquo;ll get to hear how Martin did with the coding challenge, and you&amp;rsquo;ll leave with resources for further exploration.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>A First Look at PyScript: Python in the Web Browser</title>
      <id>https://realpython.com/pyscript-python-in-browser/</id>
      <link href="https://realpython.com/pyscript-python-in-browser/"/>
      <updated>2022-06-06T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn about PyScript, a new framework that allows for running Python in the web browser with few or no code modifications and excellent performance. You&#x27;ll leverage browser APIs and JavaScript libraries to build rich, highly interactive web applications with Python.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;PyScript is a brand-new framework that caused a lot of excitement when &lt;a href=&quot;https://twitter.com/pwang&quot;&gt;Peter Wang&lt;/a&gt;, the CEO and co-founder of &lt;a href=&quot;https://www.anaconda.com/&quot;&gt;Anaconda, Inc.&lt;/a&gt;, revealed it during his &lt;a href=&quot;https://anaconda.cloud/pyscript-pycon2022-peter-wang-keynote&quot;&gt;keynote speech&lt;/a&gt; at &lt;a href=&quot;https://realpython.com/real-python-pycon-us-2022/&quot;&gt;PyCon US 2022&lt;/a&gt;. Although this project is just an experiment in an early phase of development, people on &lt;a href=&quot;https://twitter.com/pyscript_dev&quot;&gt;social media&lt;/a&gt; seem to have already fallen in love with it. This tutorial will get you up to speed with PyScript, while the official documentation is still in the making.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build &lt;strong&gt;interactive front-end apps&lt;/strong&gt; using Python and JavaScript&lt;/li&gt;
&lt;li&gt;Run existing Python code in the &lt;strong&gt;web browser&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Reuse the same code on the &lt;strong&gt;back-end&lt;/strong&gt; and the &lt;strong&gt;front-end&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Call Python functions from &lt;strong&gt;JavaScript&lt;/strong&gt; and the other way around&lt;/li&gt;
&lt;li&gt;Distribute Python programs with &lt;strong&gt;zero dependencies&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get the most out of this tutorial, you should ideally have some experience with &lt;a href=&quot;https://realpython.com/python-vs-javascript/&quot;&gt;JavaScript&lt;/a&gt; and front-end programming in general. At the same time, you’ll be able to follow along just fine even if you’ve never done any &lt;a href=&quot;https://realpython.com/learning-paths/become-python-web-developer/&quot;&gt;web development&lt;/a&gt; before. After all, that’s the whole idea behind PyScript!&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Free Download:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/cpython-internals-sample/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-cpython-internals-sample&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Get a sample chapter from CPython Internals: Your Guide to the Python 3 Interpreter&lt;/a&gt; showing you how to unlock the inner workings of the Python language, compile the Python interpreter from source code, and participate in the development of CPython.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;disclaimer-pyscript-is-an-experimental-project&quot;&gt;Disclaimer: PyScript Is an Experimental Project!&lt;a class=&quot;headerlink&quot; href=&quot;#disclaimer-pyscript-is-an-experimental-project&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This tutorial is coming to you only a few weeks after the official announcement of PyScript. At the time of writing, you could find the following warning prominently displayed on the framework’s home page:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Please be advised that PyScript is very alpha and under heavy development. There are many known issues, from usability to loading times, and you should expect things to change often. We encourage people to play and explore with PyScript, but at this time we do not recommend using it for production. (&lt;a href=&quot;https://pyscript.net/&quot;&gt;Source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This can’t be stressed enough. Before you get started, be prepared for things not to work as presented in this tutorial. Some things may not work at all by the time you read this, while some problems might have already been addressed in one way or another.&lt;/p&gt;
&lt;p&gt;That’s not surprising, given PyScript’s relatively short history. Because it’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Open-source_software&quot;&gt;open-source software&lt;/a&gt;, you can take a peek at its &lt;a href=&quot;https://github.com/pyscript/pyscript/commits/main&quot;&gt;Git commit history&lt;/a&gt; on GitHub. When you do, you’ll find that &lt;a href=&quot;https://twitter.com/b_smoke&quot;&gt;Fabio Pliger&lt;/a&gt; from Anaconda, who’s the creator and technical lead of PyScript, made the &lt;a href=&quot;https://github.com/pyscript/pyscript/commit/bc5875790cf6520e471c16d2932070322cd523a7&quot;&gt;initial commit&lt;/a&gt; on February 21, 2022. That’s just over two months before it was publicly announced to the world on April 30!&lt;/p&gt;
&lt;p&gt;That’s where things stand with PyScript. If you’re ready to take the risk and would like to give this framework a try, then keep reading.&lt;/p&gt;
&lt;h2 id=&quot;getting-started-with-pyscript&quot;&gt;Getting Started With PyScript&lt;a class=&quot;headerlink&quot; href=&quot;#getting-started-with-pyscript&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this section, you’ll have a bird’s-eye view of the framework and its building blocks, including how they work together to bring Python into your browser. You’ll know how to cherry-pick the needed files and host PyScript locally without depending on an Internet connection.&lt;/p&gt;
&lt;h3 id=&quot;wrap-your-head-around-pyscript&quot;&gt;Wrap Your Head Around PyScript&lt;a class=&quot;headerlink&quot; href=&quot;#wrap-your-head-around-pyscript&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You might be asking yourself what exactly PyScript is. The name is probably a clever attempt at marketing it as a &lt;strong&gt;replacement for JavaScript&lt;/strong&gt; in the browser, but such an interpretation wouldn’t give you the complete picture. Here’s how PyScript is currently being advertised on its Twitter profile:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PyScript - programming for the 99% (&lt;a href=&quot;https://twitter.com/pyscript_dev&quot;&gt;Source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One of the goals of PyScript is to make the Web a friendly place for anyone wanting to learn to code, including kids. The framework achieves that goal by not requiring any installation or configuration process beyond your existing text editor and a browser. A side effect is that PyScript simplifies sharing your work with others.&lt;/p&gt;
&lt;p&gt;When you look at PyScript’s &lt;a href=&quot;https://en.wikipedia.org/wiki/README&quot;&gt;README&lt;/a&gt; file, you’ll find the following summary and a longer description:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PyScript is a Pythonic alternative to Scratch, JSFiddle, and other “easy to use” programming frameworks, with the goal of making the web a friendly, hackable place where anyone can author interesting and interactive applications.&lt;/p&gt;
&lt;p&gt;(…)&lt;/p&gt;
&lt;p&gt;PyScript is a meta project that aims to combine multiple open technologies into a framework that allows users to create sophisticated browser applications with Python. It integrates seamlessly with the way the DOM works in the browser and allows users to add Python logic in a way that feels natural both to web and Python developers (&lt;a href=&quot;https://github.com/pyscript/pyscript/blob/main/README.md&quot;&gt;Source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://scratch.mit.edu/&quot;&gt;Scratch&lt;/a&gt; is a relatively straightforward &lt;a href=&quot;https://en.wikipedia.org/wiki/Visual_programming_language&quot;&gt;visual programming language&lt;/a&gt; that children learn at school to build simple games and funny animations. &lt;a href=&quot;https://jsfiddle.net/&quot;&gt;JSFiddle&lt;/a&gt; is JavaScript’s online editor commonly used to demonstrate a given problem’s solution on forums like &lt;a href=&quot;https://stackoverflow.com/&quot;&gt;StackOverflow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Furthermore, PyScript’s home page contains this tagline:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PyScript is a framework that allows users to create rich Python applications in the browser using HTML’s interface and the power of Pyodide, WASM, and modern web technologies. The PyScript framework provides users at every experience level with access to an expressive, easy-to-learn programming language with countless applications. (&lt;a href=&quot;https://pyscript.net/#pyscript&quot;&gt;Source&lt;/a&gt;)
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words, PyScript allows you to use Python, with or without JavaScript, to build interactive websites that don’t necessarily have to communicate with a server. The main benefit here is that you can leverage your existing knowledge of Python to enter the world of front-end development, lowering the entry barrier and making it more accessible. But there are many other benefits of using PyScript that you’ll learn about later.&lt;/p&gt;
&lt;p&gt;On a slightly more technical level, PyScript is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Single-page_application&quot;&gt;single-page application (SPA)&lt;/a&gt; written in &lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt; using the &lt;a href=&quot;https://svelte.dev/&quot;&gt;Svelte framework&lt;/a&gt;, styled with &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;Tailwind CSS&lt;/a&gt;, and bundled with &lt;a href=&quot;https://rollupjs.org/guide/en/&quot;&gt;rollup.js&lt;/a&gt;. According to one of the comments in an &lt;a href=&quot;https://github.com/pyscript/pyscript/blob/e6192885559cfe27c514513dc883cbe361e309a4/pyscriptjs/README.md&quot;&gt;early Git commit&lt;/a&gt;, the project was based on a template mentioned in a &lt;a href=&quot;https://www.liip.ch/en/blog/svelte-typescript-tailwind-setup&quot;&gt;blog post&lt;/a&gt; by Sascha Aeppli, which combines those tools.&lt;/p&gt;
&lt;p&gt;PyScript wouldn’t be possible without building on top of a recent version of &lt;a href=&quot;https://pyodide.org/en/stable/&quot;&gt;Pyodide&lt;/a&gt;—a CPython interpreter compiled with &lt;a href=&quot;https://emscripten.org/&quot;&gt;emscripten&lt;/a&gt; to &lt;a href=&quot;https://webassembly.org/&quot;&gt;WebAssembly&lt;/a&gt;, enabling Python to run in the browser. PyScript provides a thin abstraction layer over Pyodide by encapsulating the required &lt;a href=&quot;https://en.wikipedia.org/wiki/Boilerplate_code&quot;&gt;boilerplate code&lt;/a&gt;, which you’d otherwise have to type yourself using JavaScript.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/pyscript-python-in-browser/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/pyscript-python-in-browser/ »&lt;/a&gt;&lt;/h2&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #112: Managing Large Python Data Science Projects With Dask</title>
      <id>https://realpython.com/podcasts/rpp/112/</id>
      <link href="https://realpython.com/podcasts/rpp/112/"/>
      <updated>2022-06-03T12:00:00+00:00</updated>
      <summary>What do you do when your data science project doesn&#x27;t fit within your computer&#x27;s memory? One solution is to distribute it across multiple worker machines. This week on the show, Guido Imperiale from Coiled talks about Dask and managing large data science projects through distributed computing.</summary>
      <content type="html">
        &lt;p&gt;What do you do when your data science project doesn&#x27;t fit within your computer&#x27;s memory? One solution is to distribute it across multiple worker machines. This week on the show, Guido Imperiale from Coiled talks about Dask and managing large data science projects through distributed computing.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Data Cleaning With pandas and NumPy</title>
      <id>https://realpython.com/courses/data-cleaning-with-pandas-and-numpy/</id>
      <link href="https://realpython.com/courses/data-cleaning-with-pandas-and-numpy/"/>
      <updated>2022-05-31T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how to clean up messy data using pandas and NumPy. You&#x27;ll become equipped to deal with a range of problems, such as missing values, inconsistent formatting, malformed records, and nonsensical outliers.</summary>
      <content type="html">
        &lt;p&gt;Data scientists spend a large amount of their time cleaning datasets so that they&amp;rsquo;re easier to work with. In fact, the &lt;a href=&quot;https://www.forbes.com/sites/gilpress/2016/03/23/data-preparation-most-time-consuming-least-enjoyable-data-science-task-survey-says/&quot;&gt;80/20 rule&lt;/a&gt; says that the initial steps of obtaining and cleaning data account for 80% of the time spent on any given project.&lt;/p&gt;
&lt;p&gt;So, if you&amp;rsquo;re just stepping into this field or &lt;a href=&quot;https://realpython.com/tutorials/data-science/&quot;&gt;planning to step into this field&lt;/a&gt;, it&amp;rsquo;s important to be able to deal with messy data, whether that means missing values, inconsistent formatting, malformed records, or nonsensical outliers.&lt;/p&gt;
&lt;p&gt;In this video course, you&amp;rsquo;ll leverage Python&amp;rsquo;s &lt;a href=&quot;https://realpython.com/pandas-python-explore-dataset/&quot;&gt;pandas&lt;/a&gt; and NumPy libraries to clean data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Along the way, you&amp;rsquo;ll learn about:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dropping &lt;strong&gt;unnecessary columns&lt;/strong&gt; in a &lt;code&gt;DataFrame&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Changing the &lt;strong&gt;index&lt;/strong&gt; of a &lt;code&gt;DataFrame&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;.str()&lt;/code&gt; methods to &lt;strong&gt;clean columns&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Renaming columns&lt;/strong&gt; to a more recognizable set of labels&lt;/li&gt;
&lt;li&gt;Skipping &lt;strong&gt;unnecessary rows&lt;/strong&gt; in a CSV file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get the most out of this tutorial, you should have a basic understanding of the pandas and NumPy libraries, including pandas&amp;rsquo; workhorse &lt;a href=&quot;https://pandas.pydata.org/pandas-docs/stable/dsintro.html&quot;&gt;&lt;code&gt;Series&lt;/code&gt; and &lt;code&gt;DataFrame&lt;/code&gt; objects&lt;/a&gt;, common methods that can be applied to these objects, and NumPy&amp;rsquo;s &lt;a href=&quot;https://docs.scipy.org/doc/numpy-1.13.0/user/misc.html&quot;&gt;&lt;code&gt;NaN&lt;/code&gt;&lt;/a&gt; values.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #111: Questions for New Dependencies &amp; Comparing Python Game Libraries</title>
      <id>https://realpython.com/podcasts/rpp/111/</id>
      <link href="https://realpython.com/podcasts/rpp/111/"/>
      <updated>2022-05-27T12:00:00+00:00</updated>
      <summary>What are the differences between the various Python game frameworks? Would it help to see a couple of game examples across several libraries to understand the distinctions? This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.</summary>
      <content type="html">
        &lt;p&gt;What are the differences between the various Python game frameworks? Would it help to see a couple of game examples across several libraries to understand the distinctions? This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Exploring Scopes and Closures in Python</title>
      <id>https://realpython.com/courses/exploring-scopes-and-closures-in-python/</id>
      <link href="https://realpython.com/courses/exploring-scopes-and-closures-in-python/"/>
      <updated>2022-05-24T14:00:00+00:00</updated>
      <summary>In this Code Conversation video course, you&#x27;ll take a deep dive into how scopes and closures work in Python. To do this, you&#x27;ll use a debugger to walk through some sample code, and then you&#x27;ll take a peek under the hood to see how Python holds variables internally.</summary>
      <content type="html">
        &lt;p&gt;Have you been wondering how scopes and closures work in Python? Maybe you&amp;rsquo;ve just heard about &lt;code&gt;object.__closure__&lt;/code&gt;, and you&amp;rsquo;d like to figure out what exactly it does. In this Code Conversation video course, you&amp;rsquo;ll use the debugger &lt;a href=&quot;https://thonny.org/&quot;&gt;Thonny&lt;/a&gt; to walk through some sample code and get a better understanding of scopes and closures in Python.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this Code Conversation video course, you&amp;rsquo;ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clarify code by refactoring it with &lt;strong&gt;descriptive names&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Learn how functions access &lt;strong&gt;variables&lt;/strong&gt; in &lt;strong&gt;local and nonlocal scopes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Understand how &lt;strong&gt;inner and outer function calls&lt;/strong&gt; open and close &lt;strong&gt;their own scopes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ll also take a deep dive into the inner workings of Python by inspecting dunder objects to find out how Python handles and stores variables. &lt;/p&gt;
&lt;p&gt;To get the most out of this Code Conversation, you should be familiar with &lt;a href=&quot;https://realpython.com/python-scope-legb-rule/#understanding-scope&quot;&gt;scopes&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/python-variables/&quot;&gt;variables&lt;/a&gt; in Python. You should also be comfortable &lt;a href=&quot;https://realpython.com/defining-your-own-python-function/&quot;&gt;defining your own functions&lt;/a&gt; and distinguishing between &lt;a href=&quot;https://realpython.com/inner-functions-what-are-they-good-for/&quot;&gt;inner&lt;/a&gt; and outer functions.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #110: Advantages of Protobuf for Serialization in Python</title>
      <id>https://realpython.com/podcasts/rpp/110/</id>
      <link href="https://realpython.com/podcasts/rpp/110/"/>
      <updated>2022-05-20T12:00:00+00:00</updated>
      <summary>Would you like a way to send structured serialized data between different platforms and languages? What if the data was self-documenting, could automatically generate Python code, and would validate itself? This week on the show, Liran Haimovitch talks about protocol buffers and communicating with microservices through Remote Procedure Calls (RPC).</summary>
      <content type="html">
        &lt;p&gt;Would you like a way to send structured serialized data between different platforms and languages? What if the data was self-documenting, could automatically generate Python code, and would validate itself? This week on the show, Liran Haimovitch talks about protocol buffers and communicating with microservices through Remote Procedure Calls (RPC).&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Using Python Class Constructors</title>
      <id>https://realpython.com/courses/using-python-class-constructors/</id>
      <link href="https://realpython.com/courses/using-python-class-constructors/"/>
      <updated>2022-05-17T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how class constructors work in Python. You&#x27;ll also explore Python&#x27;s instantiation process, which has two main steps: instance creation and instance initialization.</summary>
      <content type="html">
        &lt;p&gt;Class constructors are a fundamental part of &lt;strong&gt;object-oriented programming&lt;/strong&gt; in Python. They allow you to create and properly initialize objects of a given class, making those objects ready to use. Class constructors internally trigger Python&amp;rsquo;s instantiation process, which runs through two main steps: &lt;strong&gt;instance creation&lt;/strong&gt; and &lt;strong&gt;instance initialization&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you want to dive deeper into how Python internally constructs objects and learn how to customize the process, then this video course is for you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand Python&amp;rsquo;s internal &lt;strong&gt;instantiation process&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Customize object initialization using &lt;strong&gt;&lt;code&gt;.__init__()&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Fine-tune object creation by overriding &lt;strong&gt;&lt;code&gt;.__new__()&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this knowledge, you&amp;rsquo;ll be able to tweak the creation and initialization of objects in your custom Python classes, which will give you control over the instantiation process at a more advanced level.&lt;/p&gt;
&lt;p&gt;To better understand the examples and concepts in this tutorial, you should be familiar with &lt;a href=&quot;https://realpython.com/python3-object-oriented-programming/&quot;&gt;object-oriented programming&lt;/a&gt; and &lt;a href=&quot;https://docs.python.org/3/glossary.html#term-special-method&quot;&gt;special methods&lt;/a&gt; in Python.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #109: Start Testing Your Python with doctest &amp; Pagination in Django</title>
      <id>https://realpython.com/podcasts/rpp/109/</id>
      <link href="https://realpython.com/podcasts/rpp/109/"/>
      <updated>2022-05-13T12:00:00+00:00</updated>
      <summary>Did you know you can add testing to your Python code while simultaneously documenting it? Using docstrings, you can create examples of how your functions should interact in a Python REPL and test them with the built-in doctest module. This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.</summary>
      <content type="html">
        &lt;p&gt;Did you know you can add testing to your Python code while simultaneously documenting it? Using docstrings, you can create examples of how your functions should interact in a Python REPL and test them with the built-in doctest module. This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder&#x27;s Weekly articles and projects.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Deploying a Flask Application Using Heroku</title>
      <id>https://realpython.com/courses/deploying-a-flask-application-using-heroku/</id>
      <link href="https://realpython.com/courses/deploying-a-flask-application-using-heroku/"/>
      <updated>2022-05-10T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how to create a Python Flask example web application and deploy it using Heroku. You’ll also use Git to track changes to the code, and you’ll configure a deployment workflow with different environments for staging and production.</summary>
      <content type="html">
        &lt;p&gt;In this video course, you&amp;rsquo;ll create a Python &lt;a href=&quot;https://flask.palletsprojects.com/&quot;&gt;Flask&lt;/a&gt; example application and deploy it using &lt;a href=&quot;https://heroku.com&quot;&gt;Heroku&lt;/a&gt;, making it publicly available on the web. Heroku removes much of the infrastructure burden related to building and running &lt;a href=&quot;https://realpython.com/python-web-applications/&quot;&gt;web applications&lt;/a&gt;, allowing you to focus on creating an awesome app.&lt;/p&gt;
&lt;p&gt;Besides deploying the app, you&amp;rsquo;ll use Git to track changes to the code, and you&amp;rsquo;ll also configure a deployment workflow with different environments for staging and production. Using this setup, you&amp;rsquo;ll be able to test and preview the app before releasing it. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a Python &lt;strong&gt;Flask example web application&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy&lt;/strong&gt; the web application using Heroku&lt;/li&gt;
&lt;li&gt;Implement a deployment &lt;strong&gt;workflow&lt;/strong&gt; using Heroku &lt;strong&gt;pipelines&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Manage &lt;strong&gt;configuration&lt;/strong&gt; and &lt;strong&gt;secrets&lt;/strong&gt; for different environments in a secure way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This course assumes that you understand the basics of how web applications work and that you have some experience using Git. To get up to speed on these topics, check out &lt;a href=&quot;https://realpython.com/python-web-applications-with-flask-part-i/&quot;&gt;Python Web Applications with Flask (Tutorial Series)&lt;/a&gt; and  &lt;a href=&quot;https://realpython.com/python-git-github-intro/&quot;&gt;Introduction to Git and GitHub for Python Developers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As you&amp;rsquo;ll learn through this video course, by combining Flask and Heroku, you can minimize the effort required to create and run web applications.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #108: Run Python in a Browser With Pyodide &amp; The Power of f-Strings</title>
      <id>https://realpython.com/podcasts/rpp/108/</id>
      <link href="https://realpython.com/podcasts/rpp/108/"/>
      <updated>2022-05-06T12:00:00+00:00</updated>
      <summary>Have you heard about the projects working toward getting Python to run in the browser? Maybe you would like to try it out for yourself, by building an interactive Python REPL with Pyodide and WebAssembly (WASM). This week on the show, Christopher Trudeau is here, and he&#x27;s brought another batch of PyCoder&#x27;s Weekly articles and projects.</summary>
      <content type="html">
        &lt;p&gt;Have you heard about the projects working toward getting Python to run in the browser? Maybe you would like to try it out for yourself, by building an interactive Python REPL with Pyodide and WebAssembly (WASM). This week on the show, Christopher Trudeau is here, and he&#x27;s brought another batch of PyCoder&#x27;s Weekly articles and projects.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Testing Your Code With pytest</title>
      <id>https://realpython.com/courses/testing-your-code-with-pytest/</id>
      <link href="https://realpython.com/courses/testing-your-code-with-pytest/"/>
      <updated>2022-05-03T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how to take your testing to the next level with pytest. You&#x27;ll cover intermediate and advanced pytest features such as fixtures, marks, parameters, and plugins. With pytest, you can make your test suites fast, effective, and less painful to maintain.</summary>
      <content type="html">
        &lt;p&gt;&lt;a href=&quot;https://realpython.com/python-testing/&quot;&gt;Testing your code&lt;/a&gt; brings a wide variety of benefits. It increases your confidence that the code behaves as you expect and ensures that changes to your code won&amp;rsquo;t cause regressions. Writing and maintaining tests is hard work, so you should leverage all the tools at your disposal to make it as painless as possible. &lt;a href=&quot;https://docs.pytest.org/&quot;&gt;pytest&lt;/a&gt; is one of the best tools you can use to boost your testing productivity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What &lt;strong&gt;benefits&lt;/strong&gt; pytest offers&lt;/li&gt;
&lt;li&gt;How to ensure your tests are &lt;strong&gt;stateless&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to make repetitious tests more &lt;strong&gt;comprehensible&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to run &lt;strong&gt;subsets&lt;/strong&gt; of tests by name or custom groups&lt;/li&gt;
&lt;li&gt;How to create and maintain &lt;strong&gt;reusable&lt;/strong&gt; testing utilities&lt;/li&gt;
&lt;/ul&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>The Real Python Podcast – Episode #107: Type-Safe ORM With Prisma Client &amp; Real Python at PyCon US 2022</title>
      <id>https://realpython.com/podcasts/rpp/107/</id>
      <link href="https://realpython.com/podcasts/rpp/107/"/>
      <updated>2022-04-22T12:00:00+00:00</updated>
      <summary>Are you using an Object-Relational Mapper (ORM) for your Python projects? What if it could work with SQL or No-SQL databases and be fully type-safe? This week on the show, Robert Craigie talks about Prisma Client Python.</summary>
      <content type="html">
        &lt;p&gt;Are you using an Object-Relational Mapper (ORM) for your Python projects? What if it could work with SQL or No-SQL databases and be fully type-safe? This week on the show, Robert Craigie talks about Prisma Client Python.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  

</feed>
