<?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-29T12:00:00+00:00</updated>
  <id>https://realpython.com/</id>
  <author>
    <name>Real Python</name>
  </author>

  
    <entry>
      <title>The Real Python Podcast – Episode #119: Natural Language Processing and How ML Models Understand Text</title>
      <id>https://realpython.com/podcasts/rpp/119/</id>
      <link href="https://realpython.com/podcasts/rpp/119/"/>
      <updated>2022-07-29T12:00:00+00:00</updated>
      <summary>How do you process and classify text documents in Python? What are the fundamental techniques and building blocks for Natural Language Processing (NLP)? This week on the show, Jodie Burchell, developer advocate for data science at JetBrains, talks about how machine learning (ML) models understand text.</summary>
      <content type="html">
        &lt;p&gt;How do you process and classify text documents in Python? What are the fundamental techniques and building blocks for Natural Language Processing (NLP)? This week on the show, Jodie Burchell, developer advocate for data science at JetBrains, talks about how machine learning (ML) models understand text.&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>Primer on Jinja Templating</title>
      <id>https://realpython.com/primer-on-jinja-templating/</id>
      <link href="https://realpython.com/primer-on-jinja-templating/"/>
      <updated>2022-07-27T14:00:00+00:00</updated>
      <summary>With Jinja, you can build rich templates that power the front end of your web applications. But you can use Jinja without a web framework running in the background. Anytime you want to create text files with programmatic content, Jinja can help you out.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Templates are an essential ingredient in full-stack web development.
With &lt;strong&gt;Jinja&lt;/strong&gt;, you can build rich templates that power the front end of your Python web applications.&lt;/p&gt;
&lt;p&gt;But you don’t need to use a web framework to experience the capabilities of Jinja.
When you want to create text files with programmatic content, Jinja can help you out.&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;Install the Jinja &lt;strong&gt;template engine&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Create your first Jinja &lt;strong&gt;template&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Render a Jinja template in &lt;strong&gt;Flask&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;for&lt;/code&gt; loops&lt;/strong&gt; and &lt;strong&gt;conditional statements&lt;/strong&gt; with Jinja&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nest&lt;/strong&gt; Jinja templates&lt;/li&gt;
&lt;li&gt;Modify variables in Jinja with &lt;strong&gt;filters&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;macros&lt;/strong&gt; to add functionality to your front end&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You’ll start by using Jinja on its own to cover the basics of Jinja templating.
Later you’ll build a basic Flask web project with two pages and a navigation bar to leverage the full potential of Jinja.&lt;/p&gt;
&lt;p&gt;Throughout the tutorial, you’ll build an example app that showcases some of Jinja’s wide range of features. To see what it’ll do, skip ahead to &lt;a href=&quot;#mark-the-current-page&quot;&gt;the final section&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also find the full source code of the web project 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;Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/jinja-primer-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-jinja-primer-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to download the source code&lt;/a&gt; that you’ll use to explore Jinja’s capabilities.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This tutorial is for you if you want to learn more about the Jinja template language or if you’re getting started with Flask.&lt;/p&gt;
&lt;h2 id=&quot;get-started-with-jinja&quot;&gt;Get Started With Jinja&lt;a class=&quot;headerlink&quot; href=&quot;#get-started-with-jinja&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://jinja.palletsprojects.com/en/3.1.x/&quot;&gt;Jinja&lt;/a&gt; is not only a &lt;a href=&quot;https://en.wikipedia.org/wiki/Jinja,_Uganda&quot;&gt;city in the Eastern Region of Uganda&lt;/a&gt; and a &lt;a href=&quot;https://en.wikipedia.org/wiki/Shinto_shrine&quot;&gt;Japanese temple&lt;/a&gt;, but also a &lt;strong&gt;template engine&lt;/strong&gt;.
You commonly use &lt;a href=&quot;https://en.wikipedia.org/wiki/Template_processor&quot;&gt;template engines&lt;/a&gt; for &lt;strong&gt;web templates&lt;/strong&gt; that receive dynamic content from the &lt;strong&gt;back end&lt;/strong&gt; and render it as a &lt;strong&gt;static page&lt;/strong&gt; in the front end.&lt;/p&gt;
&lt;p&gt;But you can use Jinja without a web framework running in the background.
That’s exactly what you’ll do in this section.
Specifically, you’ll install Jinja and build your first templates.&lt;/p&gt;
&lt;h3 id=&quot;install-jinja&quot;&gt;Install Jinja&lt;a class=&quot;headerlink&quot; href=&quot;#install-jinja&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Before exploring any new package, it’s a good idea to create and activate a &lt;a href=&quot;https://realpython.com/python-virtual-environments-a-primer/&quot;&gt;virtual environment&lt;/a&gt;.
That way, you’re installing any project dependencies in your project’s virtual environment instead of system-wide.&lt;/p&gt;
&lt;p&gt;Select your &lt;strong&gt;operating system&lt;/strong&gt; below and use your platform-specific command to set up a virtual environment:&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;/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;python3 -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;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With the above commands, you create and activate a virtual environment named &lt;code&gt;venv&lt;/code&gt; by using Python’s built-in &lt;code&gt;venv&lt;/code&gt; module.
The parentheses (&lt;code&gt;()&lt;/code&gt;) surrounding &lt;code&gt;venv&lt;/code&gt; in front of the prompt indicate that you’ve successfully activated the virtual environment.&lt;/p&gt;
&lt;p&gt;After you’ve created and activated your virtual environment, it’s time to install Jinja with &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;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 pip install Jinja2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Don’t forget the &lt;code&gt;2&lt;/code&gt; at the end of the package name.
Otherwise, you’ll install an &lt;a href=&quot;https://pypi.org/project/Jinja/&quot;&gt;old version&lt;/a&gt; that isn’t compatible with Python 3.&lt;/p&gt;
&lt;p&gt;It’s worth noting that although the current major version is actually greater than &lt;code&gt;2&lt;/code&gt;, the package that you’ll install is nevertheless called &lt;code&gt;Jinja2&lt;/code&gt;.
You can verify that you’ve installed a modern version of Jinja by running &lt;code&gt;pip list&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 pip list
&lt;span class=&quot;go&quot;&gt;Package    Version&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;---------- -------&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Jinja2     3.x&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To make things even more confusing, after installing Jinja with an uppercase &lt;code&gt;J&lt;/code&gt;, you have to import it with a lowercase &lt;code&gt;j&lt;/code&gt; in Python.
Try it out by opening the &lt;a href=&quot;https://realpython.com/interacting-with-python/&quot;&gt;interactive Python interpreter&lt;/a&gt; and running the following commands:&lt;/p&gt;
&lt;div class=&quot;highlight python repl&quot;&gt;&lt;span class=&quot;repl-toggle&quot; title=&quot;Toggle REPL prompts and output&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Jinja2&lt;/span&gt;
&lt;span class=&quot;gt&quot;&gt;Traceback (most recent call last):&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;gr&quot;&gt;ModuleNotFoundError&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;No module named &#x27;Jinja2&#x27;&lt;/span&gt;

&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;jinja2&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# No error&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/primer-on-jinja-templating/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/primer-on-jinja-templating/ »&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>Managing Attributes With Python&#x27;s property()</title>
      <id>https://realpython.com/courses/property-python/</id>
      <link href="https://realpython.com/courses/property-python/"/>
      <updated>2022-07-26T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how to create managed attributes, also known as properties, using Python&#x27;s property() in your custom classes.</summary>
      <content type="html">
        &lt;p&gt;With Python&amp;rsquo;s &lt;a href=&quot;https://docs.python.org/3/library/functions.html#property&quot;&gt;&lt;code&gt;property()&lt;/code&gt;&lt;/a&gt;, you can create &lt;strong&gt;managed attributes&lt;/strong&gt; in your classes. You can use managed attributes, also known as &lt;strong&gt;properties&lt;/strong&gt;, when you need to modify their internal implementation without changing the public &lt;a href=&quot;https://en.wikipedia.org/wiki/API&quot;&gt;API&lt;/a&gt; of the class. Providing stable APIs can help you avoid breaking your users&amp;rsquo; code when they rely on your classes and objects.&lt;/p&gt;
&lt;p&gt;Properties are arguably the most popular way to create managed attributes quickly and in the purest &lt;a href=&quot;https://realpython.com/learning-paths/writing-pythonic-code/&quot;&gt;Pythonic&lt;/a&gt; style.&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 &lt;strong&gt;managed attributes&lt;/strong&gt; or &lt;strong&gt;properties&lt;/strong&gt; in your classes&lt;/li&gt;
&lt;li&gt;Perform &lt;strong&gt;lazy attribute evaluation&lt;/strong&gt; and provide &lt;strong&gt;computed attributes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Avoid &lt;strong&gt;setter&lt;/strong&gt; and &lt;strong&gt;getter&lt;/strong&gt; methods to make your classes more Pythonic&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;read-only&lt;/strong&gt;, &lt;strong&gt;read-write&lt;/strong&gt;, and &lt;strong&gt;write-only&lt;/strong&gt; properties&lt;/li&gt;
&lt;li&gt;Create consistent and &lt;strong&gt;backwards-compatible APIs&lt;/strong&gt; for your classes&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>Your Python Coding Environment on Windows: Setup Guide</title>
      <id>https://realpython.com/python-coding-setup-windows/</id>
      <link href="https://realpython.com/python-coding-setup-windows/"/>
      <updated>2022-07-25T14:00:00+00:00</updated>
      <summary>With this opinionated guide to setting up a basic, fully featured and flexible setup for Python coding and open source contributing when working from Windows, you&#x27;ll go from a fresh install to ready to contribute, and even check out a PowerShell script to automate much of the process.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Are you interested in writing &lt;strong&gt;Python code&lt;/strong&gt; on a &lt;strong&gt;Windows machine&lt;/strong&gt;? Maybe you’re a lifelong Windows user getting into coding with Python, or perhaps you’re just beginning to branch out from macOS or Linux. In this tutorial, you’ll walk through an easy-to-follow and flexible Python coding setup on Windows 10. &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; Most of the steps here will work equally well on Windows 11.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;To set up your Windows machine for Python coding, you’ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clean and update&lt;/strong&gt; a new Windows install&lt;/li&gt;
&lt;li&gt;Use a &lt;strong&gt;package manager&lt;/strong&gt; to bulk install key software&lt;/li&gt;
&lt;li&gt;Use the built-in &lt;code&gt;ssh-keygen&lt;/code&gt; to generate &lt;strong&gt;SSH keys&lt;/strong&gt; and connect to your GitHub account&lt;/li&gt;
&lt;li&gt;Set up a &lt;strong&gt;development environment&lt;/strong&gt;, including &lt;strong&gt;PowerShell Core&lt;/strong&gt;, &lt;strong&gt;pyenv for Windows&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt;, and &lt;strong&gt;VS Code&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Examine scripts and tools to &lt;strong&gt;automate the setup and installation&lt;/strong&gt; process&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way, you’ll learn about various recommended tools for a complete, free, and mostly open-source Windows Python coding setup. You won’t get to know all the possible tools, but you’ll walk away with one setup that should be flexible enough for most situations.&lt;/p&gt;
&lt;p&gt;If you’re a beginner to intermediate Pythonista, or you’re just looking to get set up on a Windows machine without having to think about all the different options out there, then this tutorial is for you.&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;&lt;p&gt;&lt;strong&gt;Free Bonus:&lt;/strong&gt; &lt;a href=&quot;&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-python-cheat-sheet-experiment&quot; data-focus=&quot;false&quot;&gt;Click here to get our free Python Cheat Sheet&lt;/a&gt; that shows you the basics of Python 3, like working with data types, dictionaries, lists, and Python functions.&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Maybe you’re in a rush to get set up. If that’s the case, then you’ll find what you need in the section on &lt;a href=&quot;#fast-tracking-your-windows-python-coding-setup&quot;&gt;fast-tracking your setup&lt;/a&gt;, where you’ll examine a PowerShell script to automate the process almost entirely. Jump over there if you need to get up and running quickly. That said, going over the &lt;a href=&quot;#setting-up-your-basic-python-coding-environment-in-windows&quot;&gt;first section&lt;/a&gt; will give you a good checklist to start with to make sure you won’t run into any errors.&lt;/p&gt;
&lt;h2 id=&quot;setting-up-your-basic-python-coding-environment-in-windows&quot;&gt;Setting Up Your Basic Python Coding Environment in Windows&lt;a class=&quot;headerlink&quot; href=&quot;#setting-up-your-basic-python-coding-environment-in-windows&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Say you’re sitting in front of a completely fresh Windows installation. In this section, you’ll go through the first steps that you should perform in that case. You’ll get an initial command line environment set up, install software via package managers, and configure essential Windows settings for a Python coding setup.&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; If you’re going to be following along, you’ll be restarting your computer various times during this whole process. It’s worthwhile to have another device close by, not only for keeping this tutorial open, but for general queries, troubleshooting, and the ability to carry on reading other Real Python tutorials while waiting for updates or installations.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In addition to installing what you need, you’ll also learn how to get around some of Microsoft’s built-in programs that might get in the way. Your first step is to ensure that your Windows installation is up-to-date.&lt;/p&gt;
&lt;h3 id=&quot;updating-your-windows-installation&quot;&gt;Updating Your Windows Installation&lt;a class=&quot;headerlink&quot; href=&quot;#updating-your-windows-installation&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First, if your machine is new or you’ve disabled updates, then you’ll want to &lt;strong&gt;make sure your Windows installation is up-to-date&lt;/strong&gt;. Updating is especially relevant if you want to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux&quot;&gt;Windows Subsystem for Linux (WSL)&lt;/a&gt; and have Windows 10. It’s also a safeguard against the dreaded Windows &lt;a href=&quot;https://lolnein.com/2018/01/26/updateandrestart/&quot;&gt;auto-reboot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Installing Windows updates can take an hour or two, but it’s relatively mindless. So if you’re starting here, line up some other tasks while waiting for the updates to complete.&lt;/p&gt;
&lt;p&gt;To start the update process, go to the &lt;strong&gt;Start menu&lt;/strong&gt; and search for &lt;em&gt;Windows Update&lt;/em&gt;. Once there, prompt Windows to search for, download, and install any updates it can find:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/win-10-setup-10-check-for-updates-button_-_Copy.33c5d4db0630.png&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/win-10-setup-10-check-for-updates-button_-_Copy.33c5d4db0630.png&quot; width=&quot;811&quot; height=&quot;643&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/win-10-setup-10-check-for-updates-button_-_Copy.33c5d4db0630.png&amp;amp;w=202&amp;amp;sig=3b4985f5569601f45bb256691094f489bd40c721 202w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/win-10-setup-10-check-for-updates-button_-_Copy.33c5d4db0630.png&amp;amp;w=405&amp;amp;sig=62c8562b41072d210c2e755f09fb76aab561eec5 405w, https://files.realpython.com/media/win-10-setup-10-check-for-updates-button_-_Copy.33c5d4db0630.png 811w&quot; sizes=&quot;75vw&quot; alt=&quot;Windows updates control paned&quot; data-asset=&quot;4451&quot;&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p&gt;Once all the updates have been installed, you’ll probably be prompted to reboot the computer. Do this as many times as it asks you to.&lt;/p&gt;
&lt;p&gt;You’ll probably have to &lt;strong&gt;repeat the update process&lt;/strong&gt; two or three times. Once the first batch of updates have been installed and you’ve rebooted, if you go back to the update screen, then it’ll probably say that the system is up-to-date. However, if you wait a while and then check for updates again, it’ll likely find some more to install.&lt;/p&gt;
&lt;p&gt;Once you have all the updates installed, then you’re ready to do the initial setup for the command line environment in your Windows Python coding setup.&lt;/p&gt;
&lt;h3 id=&quot;discovering-the-windows-terminal&quot;&gt;Discovering the Windows Terminal&lt;a class=&quot;headerlink&quot; href=&quot;#discovering-the-windows-terminal&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you’ve always used Windows, then you may be used to using the &lt;strong&gt;Command Prompt&lt;/strong&gt; and &lt;strong&gt;PowerShell&lt;/strong&gt; through their own apps. Opening them this way may make you think that they’re self-contained programs. However, when you run these programs from the Start menu, two processes are running. One process is what performs the commands, and the other is a process to send your input and &lt;em&gt;display&lt;/em&gt; the output.&lt;/p&gt;
&lt;p&gt;The window that you see when you open the Command Prompt is the displaying process. The core of the Command Prompt is in the background awaiting your input that’s sent by the window. In this way, the window acts as a sort of host to the terminal.&lt;/p&gt;
&lt;p&gt;For more information about the differences between command interpreters and interfaces, take a look at the &lt;a href=&quot;https://realpython.com/python-subprocess/#introduction-to-the-shell-and-text-based-programs-with-subprocess&quot;&gt;introduction to the shell&lt;/a&gt; section in the article about the &lt;code&gt;subprocess&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;Windows has created a new, open-source &lt;a href=&quot;https://github.com/microsoft/terminal&quot;&gt;&lt;strong&gt;Windows Terminal&lt;/strong&gt;&lt;/a&gt; to be a universal console host. It acts as an interface to multiple shells, allowing you to start the Command Prompt, PowerShell, and any other shell that you might have available as different tabs in the same host:&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-coding-setup-windows/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-coding-setup-windows/ »&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 #118: Creating Documentation With MkDocs &amp; When to Use a Python dict</title>
      <id>https://realpython.com/podcasts/rpp/118/</id>
      <link href="https://realpython.com/podcasts/rpp/118/"/>
      <updated>2022-07-22T12:00:00+00:00</updated>
      <summary>How do you start building your project documentation? What if you had a tool that could do the heavy lifting and automatically write large portions directly from your code? 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;How do you start building your project documentation? What if you had a tool that could do the heavy lifting and automatically write large portions directly from your code? 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>Custom Python Dictionaries: Inheriting From dict vs UserDict</title>
      <id>https://realpython.com/inherit-python-dict/</id>
      <link href="https://realpython.com/inherit-python-dict/"/>
      <updated>2022-07-20T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn how to create custom dictionary-like classes in Python by inheriting from the built-in dict class or by subclassing UserDict from the collections module.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Creating dictionary-like classes may be a requirement in your Python career. Specifically, you may be interested in making custom dictionaries with modified behavior, new functionalities, or both. In Python, you can do this by inheriting from an &lt;a href=&quot;https://docs.python.org/3/library/collections.abc.html#module-collections.abc&quot;&gt;abstract base class&lt;/a&gt;, by subclassing the built-in &lt;code&gt;dict&lt;/code&gt; class directly, or by inheriting from &lt;a href=&quot;https://docs.python.org/3/library/collections.html#collections.UserDict&quot;&gt;&lt;code&gt;UserDict&lt;/code&gt;&lt;/a&gt;.&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;Create dictionary-like classes by inheriting from the &lt;strong&gt;built-in &lt;code&gt;dict&lt;/code&gt; class&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Identify &lt;strong&gt;common pitfalls&lt;/strong&gt; that can happen when inheriting from &lt;code&gt;dict&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build dictionary-like classes by &lt;strong&gt;subclassing &lt;code&gt;UserDict&lt;/code&gt;&lt;/strong&gt; from the &lt;code&gt;collections&lt;/code&gt; module&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, you’ll code a few examples that’ll help you understand the pros and cons of using &lt;code&gt;dict&lt;/code&gt; vs &lt;code&gt;UserDict&lt;/code&gt; to create your custom dictionary classes.&lt;/p&gt;
&lt;p&gt;To get the most out of this tutorial, you should be familiar with Python’s built-in &lt;a href=&quot;https://realpython.com/python-dicts/&quot;&gt;&lt;code&gt;dict&lt;/code&gt;&lt;/a&gt; class and its standard functionality and features. You’ll also need to know the basics of &lt;a href=&quot;https://realpython.com/python3-object-oriented-programming/&quot;&gt;object-oriented programming&lt;/a&gt; and understand how &lt;a href=&quot;https://realpython.com/inheritance-composition-python/&quot;&gt;inheritance&lt;/a&gt; works in Python.&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;creating-dictionary-like-classes-in-python&quot;&gt;Creating Dictionary-Like Classes in Python&lt;a class=&quot;headerlink&quot; href=&quot;#creating-dictionary-like-classes-in-python&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The built-in &lt;a href=&quot;https://realpython.com/python-dicts/&quot;&gt;&lt;code&gt;dict&lt;/code&gt;&lt;/a&gt; class provides a valuable and versatile collection data type, the Python &lt;strong&gt;dictionary&lt;/strong&gt;. Dictionaries are everywhere, including in your code and the code of Python itself.&lt;/p&gt;
&lt;p&gt;Sometimes, the standard functionality of Python dictionaries isn’t enough for certain use cases. In these situations, you’ll probably have to create a custom dictionary-like class. In other words, you need a class that behaves like a regular dictionary but with modified or new functionality.&lt;/p&gt;
&lt;p&gt;You’ll typically find at least two reasons for creating custom dictionary-like classes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Extending&lt;/strong&gt; the regular dictionary by adding new functionality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modifying&lt;/strong&gt; the standard dictionary’s functionality&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note that you could also face situations in which you need to both extend &lt;em&gt;and&lt;/em&gt; modify the dictionary’s standard functionality.&lt;/p&gt;
&lt;p&gt;Depending on your specific needs and skill level, you can choose from a few strategies for creating custom dictionaries. You can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inherit from an appropriate abstract base class, such as &lt;a href=&quot;https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableMapping&quot;&gt;&lt;code&gt;MutableMapping&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Inherit from the Python built-in &lt;a href=&quot;https://docs.python.org/3/library/stdtypes.html#dict&quot;&gt;&lt;code&gt;dict&lt;/code&gt;&lt;/a&gt; class directly&lt;/li&gt;
&lt;li&gt;Subclass &lt;a href=&quot;https://docs.python.org/3/library/collections.html#collections.UserDict&quot;&gt;&lt;code&gt;UserDict&lt;/code&gt;&lt;/a&gt; from &lt;a href=&quot;https://realpython.com/python-collections-module/&quot;&gt;&lt;code&gt;collections&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a few key considerations when you’re selecting the appropriate strategy to implement. Keep reading for more details.&lt;/p&gt;
&lt;h2 id=&quot;building-a-dictionary-like-class-from-an-abstract-base-class&quot;&gt;Building a Dictionary-Like Class From an Abstract Base Class&lt;a class=&quot;headerlink&quot; href=&quot;#building-a-dictionary-like-class-from-an-abstract-base-class&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This strategy for creating dictionary-like classes requires that you inherit from an &lt;strong&gt;abstract base class (ABC)&lt;/strong&gt;, like &lt;a href=&quot;https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableMapping&quot;&gt;&lt;code&gt;MutableMapping&lt;/code&gt;&lt;/a&gt;. This class provides concrete generic implementations of all the dictionary methods except for &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#object.__getitem__&quot;&gt;&lt;code&gt;.__getitem__()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#object.__setitem__&quot;&gt;&lt;code&gt;.__setitem__()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#object.__delitem__&quot;&gt;&lt;code&gt;.__delitem__()&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#object.__iter__&quot;&gt;&lt;code&gt;.__iter__()&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#object.__len__&quot;&gt;&lt;code&gt;.__len__()&lt;/code&gt;&lt;/a&gt;, which you’ll have to implement by yourself.&lt;/p&gt;
&lt;p&gt;Additionally, suppose you need to customize the functionality of any other standard dictionary method. In that case, you’ll have to override the method at hand and provide a suitable implementation that fulfills your needs.&lt;/p&gt;
&lt;p&gt;This process implies a fair amount of work. It’s also error-prone and requires advanced knowledge of Python and its &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html&quot;&gt;data model&lt;/a&gt;. It can also imply performance issues because you’ll be writing the class in pure Python.&lt;/p&gt;
&lt;p&gt;The main advantage of this strategy is that the parent ABC will alert you if you miss any method in your custom implementation.&lt;/p&gt;
&lt;p&gt;For these reasons, you should embrace this strategy only if you need a dictionary-like class that’s fundamentally different from the built-in dictionary.&lt;/p&gt;
&lt;p&gt;In this tutorial, you’ll focus on creating dictionary-like classes by inheriting from the built-in &lt;code&gt;dict&lt;/code&gt; class and the &lt;code&gt;UserDict&lt;/code&gt; class, which seem to be the quickest and most practical strategies.&lt;/p&gt;
&lt;h2 id=&quot;inheriting-from-the-python-built-in-dict-class&quot;&gt;Inheriting From the Python Built-in &lt;code&gt;dict&lt;/code&gt; Class&lt;a class=&quot;headerlink&quot; href=&quot;#inheriting-from-the-python-built-in-dict-class&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a long time, it was impossible to subclass Python types implemented in &lt;a href=&quot;https://realpython.com/c-for-python-programmers/&quot;&gt;C&lt;/a&gt;. Python 2.2 fixed this issue. Now you can &lt;a href=&quot;https://docs.python.org/3/whatsnew/2.2.html#peps-252-and-253-type-and-class-changes&quot;&gt;directly subclass built-in types&lt;/a&gt;, including &lt;code&gt;dict&lt;/code&gt;. This change brings several technical advantages to the subclasses because now they:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Will work in every place that requires the original built-in type&lt;/li&gt;
&lt;li&gt;Can define new &lt;a href=&quot;https://realpython.com/instance-class-and-static-methods-demystified/#instance-methods&quot;&gt;instance&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/instance-class-and-static-methods-demystified/#static-methods&quot;&gt;static&lt;/a&gt;, and &lt;a href=&quot;https://realpython.com/instance-class-and-static-methods-demystified/#class-methods&quot;&gt;class&lt;/a&gt; methods&lt;/li&gt;
&lt;li&gt;Can store their &lt;a href=&quot;https://realpython.com/python3-object-oriented-programming/#class-and-instance-attributes&quot;&gt;instance attributes&lt;/a&gt; in a &lt;a href=&quot;https://docs.python.org/3/reference/datamodel.html#object.__slots__&quot;&gt;&lt;code&gt;.__slots__&lt;/code&gt;&lt;/a&gt; class attribute, which essentially replaces the &lt;a href=&quot;https://docs.python.org/3/library/stdtypes.html#object.__dict__&quot;&gt;&lt;code&gt;.__dict__&lt;/code&gt;&lt;/a&gt; attribute&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/inherit-python-dict/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/inherit-python-dict/ »&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 not Operator</title>
      <id>https://realpython.com/courses/using-not-operator/</id>
      <link href="https://realpython.com/courses/using-not-operator/"/>
      <updated>2022-07-19T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll learn how Python&#x27;s &quot;not&quot; operator works and how to use it in your code. You&#x27;ll get to know its features and see what kind of programming problems you can solve by using &quot;not&quot; in Python.</summary>
      <content type="html">
        &lt;p&gt;Python&amp;rsquo;s &lt;strong&gt;&lt;code&gt;not&lt;/code&gt;&lt;/strong&gt; operator allows you to invert the &lt;strong&gt;truth value&lt;/strong&gt; of Boolean expressions and objects. You can use this operator in Boolean contexts, such as &lt;code&gt;if&lt;/code&gt; statements and &lt;code&gt;while&lt;/code&gt; loops. It also works in non-Boolean contexts, which allows you to invert the truth value of your variables.&lt;/p&gt;
&lt;p&gt;Using the &lt;code&gt;not&lt;/code&gt; operator effectively will help you write accurate negative Boolean expressions to control the flow of execution in your programs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How Python&amp;rsquo;s &lt;strong&gt;&lt;code&gt;not&lt;/code&gt;&lt;/strong&gt; operator works&lt;/li&gt;
&lt;li&gt;How to use the &lt;code&gt;not&lt;/code&gt; operator in &lt;strong&gt;Boolean&lt;/strong&gt; and &lt;strong&gt;non-Boolean contexts&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to use the &lt;strong&gt;&lt;code&gt;operator.not_()&lt;/code&gt;&lt;/strong&gt; function to perform logical negation&lt;/li&gt;
&lt;li&gt;How and when to avoid unnecessary &lt;strong&gt;negative logic&lt;/strong&gt; in your code&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 Flashcards App With Django</title>
      <id>https://realpython.com/django-flashcards-app/</id>
      <link href="https://realpython.com/django-flashcards-app/"/>
      <updated>2022-07-18T14:00:00+00:00</updated>
      <summary>Create your own flashcards app to help you to learn a new language.
In this step-by-step project, you&#x27;ll replicate a spaced repetition system with the Django web framework.
If you want to learn a new topic while sharpening your Django and Python skills, this tutorial is the perfect match for you!</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Flashcards are a great tool when you want to memorize a new topic or learn a new language.
You write a question on the front of the card and the answer on the back of the card.
Then you can test your memory by going through the flashcards.
The more often you show a card to yourself, the better your chances of memorizing its content.
With Django, you can build your own flashcards app.&lt;/p&gt;
&lt;p&gt;By following this tutorial, you’ll build a Django flashcards app that replicates a &lt;a href=&quot;https://en.wikipedia.org/wiki/Spaced_repetition&quot;&gt;spaced repetition system&lt;/a&gt;, which can boost your learning potential.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this step-by-step project, you’ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set up a &lt;strong&gt;Django project&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Work with a &lt;strong&gt;SQLite database&lt;/strong&gt; and the &lt;strong&gt;Django shell&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;models&lt;/strong&gt; and &lt;strong&gt;class-based views&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Structure and &lt;strong&gt;nest templates&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;custom template tags&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way, you’ll get step-by-step guidance to create your final flashcards app.
That means you’ll get all the code you need in separate, bite-size pieces.
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;Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/django-flashcards-app-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-django-flashcards-app-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to download the source code&lt;/a&gt; that you’ll use to build your Django flashcards app.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;If you want to learn about a new topic while sharpening your Django and Python skills, then this project is the perfect match for you!&lt;/p&gt;
&lt;h2 id=&quot;demo-your-django-flashcards-app&quot;&gt;Demo: Your Django Flashcards App&lt;a class=&quot;headerlink&quot; href=&quot;#demo-your-django-flashcards-app&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this tutorial, you’ll build a flashcards app.
On the front page of your web app, you’ll see all your existing cards and be able to create new ones.
On each flashcard, you can add a question and an answer, which you can later edit.
When you want to test your knowledge, you can navigate to a box to review the cards that the box contains:&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/728439716?background=1&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
  &lt;/div&gt;

&lt;/figure&gt;

&lt;p&gt;Once you’ve learned the answer to the card’s question, the card moves to the next box.
If a flashcard moves to the next box, that doesn’t mean you’re done with it.
You’ll still review it periodically to refresh your memory, and it’ll continue progressing through the boxes.
Basically, the higher the box number, the more likely that you’ve mastered those concepts.
If you don’t know the answer to a card’s question, then the card moves back to the first box.&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 work in this tutorial is divided into multiple steps.
That way, you can take breaks and continue at your own pace.
You’ll build a full-stack web app with a database connection that replicates the &lt;strong&gt;Leitner system&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In [the Leitner system], flashcards are sorted into groups according to how well the learner knows each one in Leitner’s learning box. The learners try to recall the solution written on a flashcard. If they succeed, they send the card to the next group. If they fail, they send it back to the first group. (&lt;a href=&quot;https://en.wikipedia.org/wiki/Leitner_system&quot;&gt;Source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;By using &lt;strong&gt;spaced repetition&lt;/strong&gt;, you’ll test your knowledge of the new or challenging topics in the first box more frequently, while you’ll check the cards from the other boxes in larger time intervals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have five boxes that can contain flashcards.&lt;/li&gt;
&lt;li&gt;When you create a flashcard, you put it into the first box.&lt;/li&gt;
&lt;li&gt;To test your knowledge, you choose a box, pick a random flashcard, and check if you know the answer to the card’s question.&lt;/li&gt;
&lt;li&gt;If you know the answer, then you move the card to the next higher box.&lt;/li&gt;
&lt;li&gt;If you don’t know the answer, then you move the card back to the first box.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The higher the box number, the less frequently you check the flashcards in that box to test your knowledge.&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; Flashcards are an excellent tool for learning a new language.
In the examples throughout this tutorial, you’ll find translations of English and Spanish words.
But the examples are kept minimal on purpose.
That way, you can conveniently customize the questions and answers on your cards.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This project is a great starting point, and then you can enhance your Django project with more features. At the end of this tutorial, you’ll find ideas about what to build next.&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;You don’t need any previous knowledge of &lt;strong&gt;Django&lt;/strong&gt; or &lt;strong&gt;databases&lt;/strong&gt; to complete this project. If you want to learn more about the topics that you encounter in this tutorial, you’ll find links to resources along the way.&lt;/p&gt;
&lt;p&gt;However, you should be comfortable using the &lt;strong&gt;command line&lt;/strong&gt; and have a &lt;a href=&quot;https://realpython.com/products/python-basics-book/&quot;&gt;basic knowledge&lt;/a&gt; of Python and &lt;a href=&quot;https://realpython.com/python3-object-oriented-programming/&quot;&gt;classes&lt;/a&gt;. Although it helps to know about &lt;a href=&quot;https://realpython.com/python-virtual-environments-a-primer/&quot;&gt;virtual environments&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/what-is-pip/&quot;&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;, you’ll learn how to set everything up as you work through the tutorial.&lt;/p&gt;
&lt;h2 id=&quot;step-1-prepare-your-django-project&quot;&gt;Step 1: Prepare Your Django Project&lt;a class=&quot;headerlink&quot; href=&quot;#step-1-prepare-your-django-project&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this step, you’ll prepare the development environment for your Django flashcards project.
First, you’ll create a &lt;strong&gt;virtual environment&lt;/strong&gt; and install all &lt;strong&gt;dependencies&lt;/strong&gt; that you need for your project.
At the end of this step, you’ll create the Django project and verify that your project is set up correctly in the browser.&lt;/p&gt;
&lt;h3 id=&quot;create-a-virtual-environment&quot;&gt;Create a Virtual Environment&lt;a class=&quot;headerlink&quot; href=&quot;#create-a-virtual-environment&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/django-flashcards-app/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/django-flashcards-app/ »&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 #117: Measuring Python Code Quality, Simplicity, and Maintainability</title>
      <id>https://realpython.com/podcasts/rpp/117/</id>
      <link href="https://realpython.com/podcasts/rpp/117/"/>
      <updated>2022-07-15T12:00:00+00:00</updated>
      <summary>How maintainable is your Python code? Is it possible to hold the code for your functions in your head? When is it appropriate to use measurements in a code review? This week on the show, Reka Horvath and Ben Martineau from Sourcery are here to discuss their recent PyCon talk, &quot;Actionable insights vs ranking: How to use and how NOT to use code quality metrics.&quot;</summary>
      <content type="html">
        &lt;p&gt;How maintainable is your Python code? Is it possible to hold the code for your functions in your head? When is it appropriate to use measurements in a code review? This week on the show, Reka Horvath and Ben Martineau from Sourcery are here to discuss their recent PyCon talk, &quot;Actionable insights vs ranking: How to use and how NOT to use code quality metrics.&quot;&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>NumPy&#x27;s max() and maximum(): Find Extreme Values in Arrays</title>
      <id>https://realpython.com/numpy-max-maximum/</id>
      <link href="https://realpython.com/numpy-max-maximum/"/>
      <updated>2022-07-13T14:00:00+00:00</updated>
      <summary>In this introduction to NumPy, you&#x27;ll learn how to find extreme values using the max() and maximum() functions. This includes finding the maximum element in an array or along a given axis of an array, as well as comparing two arrays to find the larger element in each index position.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;The NumPy library supports expressive, efficient numerical programming in Python. Finding extreme values is a very common requirement in data analysis. The NumPy &lt;code&gt;max()&lt;/code&gt; and &lt;code&gt;maximum()&lt;/code&gt; functions are two examples of how NumPy lets you combine the coding comfort offered by Python with the runtime efficiency you’d expect from C.&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;Use the NumPy &lt;strong&gt;&lt;code&gt;max()&lt;/code&gt;&lt;/strong&gt; function&lt;/li&gt;
&lt;li&gt;Use the NumPy &lt;strong&gt;&lt;code&gt;maximum()&lt;/code&gt;&lt;/strong&gt; function and understand why it’s &lt;strong&gt;different&lt;/strong&gt; from &lt;code&gt;max()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Solve &lt;strong&gt;practical problems&lt;/strong&gt; with these functions&lt;/li&gt;
&lt;li&gt;Handle &lt;strong&gt;missing values&lt;/strong&gt; in your data&lt;/li&gt;
&lt;li&gt;Apply the same concepts to &lt;strong&gt;finding minimum values&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tutorial includes a very short introduction to NumPy, so even if you’ve never used NumPy before, you should be able to jump right in.
 With the background provided here, you’ll be ready to continue exploring the wealth of functionality to be found in the NumPy library.&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;&lt;p&gt;&lt;strong&gt;Free Bonus:&lt;/strong&gt; &lt;a href=&quot;#&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-numpy-learning-guide&quot; data-focus=&quot;false&quot;&gt;Click here to get access to a free NumPy Resources Guide&lt;/a&gt; that points you to the best tutorials, videos, and books for improving your NumPy skills.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;numpy-numerical-python&quot;&gt;NumPy: Numerical Python&lt;a class=&quot;headerlink&quot; href=&quot;#numpy-numerical-python&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://numpy.org&quot;&gt;NumPy&lt;/a&gt; is short for &lt;strong&gt;Numerical Python&lt;/strong&gt;. It’s an open source Python library that enables a wide range of applications in the fields of science, statistics, and data analytics through its support of fast, parallelized computations on multidimensional &lt;a href=&quot;https://en.wikipedia.org/wiki/Array_data_structure&quot;&gt;arrays&lt;/a&gt; of numbers. Many of the most popular numerical packages use NumPy as their base library.&lt;/p&gt;
&lt;h3 id=&quot;introducing-numpy&quot;&gt;Introducing NumPy&lt;a class=&quot;headerlink&quot; href=&quot;#introducing-numpy&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The NumPy library is built around a class named &lt;a href=&quot;https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy-ndarray&quot;&gt;&lt;code&gt;np.ndarray&lt;/code&gt;&lt;/a&gt; and a set of methods and functions that leverage Python syntax for defining and manipulating arrays of any shape or size.&lt;/p&gt;
&lt;p&gt;NumPy’s core code for array manipulation is written in C. You can use functions and methods directly on an &lt;code&gt;ndarray&lt;/code&gt; as NumPy’s &lt;a href=&quot;https://realpython.com/c-for-python-programmers/&quot;&gt;C-based code&lt;/a&gt; efficiently loops over all the array elements in the background. NumPy’s high-level syntax means that you can simply and elegantly express complex programs and execute them at high speeds.&lt;/p&gt;
&lt;p&gt;You can use a regular Python &lt;a href=&quot;https://realpython.com/python-lists-tuples/#python-lists&quot;&gt;&lt;code&gt;list&lt;/code&gt;&lt;/a&gt; to represent an array. However, NumPy arrays are far more efficient than lists, and they’re supported by a huge library of methods and functions. These include mathematical and logical operations, sorting, &lt;a href=&quot;https://realpython.com/python-scipy-fft/#the-fourier-transform&quot;&gt;Fourier transforms&lt;/a&gt;, linear algebra, array reshaping, and much more.&lt;/p&gt;
&lt;p&gt;Today, NumPy is in widespread use in fields as diverse as &lt;a href=&quot;https://www.astropy.org/&quot;&gt;astronomy&lt;/a&gt;, &lt;a href=&quot;https://qiskit.org&quot;&gt;quantum computing&lt;/a&gt;, &lt;a href=&quot;https://biopython.org/&quot;&gt;bioinformatics&lt;/a&gt;, and all kinds of engineering.&lt;/p&gt;
&lt;p&gt;NumPy is used under the hood as the numerical engine for many other libraries, such as &lt;a href=&quot;https://realpython.com/pandas-dataframe/&quot;&gt;pandas&lt;/a&gt; and &lt;a href=&quot;https://realpython.com/python-scipy-cluster-optimize/&quot;&gt;SciPy&lt;/a&gt;. It also integrates easily with visualization libraries like &lt;a href=&quot;https://realpython.com/python-matplotlib-guide/&quot;&gt;Matplotlib&lt;/a&gt; and &lt;a href=&quot;https://seaborn.pydata.org/&quot;&gt;seaborn&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;NumPy is easy to install with your package manager, for example &lt;a href=&quot;https://realpython.com/what-is-pip/&quot;&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://realpython.com/python-virtual-environments-a-primer/#the-conda-package-and-environment-manager&quot;&gt;&lt;code&gt;conda&lt;/code&gt;&lt;/a&gt;. For detailed instructions plus a more extensive introduction to NumPy and its capabilities, take a look at &lt;a href=&quot;https://realpython.com/numpy-tutorial/&quot;&gt;NumPy Tutorial: Your First Steps Into Data Science in Python&lt;/a&gt; or the &lt;a href=&quot;https://numpy.org/doc/stable/user/absolute_beginners.html&quot;&gt;NumPy Absolute Beginner’s Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this tutorial, you’ll learn how to take your very first steps in using NumPy. You’ll then explore NumPy’s &lt;code&gt;max()&lt;/code&gt; and &lt;code&gt;maximum()&lt;/code&gt; commands.&lt;/p&gt;
&lt;h3 id=&quot;creating-and-using-numpy-arrays&quot;&gt;Creating and Using NumPy Arrays&lt;a class=&quot;headerlink&quot; href=&quot;#creating-and-using-numpy-arrays&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You’ll start your investigation with a quick overview of NumPy arrays, the flexible data structure that gives NumPy its versatility and power.&lt;/p&gt;
&lt;p&gt;The fundamental building block for any NumPy program is the &lt;code&gt;ndarray&lt;/code&gt;. An &lt;code&gt;ndarray&lt;/code&gt; is a Python object wrapping an array of numbers. It may, in principle, have any number of dimensions of any size. You can declare an array in several ways. The most straightforward method starts from a regular Python &lt;a href=&quot;https://realpython.com/python-lists-tuples/&quot;&gt;list or tuple&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight python repl&quot;&gt;&lt;span class=&quot;repl-toggle&quot; title=&quot;Toggle REPL prompts and output&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;numpy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;np&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;array([3, 7, 2, 4, 5])&lt;/span&gt;

&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(((&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&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;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&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;mi&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;B&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;array([[1, 4],&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;       [1, 5],&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;       [9, 2]])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You’ve imported &lt;code&gt;numpy&lt;/code&gt; under the alias &lt;code&gt;np&lt;/code&gt;. This is a standard, widespread convention, so you’ll see it in most tutorials and programs.
In this example, &lt;code&gt;A&lt;/code&gt; is a one-dimensional array of numbers, while &lt;code&gt;B&lt;/code&gt; is two-dimensional.&lt;/p&gt;
&lt;p&gt;Notice that the &lt;code&gt;np.array()&lt;/code&gt; factory function expects a Python list or tuple as its first parameter, so the list or tuple must therefore be wrapped in its own set of brackets or parentheses, respectively. Just throwing in an unwrapped bunch of numbers won’t work:&lt;/p&gt;
&lt;div class=&quot;highlight python repl&quot;&gt;&lt;span class=&quot;repl-toggle&quot; title=&quot;Toggle REPL prompts and output&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;gt&quot;&gt;Traceback (most recent call last):&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;gr&quot;&gt;TypeError&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;array() takes from 1 to 2 positional arguments but 5 were given&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With this syntax, the interpreter sees five separate positional arguments, so it’s confused.&lt;/p&gt;
&lt;p&gt;In your constructor for array &lt;code&gt;B&lt;/code&gt;, the nested tuple argument needs an extra pair of parentheses to identify it, in its entirety, as the first parameter of &lt;code&gt;np.array()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Addressing the array elements is straightforward. NumPy’s indices start at zero, like all Python sequences. By convention, a two-dimensional array is displayed so that the first index refers to the row, and the second index refers to the column. So &lt;code&gt;A[0]&lt;/code&gt; is the first element of the one-dimensional array &lt;code&gt;A&lt;/code&gt;, and &lt;code&gt;B[2, 1]&lt;/code&gt; is the second element in the third row of the two-dimensional array &lt;code&gt;B&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/numpy-max-maximum/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/numpy-max-maximum/ »&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>SQLite and SQLAlchemy in Python: Moving Your Data Beyond Flat Files</title>
      <id>https://realpython.com/courses/sqlite-sqlalchemy-python/</id>
      <link href="https://realpython.com/courses/sqlite-sqlalchemy-python/"/>
      <updated>2022-07-12T14:00:00+00:00</updated>
      <summary>In this video course, you&#x27;ll learn how to store and retrieve data using Python, SQLite, and SQLAlchemy as well as with flat files. Using SQLite with Python brings with it the additional benefit of accessing data with SQL. By adding SQLAlchemy, you can work with data in terms of objects and methods.</summary>
      <content type="html">
        &lt;p&gt;All programs process data in one form or another, and many need to be able to save and retrieve that data from one invocation to the next. Python, &lt;a href=&quot;https://www.sqlite.org/index.html&quot;&gt;SQLite&lt;/a&gt;, and &lt;a href=&quot;https://www.sqlalchemy.org/&quot;&gt;SQLAlchemy&lt;/a&gt; give your programs database functionality, allowing you to store data in a single file without the need for a database server.&lt;/p&gt;
&lt;p&gt;You can achieve similar results using &lt;a href=&quot;https://en.wikipedia.org/wiki/Flat-file_database&quot;&gt;flat files&lt;/a&gt; in any number of formats, including CSV, JSON, XML, and even custom formats. Flat files are often human-readable text files&amp;mdash;though they can also be binary data&amp;mdash;with a structure that can be parsed by a computer program. You&amp;rsquo;ll explore using SQL databases and flat files for data storage and manipulation and learn how to decide which approach is right for your program.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this video course, you&amp;rsquo;ll learn how to use:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flat files&lt;/strong&gt; for data storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt; to improve access to persistent data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite&lt;/strong&gt; for data storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLAlchemy&lt;/strong&gt; to work with data as Python objects&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>Python and TOML: New Best Friends</title>
      <id>https://realpython.com/python-toml/</id>
      <link href="https://realpython.com/python-toml/"/>
      <updated>2022-07-11T14:00:00+00:00</updated>
      <summary>TOML is a configuration file format that&#x27;s becoming increasingly popular in the Python community. In this tutorial, you&#x27;ll learn the syntax of TOML and explore how you can work with TOML files in your own projects.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;TOML—Tom’s Obvious Minimal Language—is a reasonably new configuration file format that the Python community has embraced over the last couple of years. TOML plays an essential part in the Python ecosystem. Many of your favorite tools rely on TOML for configuration, and you’ll use &lt;code&gt;pyproject.toml&lt;/code&gt; when you build and distribute your own packages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn more about TOML and how you can use it. In particular, you’ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn and understand the &lt;strong&gt;syntax&lt;/strong&gt; of TOML&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;tomli&lt;/code&gt; and &lt;code&gt;tomllib&lt;/code&gt; to &lt;strong&gt;parse&lt;/strong&gt; TOML documents&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;tomli_w&lt;/code&gt; to &lt;strong&gt;write&lt;/strong&gt; data structures as TOML&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;tomlkit&lt;/code&gt; when you need &lt;strong&gt;more control&lt;/strong&gt; over your TOML files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A new module for TOML parsing is being added to Python’s standard library in Python 3.11. &lt;a href=&quot;#read-toml-documents-with-tomli-and-tomllib&quot;&gt;Later&lt;/a&gt; in this tutorial, you’ll learn how to use this new module. If you want to know more about why &lt;code&gt;tomllib&lt;/code&gt; was added to Python, then have a look at the companion tutorial, &lt;a href=&quot;https://realpython.com/python311-tomllib/&quot;&gt;Python 3.11 Preview: TOML and &lt;code&gt;tomllib&lt;/code&gt;&lt;/a&gt;.&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;use-toml-as-a-configuration-format&quot;&gt;Use TOML as a Configuration Format&lt;a class=&quot;headerlink&quot; href=&quot;#use-toml-as-a-configuration-format&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TOML is short for &lt;strong&gt;Tom’s Obvious Minimal Language&lt;/strong&gt; and is humbly named after its creator, &lt;a href=&quot;https://tom.preston-werner.com/&quot;&gt;Tom Preston-Werner&lt;/a&gt;. It was designed expressly to be a &lt;strong&gt;configuration file format&lt;/strong&gt; that should be “easy to parse into data structures in a wide variety of languages” (&lt;a href=&quot;https://toml.io/en/v0.1.0&quot;&gt;Source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In this section, you’ll start thinking about configuration files and look at what TOML brings to the table.&lt;/p&gt;
&lt;h3 id=&quot;configurations-and-configuration-files&quot;&gt;Configurations and Configuration Files&lt;a class=&quot;headerlink&quot; href=&quot;#configurations-and-configuration-files&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A configuration is an important part of almost any application or system. It’ll allow you to change settings or behavior without changing the source code. Sometimes you’ll use a configuration to specify information needed to connect to another service like a database or cloud storage. Other times you’ll use configuration settings to allow your users to customize their experience with your project.&lt;/p&gt;
&lt;p&gt;Using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Configuration_file&quot;&gt;configuration file&lt;/a&gt; for your project is a good way to separate your code from its settings. It also encourages you to be conscious about which parts of your system are genuinely configurable, giving you a tool to name magic values in your source code. For now, consider this configuration file for a hypothetical &lt;a href=&quot;https://realpython.com/tic-tac-toe-python/&quot;&gt;tic-tac-toe game&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight ini&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;player_x_color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blue&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;player_o_color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;green&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;board_size&lt;/span&gt;     &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;server_url&lt;/span&gt;     &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https://tictactoe.example.com/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You could potentially code this directly in your source code. However, by moving the settings into a separate file, you achieve a few things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You give explicit &lt;strong&gt;names&lt;/strong&gt; to values.&lt;/li&gt;
&lt;li&gt;You provide these values more &lt;strong&gt;visibility&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You make it simpler to &lt;strong&gt;change&lt;/strong&gt; the values.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look more closely at your hypothetical configuration file. Those values are conceptually different. The colors are values that your framework probably supports changing. In other words, if you replaced &lt;code&gt;blue&lt;/code&gt; with &lt;code&gt;red&lt;/code&gt;, that would be honored without any special handling in your code. You could even consider if it’s worth exposing this configuration to your end users through your front end.&lt;/p&gt;
&lt;p&gt;However, the board size may or may not be configurable. A tic-tac-toe game is played on a three-by-three grid. It’s not certain that your logic would still work for other board sizes. It may still make sense to keep the value in your configuration file, both to give a name to the value and to make it visible.&lt;/p&gt;
&lt;p&gt;Finally, the project URL is usually essential when deploying your application. It’s not something that a typical user will change, but a &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_user&quot;&gt;power user&lt;/a&gt; may want to redeploy your game to a different server.&lt;/p&gt;
&lt;p&gt;To be more explicit about these different use cases, you may want to add some organization to your configuration. One popular option is to separate your configuration into additional files, each dealing with a different concern. Another option is to group your configuration values somehow. For example, you can organize your hypothetical configuration file as follows:&lt;/p&gt;
&lt;div class=&quot;highlight ini&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;[user]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;player_x_color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;blue&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;player_o_color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;green&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;[constant]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;board_size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;3&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;[server]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https://tictactoe.example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The organization of the file makes the role of each configuration item clearer. You can also add comments to the configuration file with instructions to anyone thinking about making changes to it.&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 actual format of your configuration file isn’t important for this discussion. The above principles hold independently of how you specify your configuration values. As it happens, the examples that you’ve seen so far can be parsed by Python’s &lt;a href=&quot;https://docs.python.org/3/library/configparser.html&quot;&gt;&lt;code&gt;ConfigParser&lt;/code&gt;&lt;/a&gt; class.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;There are many ways for you to specify a configuration. Windows has traditionally used &lt;a href=&quot;https://en.wikipedia.org/wiki/INI_file&quot;&gt;INI files&lt;/a&gt;, which resemble your configuration file from above. Unix systems have also relied on plain-text, human-readable &lt;a href=&quot;https://en.wikipedia.org/wiki/Configuration_file#Unix_and_Unix-like_operating_systems&quot;&gt;configuration files&lt;/a&gt;, although the actual format varies between different services.&lt;/p&gt;
&lt;p&gt;Over time, more and more applications have come to use well-defined formats like &lt;a href=&quot;https://realpython.com/python-xml-parser/&quot;&gt;XML&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/python-json/&quot;&gt;JSON&lt;/a&gt;, or &lt;a href=&quot;https://realpython.com/python-yaml/&quot;&gt;YAML&lt;/a&gt; for their configuration needs. These formats were designed as data &lt;strong&gt;interchange&lt;/strong&gt; or &lt;strong&gt;serialization&lt;/strong&gt; formats, usually meant for computer communication.&lt;/p&gt;
&lt;p&gt;On the other hand, configuration files are often written or edited by humans. Many developers have gotten frustrated with JSON’s strict comma rules when updating their &lt;a href=&quot;https://realpython.com/advanced-visual-studio-code-python/#setting-up-your-terminal&quot;&gt;Visual Studio Code settings&lt;/a&gt; or with YAML’s nested indentations when setting up a &lt;a href=&quot;https://realpython.com/python-boto3-aws-s3/&quot;&gt;cloud service&lt;/a&gt;. Despite their ubiquity, these file formats aren’t the easiest to write by hand.&lt;/p&gt;
&lt;h3 id=&quot;toml-toms-obvious-minimal-language&quot;&gt;TOML: Tom’s Obvious Minimal Language&lt;a class=&quot;headerlink&quot; href=&quot;#toml-toms-obvious-minimal-language&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-toml/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-toml/ »&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 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>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>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>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 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>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>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>
  

</feed>
