<?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>2021-12-20T14:00:00+00:00</updated>
  <id>https://realpython.com/</id>
  <author>
    <name>Real Python</name>
  </author>

  
    <entry>
      <title>Dependency Management With Python Poetry</title>
      <id>https://realpython.com/dependency-management-python-poetry/</id>
      <link href="https://realpython.com/dependency-management-python-poetry/"/>
      <updated>2021-12-20T14:00:00+00:00</updated>
      <summary>Learn how Python Poetry will help you start new projects, maintain existing ones, and master dependency management.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;When your Python project relies on external packages, you need to make sure you’re using the right version of each package.
After an update, a package might not work as it did before the update.
A dependency manager like Python &lt;strong&gt;Poetry&lt;/strong&gt; helps you specify, install, and resolve external packages in your projects.
This way, you can be sure that you always work with the right dependency version on every machine.&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;Start a &lt;strong&gt;new&lt;/strong&gt; Poetry project&lt;/li&gt;
&lt;li&gt;Add Poetry to an &lt;strong&gt;existing&lt;/strong&gt; project&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;&lt;code&gt;pyproject.toml&lt;/code&gt;&lt;/strong&gt; file&lt;/li&gt;
&lt;li&gt;Pin &lt;strong&gt;dependencies&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Install dependencies with &lt;strong&gt;&lt;code&gt;poetry.lock&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Execute basic &lt;strong&gt;Poetry CLI&lt;/strong&gt; commands&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using &lt;a href=&quot;https://python-poetry.org/&quot;&gt;Poetry&lt;/a&gt; will help you start new projects, maintain existing ones, and master &lt;strong&gt;dependency management&lt;/strong&gt;.
You’ll be prepared to work with &lt;code&gt;pyproject.toml&lt;/code&gt; files, which will be the &lt;a href=&quot;https://www.python.org/dev/peps/pep-0518/&quot;&gt;standard&lt;/a&gt; for defining build requirements in Python projects.&lt;/p&gt;
&lt;p&gt;To complete this tutorial and get the most out of it, you should have a basic understanding of &lt;a href=&quot;https://realpython.com/python-virtual-environments-a-primer/&quot;&gt;virtual environments&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/python-modules-packages/&quot;&gt;modules and packages&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;.&lt;/p&gt;
&lt;p&gt;While this tutorial focuses on dependency management, Poetry can also help you with &lt;a href=&quot;https://python-poetry.org/docs/cli/#build&quot;&gt;building and packaging&lt;/a&gt; projects.
If you want to share your work, then you can even &lt;a href=&quot;https://python-poetry.org/docs/cli/#publish&quot;&gt;publish&lt;/a&gt; your Poetry project to the &lt;a href=&quot;https://pypi.org/&quot;&gt;Python Packaging Index (PyPI)&lt;/a&gt;.&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-dependency-pitfalls-email-course&quot; data-focus=&quot;false&quot;&gt;Click here to get access to a free 5-day class&lt;/a&gt; that shows you how to avoid common dependency management issues with tools like Pip, PyPI, Virtualenv, and requirements files.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;take-care-of-prerequisites&quot;&gt;Take Care of Prerequisites&lt;a class=&quot;headerlink&quot; href=&quot;#take-care-of-prerequisites&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before diving into the nitty-gritty of Python Poetry, you’ll take care of some prerequisites.
First, you’ll read a short overview of terminology you’ll encounter in this tutorial.
Next, you’ll install Poetry itself.&lt;/p&gt;
&lt;h3 id=&quot;relevant-terminology&quot;&gt;Relevant Terminology&lt;a class=&quot;headerlink&quot; href=&quot;#relevant-terminology&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you’ve ever used an &lt;code&gt;import&lt;/code&gt; statement in one of your Python scripts, then you’ve worked with &lt;strong&gt;modules&lt;/strong&gt;.
Some of these modules might have been Python files you wrote on your own.
Others could have been &lt;strong&gt;built-in&lt;/strong&gt; modules, like &lt;a href=&quot;https://realpython.com/python-datetime/&quot;&gt;datetime&lt;/a&gt;.
However, sometimes what Python provides isn’t enough.
That’s when you might turn to external, packaged modules.
When your Python code relies on external modules, you can say that these &lt;strong&gt;packages&lt;/strong&gt; are &lt;strong&gt;dependencies&lt;/strong&gt; of your project.&lt;/p&gt;
&lt;p&gt;You can find packages that aren’t part of the &lt;a href=&quot;https://docs.python.org/3/py-modindex.html&quot;&gt;Python standard library&lt;/a&gt; in &lt;a href=&quot;https://pypi.org/&quot;&gt;PyPI&lt;/a&gt;.
Before seeing how this works, you need to install Poetry on your system.&lt;/p&gt;
&lt;h3 id=&quot;python-poetry-installation&quot;&gt;Python Poetry Installation&lt;a class=&quot;headerlink&quot; href=&quot;#python-poetry-installation&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To use Poetry in your command line, you should install it system-wide.
If you just want to try it out, then you can install it into a virtual environment using &lt;a href=&quot;https://pypi.org/project/poetry/&quot;&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;.
But you should try this method with caution because Poetry will install its own dependencies, which can conflict with other packages you’re using in your project.&lt;/p&gt;
&lt;p&gt;The recommended way to &lt;a href=&quot;https://python-poetry.org/docs/#installation&quot;&gt;install Poetry&lt;/a&gt; is by using the official &lt;code&gt;install-poetry&lt;/code&gt; script.
You can either download and run this &lt;a href=&quot;https://github.com/python-poetry/poetry/blob/master/install-poetry.py&quot;&gt;Python file&lt;/a&gt; manually or select your operating system below to use the appropriate command:&lt;/p&gt;
&lt;ul class=&quot;nav nav-tabs justify-content-end&quot; role=&quot;tablist&quot;&gt;

  &lt;li class=&quot;nav-item mb-0&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&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&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 C:\&amp;gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Invoke-WebRequest&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;-Uri&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;https&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;raw&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;githubusercontent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python-poetry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;poetry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;master&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;install-poetry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;py&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;-UseBasicParsing&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;python&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you’re on Windows, then you can use the &lt;code&gt;Invoke-Webrequest&lt;/code&gt; cmdlet with the &lt;code&gt;-UseBasicParsing&lt;/code&gt; option to download the content of a requested URL to the &lt;strong&gt;standard output stream (stdout)&lt;/strong&gt;.
With the pipe character (&lt;code&gt;|&lt;/code&gt;), you’re handing over the output to the &lt;strong&gt;standard input stream (stdin)&lt;/strong&gt; of &lt;code&gt;python&lt;/code&gt;.
In this case, you’re &lt;em&gt;piping&lt;/em&gt; the content of &lt;code&gt;install-poetry.py&lt;/code&gt; to your Python interpreter.&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; Some users &lt;a href=&quot;https://github.com/python-poetry/poetry/issues/2795&quot;&gt;report errors on Windows 10&lt;/a&gt; when they use the PowerShell command. &lt;/p&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;curl https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; python3 -
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With &lt;code&gt;curl&lt;/code&gt;, you’re outputting the content of a requested URL to the &lt;strong&gt;standard output stream (stdout)&lt;/strong&gt;.
By using a Unix pipeline with the pipe character (&lt;code&gt;|&lt;/code&gt;), you’re handing over the output to the &lt;strong&gt;standard input stream (stdin)&lt;/strong&gt; of &lt;code&gt;python3&lt;/code&gt;.
In this case, you’re &lt;em&gt;piping&lt;/em&gt; the content of &lt;code&gt;install-poetry.py&lt;/code&gt; to your Python interpreter.&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 on macOS, then you may get an &lt;code&gt;ssl.SSLCertVerificationError&lt;/code&gt;.
This error can occur if you don’t have the default &lt;strong&gt;root certificates&lt;/strong&gt; for the SSL module installed. You can install them by running a command script in your Python folder:&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;open &lt;span class=&quot;s2&quot;&gt;&quot;/Applications/Python 3.9/Install Certificates.command&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Depending on your installed Python version, the specific path to the Python interpeter might be different.
In that case, you need to adjust the path in the above command accordingly.&lt;/p&gt;
&lt;p&gt;After you run the command, the &lt;code&gt;curl&lt;/code&gt; command above should work without any errors.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In the output, you should see a message that the installation is complete.
You can run &lt;code&gt;poetry --version&lt;/code&gt; in your terminal to see if &lt;code&gt;poetry&lt;/code&gt; works.
This command will display your current Poetry version.
If you want to update Poetry, then you can run &lt;code&gt;poetry self update&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;get-started-with-python-poetry&quot;&gt;Get Started With Python Poetry&lt;a class=&quot;headerlink&quot; href=&quot;#get-started-with-python-poetry&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With Poetry installed, it’s time to see how Poetry works.
In this section, you’ll learn how to start a fresh Poetry project and how to add Poetry to an existing project.
You’ll also see the project structure and inspect the &lt;code&gt;pyproject.toml&lt;/code&gt; file.&lt;/p&gt;
&lt;h3 id=&quot;create-a-new-poetry-project&quot;&gt;Create a New Poetry Project&lt;a class=&quot;headerlink&quot; href=&quot;#create-a-new-poetry-project&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can create a new Poetry project by using the &lt;code&gt;new&lt;/code&gt; command and a project name as an argument.
In this tutorial, the project is called &lt;code&gt;rp-poetry&lt;/code&gt;.
Create the project, and then move into the newly created directory:&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;poetry new rp-poetry
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; rp-poetry
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;By running &lt;code&gt;poetry new rp-poetry&lt;/code&gt;, you create a new folder named &lt;code&gt;rp-poetry/&lt;/code&gt;.
When you look inside the folder, you’ll see a structure:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rp-poetry/
│
├── rp_poetry/
│   └── __init__.py
│
├── tests/
│   ├── __init__.py
│   └── test_rp_poetry.py
│
├── README.rst
└── pyproject.toml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/dependency-management-python-poetry/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/dependency-management-python-poetry/ »&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 #90: A Python Journey: Cyber Security, Automating AWS, and TDD</title>
      <id>https://realpython.com/podcasts/rpp/90/</id>
      <link href="https://realpython.com/podcasts/rpp/90/"/>
      <updated>2021-12-17T12:00:00+00:00</updated>
      <summary>The Python community continually grows, with many users coming from different languages and backgrounds. This week on the show, we talk with developer Hugh Tipping about his Python journey. Hugh is also a member of the Real Python community.</summary>
      <content type="html">
        &lt;p&gt;The Python community continually grows, with many users coming from different languages and backgrounds. This week on the show, we talk with developer Hugh Tipping about his Python journey. Hugh is also a member of the Real Python community.&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>Host Your Django Project on Heroku</title>
      <id>https://realpython.com/courses/host-your-django-project-on-heroku/</id>
      <link href="https://realpython.com/courses/host-your-django-project-on-heroku/"/>
      <updated>2021-12-14T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll learn how to host your Django project in the cloud for free and with little hassle. You&#x27;ll use Heroku, which takes the burden of infrastructure management off your shoulders.</summary>
      <content type="html">
        &lt;p&gt;As a novice &lt;a href=&quot;https://realpython.com/learning-paths/become-python-web-developer/&quot;&gt;web developer&lt;/a&gt;, you&amp;rsquo;ve built your &lt;a href=&quot;https://realpython.com/get-started-with-django-1/&quot;&gt;portfolio app&lt;/a&gt; and shared your code on &lt;a href=&quot;https://realpython.com/python-git-github-intro/&quot;&gt;GitHub&lt;/a&gt;. Perhaps, you&amp;rsquo;re hoping to attract technical recruiters to land your first &lt;a href=&quot;https://realpython.com/learning-paths/python-interview/&quot;&gt;programming job&lt;/a&gt;. Many &lt;a href=&quot;https://en.wikipedia.org/wiki/Coding_bootcamp&quot;&gt;coding bootcamp&lt;/a&gt; graduates are likely doing the same thing. To differentiate yourself from the crowd and boost your chances of getting noticed, you can start &lt;strong&gt;hosting&lt;/strong&gt; your Django project online.&lt;/p&gt;
&lt;p&gt;For a hobby Django project, you&amp;rsquo;ll want a hosting service that&amp;rsquo;s &lt;strong&gt;free&lt;/strong&gt; of charge, &lt;strong&gt;quick&lt;/strong&gt; to set up, &lt;strong&gt;user-friendly&lt;/strong&gt;, and &lt;strong&gt;well-integrated&lt;/strong&gt; with your existing technology stack. While &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt; is perfect for hosting static websites and websites with &lt;a href=&quot;https://realpython.com/python-vs-javascript/&quot;&gt;JavaScript&lt;/a&gt;, you&amp;rsquo;ll need a &lt;strong&gt;web server&lt;/strong&gt; to run your &lt;a href=&quot;https://realpython.com/learning-paths/flask-by-example/&quot;&gt;Flask&lt;/a&gt; or &lt;a href=&quot;https://realpython.com/learning-paths/django-web-development/&quot;&gt;Django&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;There are a few major &lt;strong&gt;cloud platform&lt;/strong&gt; providers operating in different models, but you&amp;rsquo;re going to explore &lt;a href=&quot;https://www.heroku.com/&quot;&gt;Heroku&lt;/a&gt; in this course. It ticks all the boxes&amp;mdash;it&amp;rsquo;s free, quick to set up, user-friendly, and well-integrated with Django&amp;mdash;and is the favorite cloud platform provider of many startups.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sign up for a free &lt;strong&gt;Heroku account&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Heroku CLI&lt;/strong&gt; (command-line interface)&lt;/li&gt;
&lt;li&gt;Bootstrap a minimal &lt;strong&gt;Django project&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Integrate &lt;strong&gt;Git&lt;/strong&gt; with Heroku&lt;/li&gt;
&lt;li&gt;Connect to Heroku&amp;rsquo;s &lt;strong&gt;PostgreSQL&lt;/strong&gt; database&lt;/li&gt;
&lt;li&gt;Manage &lt;strong&gt;configuration&lt;/strong&gt;, make new &lt;strong&gt;releases&lt;/strong&gt; and &lt;strong&gt;rollbacks&lt;/strong&gt;&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>Java vs Python: Basic Python for Java Developers</title>
      <id>https://realpython.com/java-vs-python/</id>
      <link href="https://realpython.com/java-vs-python/"/>
      <updated>2021-12-13T14:00:00+00:00</updated>
      <summary>Are you an experienced Java developer who wants to know more about Python? In this tutorial, you&#x27;ll compare Java vs Python and get to know the similarities and differences between the languages. You&#x27;ll also learn how to figure out when Python is a good choice for your specific use cases.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Python is a general-purpose programming language. You can understand its growth in the last couple of years by considering its approachability for learning and its high suitability for data analysis, machine learning, and web development. But what kind of programming language is it? What are some differences when you compare Java vs Python? What can you do with it? And is it really as “easy to learn” as some people claim?&lt;/p&gt;
&lt;p&gt;You’ll explore Python from a Java perspective in this tutorial. After you’ve read it, you’ll be able to decide whether Python is a viable option to solve your use cases and to appreciate when you can use Python in combination with Java for certain types of problems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn about:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The general Python programming &lt;strong&gt;language syntax&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The most relevant standard &lt;strong&gt;data types&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;differences&lt;/strong&gt; and &lt;strong&gt;similarities&lt;/strong&gt; in Java vs Python&lt;/li&gt;
&lt;li&gt;Resources for high-quality Python &lt;strong&gt;documentation&lt;/strong&gt; and &lt;strong&gt;tutorials&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Some of the Python community’s favorite &lt;strong&gt;frameworks&lt;/strong&gt; and &lt;strong&gt;libraries&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Approaches for &lt;strong&gt;getting started&lt;/strong&gt; with Python programming from scratch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tutorial is for software developers who are familiar with Java’s inner workings, concepts, terminology, classes, types, collections framework, and so on.&lt;/p&gt;
&lt;p&gt;You don’t need to have any Python experience at all.&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-shortened&quot; data-focus=&quot;false&quot;&gt;Click here to get a Python Cheat Sheet&lt;/a&gt; and learn the basics of Python 3, like working with data types, dictionaries, lists, and Python functions.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;where-does-python-come-from&quot;&gt;Where Does Python Come From?&lt;a class=&quot;headerlink&quot; href=&quot;#where-does-python-come-from&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python is a programming language that was developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Guido_van_Rossum&quot; title=&quot;Guido van Rossum - Wikipedia&quot;&gt;Guido van Rossum&lt;/a&gt;. He was looking for a hobby programming project that would keep him occupied during the Christmas holiday in 1989, so that’s when he started developing the Python interpreter.&lt;/p&gt;
&lt;p&gt;Python has its origins in a number of languages: &lt;a href=&quot;https://homepages.cwi.nl/~steven/abc/&quot; title=&quot;The ABC Programming Language: a short introduction&quot;&gt;ABC&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/C_(programming_language)&quot; title=&quot;C (programming language) - Wikipedia&quot;&gt;C&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Modula-3&quot; title=&quot;Modula-3 - Wikipedia&quot;&gt;Modula-3&lt;/a&gt;. It’s basically an object-oriented, imperative programming language.&lt;/p&gt;
&lt;p&gt;Depending on your preference and desired functionality, it can be applied in a full object-oriented style or in a procedural programming style with functions. The object-oriented capabilities are addressed &lt;a href=&quot;#class-based-object-orientation&quot;&gt;later&lt;/a&gt; in this tutorial.&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; Just for clarity, from a Java perspective, Python functions are like &lt;strong&gt;static methods&lt;/strong&gt;, and you don’t necessarily need to define them within a class. &lt;a href=&quot;#indentation-for-code-block-grouping&quot;&gt;Later on&lt;/a&gt;, you’ll see an example of a Python function definition.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Additionally, a more functional programming style is also perfectly possible. To learn more, you’ll want to explore &lt;a href=&quot;https://realpython.com/python-functional-programming/&quot; title=&quot;Functional Programming in Python: When and How to Use It – Real Python&quot;&gt;Python’s functional programming capabilities&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In early 2021, TIOBE announced Python as the &lt;a href=&quot;https://www.tiobe.com/tiobe-index/python/&quot; title=&quot;Tiobe: Python&quot;&gt;programming language of the year&lt;/a&gt; for the fourth time. As of the 2021 &lt;a href=&quot;https://octoverse.github.com/#top-languages-over-the-years&quot; title=&quot;Octoverse: Top languages over the years&quot;&gt;Octoverse report&lt;/a&gt;, Python ranks as the second most popular language on GitHub by repository contributors.&lt;/p&gt;
&lt;h2 id=&quot;what-is-the-philosophy-of-python&quot;&gt;What Is the Philosophy of Python?&lt;a class=&quot;headerlink&quot; href=&quot;#what-is-the-philosophy-of-python&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Soon, you’ll get hands-on with Python in the &lt;a href=&quot;#how-can-you-start-discovering-python&quot;&gt;sections following this one&lt;/a&gt;. First, however, you’ll explore why it’s worth getting to know Python better by going through some features that you can trace back to Python’s philosophy.&lt;/p&gt;
&lt;p&gt;Some ideas behind Java and Python are similar, but every programming language has its own unique characteristics. The philosophy of Python is captured as a collection of nineteen guiding principles, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Zen_of_Python&quot; title=&quot;Zen of Python - Wikipedia&quot;&gt;Zen of Python&lt;/a&gt;. Python hides a few Easter eggs, and one of them is the Zen of Python. Consider what happens when you issue the following command in the Python &lt;a href=&quot;https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop&quot;&gt;read–eval–print loop (REPL)&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;this&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;The Zen of Python, by Tim Peters&lt;/span&gt;

&lt;span class=&quot;go&quot;&gt;Beautiful is better than ugly.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Explicit is better than implicit.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Simple is better than complex.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Complex is better than complicated.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Flat is better than nested.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Sparse is better than dense.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Readability counts.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Special cases aren&#x27;t special enough to break the rules.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Although practicality beats purity.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Errors should never pass silently.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Unless explicitly silenced.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;In the face of ambiguity, refuse the temptation to guess.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;There should be one-- and preferably only one --obvious way to do it.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Although that way may not be obvious at first unless you&#x27;re Dutch.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Now is better than never.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Although never is often better than *right* now.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;If the implementation is hard to explain, it&#x27;s a bad idea.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;If the implementation is easy to explain, it may be a good idea.&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;Namespaces are one honking great idea -- let&#x27;s do more of those!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;While you shouldn’t take the statements above too literally, a few of these relate directly to the characteristics that you’ll walk through next. &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 Python read–eval–print loop is explained later on in this tutorial.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;By considering the guiding principles of the Zen of Python, you’ll get a good idea about how you can approach working with the language.&lt;/p&gt;
&lt;h3 id=&quot;python-code-is-readable&quot;&gt;Python Code Is Readable&lt;a class=&quot;headerlink&quot; href=&quot;#python-code-is-readable&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you come from a Java background and you look at a typical fragment of Python code, you might think that you’re looking at pseudo-code. There are a few factors that contribute to this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Indentation&lt;/strong&gt; is used for statement grouping. This makes code blocks shorter and promotes a uniform coding style. You’ll find more on this topic later on.&lt;/li&gt;
&lt;li&gt;A few built-in high-level data structures, combined with a modest set of operator symbols, make Python very &lt;strong&gt;expressive&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The choice of using &lt;a href=&quot;https://realpython.com/python-exceptions/&quot; title=&quot;Python Exceptions: An Introduction – Real Python&quot;&gt;exceptions&lt;/a&gt; as the primary way to deal with errors keeps the code clean.&lt;/li&gt;
&lt;li&gt;Python programmers prefer a coding style inspired by the concept that &lt;a href=&quot;https://docs.python.org/3/glossary.html#term-eafp&quot;&gt;it’s Easier to Ask for Forgiveness than Permission (EAFP)&lt;/a&gt; instead of the &lt;a href=&quot;https://docs.python.org/3/glossary.html#term-lbyl&quot;&gt;Look Before You Leap (LBYL)&lt;/a&gt; concept. This style puts emphasis on the normal, &lt;a href=&quot;https://en.wikipedia.org/wiki/Happy_path&quot; title=&quot;Happy path - Wikipedia&quot;&gt;happy path&lt;/a&gt; of your program, and you’ll figure out how any anomalies are handled afterward.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find a few examples of how this appears in practice during this tutorial, as well as in other linked resources.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/java-vs-python/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/java-vs-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 #89: Solving Advent of Code Puzzles With Python</title>
      <id>https://realpython.com/podcasts/rpp/89/</id>
      <link href="https://realpython.com/podcasts/rpp/89/"/>
      <updated>2021-12-10T12:00:00+00:00</updated>
      <summary>Are you ready to break open the first days of puzzles from the annual Advent of Code challenge? Advent of Code is an advent calendar of twenty-five programming puzzles published each December. Practicing solving puzzles is a great way to build your Python skills. This week on the show, we have previous guest and Real Python author Geir Arne Hjelle to discuss his recent article titled, &quot;Advent of Code: Solving Your Puzzles With Python.&quot;</summary>
      <content type="html">
        &lt;p&gt;Are you ready to break open the first days of puzzles from the annual Advent of Code challenge? Advent of Code is an advent calendar of twenty-five programming puzzles published each December. Practicing solving puzzles is a great way to build your Python skills. This week on the show, we have previous guest and Real Python author Geir Arne Hjelle to discuss his recent article titled, &quot;Advent of Code: Solving Your Puzzles With Python.&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>Binary, Bytes, and Bitwise Operators in Python</title>
      <id>https://realpython.com/courses/binary-bytes-bitwise-operators/</id>
      <link href="https://realpython.com/courses/binary-bytes-bitwise-operators/"/>
      <updated>2021-12-07T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll learn how to use Python&#x27;s bitwise operators to manipulate individual bits of data at the most granular level. With the help of hands-on examples, you&#x27;ll see how you can apply bitmasks and overload bitwise operators to control binary data in your code.</summary>
      <content type="html">
        &lt;p&gt;Computers store all kinds of information as a stream of binary digits called &lt;strong&gt;bits&lt;/strong&gt;. Whether you&amp;rsquo;re working with text, images, or videos, they all boil down to ones and zeros. Python&amp;rsquo;s &lt;strong&gt;bitwise operators&lt;/strong&gt; let you manipulate those individual bits of data at the most granular level.&lt;/p&gt;
&lt;p&gt;Python isolates you from the underlying bits with high-level abstractions. You&amp;rsquo;re more likely to find the &lt;a href=&quot;https://realpython.com/operator-function-overloading/&quot;&gt;overloaded&lt;/a&gt; flavors of bitwise operators in practice. But when you work with them in their original form, you&amp;rsquo;ll be surprised by their quirks!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read &lt;strong&gt;binary&lt;/strong&gt; numbers &lt;/li&gt;
&lt;li&gt;Perform &lt;strong&gt;bitwise math&lt;/strong&gt; and read truth tables&lt;/li&gt;
&lt;li&gt;Represent &lt;strong&gt;fixed and arbitrary precision itegers&lt;/strong&gt; in Python&lt;/li&gt;
&lt;li&gt;Perform &lt;strong&gt;bitwise operations&lt;/strong&gt; in Python&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;bitmasks&lt;/strong&gt; to pack information on a single byte&lt;/li&gt;
&lt;li&gt;Differentiate &lt;strong&gt;Big-Endian and Little-Endian&lt;/strong&gt; byte orders&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overload&lt;/strong&gt; Python bitwise operators in custom data types&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>Prettify Your Data Structures With Pretty Print in Python</title>
      <id>https://realpython.com/python-pretty-print/</id>
      <link href="https://realpython.com/python-pretty-print/"/>
      <updated>2021-12-06T14:00:00+00:00</updated>
      <summary>The pprint module, Python&#x27;s data pretty printer, is a useful part of the standard library. You can work with it for debugging data structures and increasing the readability of your output. In this tutorial, you&#x27;ll find that pprint is both straightforward to use and also highly customizable.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Dealing with data is essential for any Pythonista,
but sometimes that data is just not very pretty.
Computers don’t care about formatting,
but without good formatting, humans may find
something hard to read.
The output isn’t pretty when you use &lt;code&gt;print()&lt;/code&gt; on large dictionaries or
long lists—it’s efficient, but not pretty.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;pprint&lt;/code&gt; module in Python
is a utility module that you can use
to print data structures in a readable, &lt;strong&gt;pretty&lt;/strong&gt; way.
It’s a part of the standard library
that’s especially useful
for debugging code dealing with API requests,
large JSON files, and data in general.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By the end of this tutorial, you’ll:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand &lt;strong&gt;why&lt;/strong&gt; the &lt;code&gt;pprint&lt;/code&gt; module is &lt;strong&gt;necessary&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Learn how to use &lt;strong&gt;&lt;code&gt;pprint()&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;PrettyPrinter&lt;/code&gt;&lt;/strong&gt;, and their &lt;strong&gt;parameters&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Be able to create your own instance of &lt;strong&gt;&lt;code&gt;PrettyPrinter&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Save &lt;strong&gt;formatted string output&lt;/strong&gt; instead of printing it&lt;/li&gt;
&lt;li&gt;Print and recognize &lt;strong&gt;recursive data structures&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Along the way, you’ll also see an HTTP request to a public API
and &lt;a href=&quot;https://realpython.com/python-json/&quot;&gt;JSON parsing&lt;/a&gt; in action.&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-shortened&quot; data-focus=&quot;false&quot;&gt;Click here to get a Python Cheat Sheet&lt;/a&gt; and learn the basics of Python 3, like working with data types, dictionaries, lists, and Python functions.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;understanding-the-need-for-pythons-pretty-print&quot;&gt;Understanding the Need for Python’s Pretty Print&lt;a class=&quot;headerlink&quot; href=&quot;#understanding-the-need-for-pythons-pretty-print&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Python &lt;code&gt;pprint&lt;/code&gt; module is helpful in many situations.
It comes in handy when making API requests,
dealing with &lt;a href=&quot;https://realpython.com/python-json/&quot;&gt;JSON files&lt;/a&gt;,
or handling complicated and nested data.
You’ll probably find that using the normal
&lt;a href=&quot;https://realpython.com/python-print/&quot;&gt;&lt;code&gt;print()&lt;/code&gt;&lt;/a&gt; function
isn’t adequate to efficiently explore your data
and &lt;a href=&quot;https://realpython.com/python-debugging-pdb/&quot;&gt;debug&lt;/a&gt;
your application.
When you use &lt;code&gt;print()&lt;/code&gt; with &lt;a href=&quot;https://realpython.com/python-dicts/&quot;&gt;dictionaries&lt;/a&gt;
and &lt;a href=&quot;https://realpython.com/python-lists-tuples/&quot;&gt;lists&lt;/a&gt;,
the output doesn’t contain any newlines.&lt;/p&gt;
&lt;p&gt;Before you start exploring &lt;code&gt;pprint&lt;/code&gt;,
you’ll first use &lt;code&gt;urllib&lt;/code&gt; to make a request to get some data.
You’ll make a request to
&lt;a href=&quot;https://jsonplaceholder.typicode.com/&quot;&gt;{JSON} Placeholder&lt;/a&gt;
for some mock user information.
The first thing to do is to make the HTTP &lt;code&gt;GET&lt;/code&gt; request
and put the response into a dictionary:&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;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;urllib&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&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;response&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;urlopen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://jsonplaceholder.typicode.com/users&quot;&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;json_response&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;read&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;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;json&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;users&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;loads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;json_response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here, you make a basic &lt;code&gt;GET&lt;/code&gt; request
and then parse the response into a dictionary with &lt;code&gt;json.loads()&lt;/code&gt;.
With the dictionary now in a variable,
a common next step is to print the contents with &lt;code&gt;print()&lt;/code&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;nb&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;[{&#x27;id&#x27;: 1, &#x27;name&#x27;: &#x27;Leanne Graham&#x27;, &#x27;username&#x27;: &#x27;Bret&#x27;, &#x27;email&#x27;: &#x27;Sincere@april.biz&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Kulas Light&#x27;, &#x27;suite&#x27;: &#x27;Apt. 556&#x27;, &#x27;city&#x27;: &#x27;Gwenborough&#x27;, &#x27;zipcode&#x27;: &#x27;92998-3874&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-37.3159&#x27;, &#x27;lng&#x27;: &#x27;81.1496&#x27;}}, &#x27;phone&#x27;: &#x27;1-770-736-8031 x56442&#x27;, &#x27;website&#x27;: &#x27;hildegard.org&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Romaguera-Crona&#x27;, &#x27;catchPhrase&#x27;: &#x27;Multi-layered client-server neural-net&#x27;, &#x27;bs&#x27;: &#x27;harness real-time e-markets&#x27;}}, {&#x27;id&#x27;: 2, &#x27;name&#x27;: &#x27;Ervin Howell&#x27;, &#x27;username&#x27;: &#x27;Antonette&#x27;, &#x27;email&#x27;: &#x27;Shanna@melissa.tv&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Victor Plains&#x27;, &#x27;suite&#x27;: &#x27;Suite 879&#x27;, &#x27;city&#x27;: &#x27;Wisokyburgh&#x27;, &#x27;zipcode&#x27;: &#x27;90566-7771&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-43.9509&#x27;, &#x27;lng&#x27;: &#x27;-34.4618&#x27;}}, &#x27;phone&#x27;: &#x27;010-692-6593 x09125&#x27;, &#x27;website&#x27;: &#x27;anastasia.net&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Deckow-Crist&#x27;, &#x27;catchPhrase&#x27;: &#x27;Proactive didactic contingency&#x27;, &#x27;bs&#x27;: &#x27;synergize scalable supply-chains&#x27;}}, {&#x27;id&#x27;: 3, &#x27;name&#x27;: &#x27;Clementine Bauch&#x27;, &#x27;username&#x27;: &#x27;Samantha&#x27;, &#x27;email&#x27;: &#x27;Nathan@yesenia.net&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Douglas Extension&#x27;, &#x27;suite&#x27;: &#x27;Suite 847&#x27;, &#x27;city&#x27;: &#x27;McKenziehaven&#x27;, &#x27;zipcode&#x27;: &#x27;59590-4157&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-68.6102&#x27;, &#x27;lng&#x27;: &#x27;-47.0653&#x27;}}, &#x27;phone&#x27;: &#x27;1-463-123-4447&#x27;, &#x27;website&#x27;: &#x27;ramiro.info&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Romaguera-Jacobson&#x27;, &#x27;catchPhrase&#x27;: &#x27;Face to face bifurcated interface&#x27;, &#x27;bs&#x27;: &#x27;e-enable strategic applications&#x27;}}, {&#x27;id&#x27;: 4, &#x27;name&#x27;: &#x27;Patricia Lebsack&#x27;, &#x27;username&#x27;: &#x27;Karianne&#x27;, &#x27;email&#x27;: &#x27;Julianne.OConner@kory.org&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Hoeger Mall&#x27;, &#x27;suite&#x27;: &#x27;Apt. 692&#x27;, &#x27;city&#x27;: &#x27;South Elvis&#x27;, &#x27;zipcode&#x27;: &#x27;53919-4257&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;29.4572&#x27;, &#x27;lng&#x27;: &#x27;-164.2990&#x27;}}, &#x27;phone&#x27;: &#x27;493-170-9623 x156&#x27;, &#x27;website&#x27;: &#x27;kale.biz&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Robel-Corkery&#x27;, &#x27;catchPhrase&#x27;: &#x27;Multi-tiered zero tolerance productivity&#x27;, &#x27;bs&#x27;: &#x27;transition cutting-edge web services&#x27;}}, {&#x27;id&#x27;: 5, &#x27;name&#x27;: &#x27;Chelsey Dietrich&#x27;, &#x27;username&#x27;: &#x27;Kamren&#x27;, &#x27;email&#x27;: &#x27;Lucio_Hettinger@annie.ca&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Skiles Walks&#x27;, &#x27;suite&#x27;: &#x27;Suite 351&#x27;, &#x27;city&#x27;: &#x27;Roscoeview&#x27;, &#x27;zipcode&#x27;: &#x27;33263&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-31.8129&#x27;, &#x27;lng&#x27;: &#x27;62.5342&#x27;}}, &#x27;phone&#x27;: &#x27;(254)954-1289&#x27;, &#x27;website&#x27;: &#x27;demarco.info&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Keebler LLC&#x27;, &#x27;catchPhrase&#x27;: &#x27;User-centric fault-tolerant solution&#x27;, &#x27;bs&#x27;: &#x27;revolutionize end-to-end systems&#x27;}}, {&#x27;id&#x27;: 6, &#x27;name&#x27;: &#x27;Mrs. Dennis Schulist&#x27;, &#x27;username&#x27;: &#x27;Leopoldo_Corkery&#x27;, &#x27;email&#x27;: &#x27;Karley_Dach@jasper.info&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Norberto Crossing&#x27;, &#x27;suite&#x27;: &#x27;Apt. 950&#x27;, &#x27;city&#x27;: &#x27;South Christy&#x27;, &#x27;zipcode&#x27;: &#x27;23505-1337&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-71.4197&#x27;, &#x27;lng&#x27;: &#x27;71.7478&#x27;}}, &#x27;phone&#x27;: &#x27;1-477-935-8478 x6430&#x27;, &#x27;website&#x27;: &#x27;ola.org&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Considine-Lockman&#x27;, &#x27;catchPhrase&#x27;: &#x27;Synchronised bottom-line interface&#x27;, &#x27;bs&#x27;: &#x27;e-enable innovative applications&#x27;}}, {&#x27;id&#x27;: 7, &#x27;name&#x27;: &#x27;Kurtis Weissnat&#x27;, &#x27;username&#x27;: &#x27;Elwyn.Skiles&#x27;, &#x27;email&#x27;: &#x27;Telly.Hoeger@billy.biz&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Rex Trail&#x27;, &#x27;suite&#x27;: &#x27;Suite 280&#x27;, &#x27;city&#x27;: &#x27;Howemouth&#x27;, &#x27;zipcode&#x27;: &#x27;58804-1099&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;24.8918&#x27;, &#x27;lng&#x27;: &#x27;21.8984&#x27;}}, &#x27;phone&#x27;: &#x27;210.067.6132&#x27;, &#x27;website&#x27;: &#x27;elvis.io&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Johns Group&#x27;, &#x27;catchPhrase&#x27;: &#x27;Configurable multimedia task-force&#x27;, &#x27;bs&#x27;: &#x27;generate enterprise e-tailers&#x27;}}, {&#x27;id&#x27;: 8, &#x27;name&#x27;: &#x27;Nicholas Runolfsdottir V&#x27;, &#x27;username&#x27;: &#x27;Maxime_Nienow&#x27;, &#x27;email&#x27;: &#x27;Sherwood@rosamond.me&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Ellsworth Summit&#x27;, &#x27;suite&#x27;: &#x27;Suite 729&#x27;, &#x27;city&#x27;: &#x27;Aliyaview&#x27;, &#x27;zipcode&#x27;: &#x27;45169&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-14.3990&#x27;, &#x27;lng&#x27;: &#x27;-120.7677&#x27;}}, &#x27;phone&#x27;: &#x27;586.493.6943 x140&#x27;, &#x27;website&#x27;: &#x27;jacynthe.com&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Abernathy Group&#x27;, &#x27;catchPhrase&#x27;: &#x27;Implemented secondary concept&#x27;, &#x27;bs&#x27;: &#x27;e-enable extensible e-tailers&#x27;}}, {&#x27;id&#x27;: 9, &#x27;name&#x27;: &#x27;Glenna Reichert&#x27;, &#x27;username&#x27;: &#x27;Delphine&#x27;, &#x27;email&#x27;: &#x27;Chaim_McDermott@dana.io&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Dayna Park&#x27;, &#x27;suite&#x27;: &#x27;Suite 449&#x27;, &#x27;city&#x27;: &#x27;Bartholomebury&#x27;, &#x27;zipcode&#x27;: &#x27;76495-3109&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;24.6463&#x27;, &#x27;lng&#x27;: &#x27;-168.8889&#x27;}}, &#x27;phone&#x27;: &#x27;(775)976-6794 x41206&#x27;, &#x27;website&#x27;: &#x27;conrad.com&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Yost and Sons&#x27;, &#x27;catchPhrase&#x27;: &#x27;Switchable contextually-based project&#x27;, &#x27;bs&#x27;: &#x27;aggregate real-time technologies&#x27;}}, {&#x27;id&#x27;: 10, &#x27;name&#x27;: &#x27;Clementina DuBuque&#x27;, &#x27;username&#x27;: &#x27;Moriah.Stanton&#x27;, &#x27;email&#x27;: &#x27;Rey.Padberg@karina.biz&#x27;, &#x27;address&#x27;: {&#x27;street&#x27;: &#x27;Kattie Turnpike&#x27;, &#x27;suite&#x27;: &#x27;Suite 198&#x27;, &#x27;city&#x27;: &#x27;Lebsackbury&#x27;, &#x27;zipcode&#x27;: &#x27;31428-2261&#x27;, &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-38.2386&#x27;, &#x27;lng&#x27;: &#x27;57.2232&#x27;}}, &#x27;phone&#x27;: &#x27;024-648-3804&#x27;, &#x27;website&#x27;: &#x27;ambrose.net&#x27;, &#x27;company&#x27;: {&#x27;name&#x27;: &#x27;Hoeger LLC&#x27;, &#x27;catchPhrase&#x27;: &#x27;Centralized empowering task-force&#x27;, &#x27;bs&#x27;: &#x27;target end-to-end models&#x27;}}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Oh dear! One huge line with no newlines.
Depending on your console settings,
this might appear as one very long line.
Alternatively, your console output might have its word-wrapping mode on,
which is the most common situation.
Unfortunately, that doesn’t make the output much friendlier!&lt;/p&gt;
&lt;p&gt;If you look at the first and last characters,
you can see that this appears to be a list.
You might be tempted to start writing a loop
to print the items:&lt;/p&gt;
&lt;div class=&quot;highlight python&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This &lt;code&gt;for&lt;/code&gt; loop would print each object on a separate line,
but even then, each object takes up way more space than can fit on a single line.
Printing in this way does make things a bit better,
but it’s by no means ideal.
The above example is a relatively simple data structure,
but what would you do with a deeply nested dictionary 100 times the size?&lt;/p&gt;
&lt;p&gt;Sure, you could write a
function that uses &lt;a href=&quot;https://realpython.com/python-recursion/&quot;&gt;recursion&lt;/a&gt;
to find a way to print everything.
Unfortunately, you’ll likely run into some edge cases where this won’t work.
You might even find yourself writing a whole module of functions
just to get to grips with the structure of the data!&lt;/p&gt;
&lt;p&gt;Enter the &lt;code&gt;pprint&lt;/code&gt; module!&lt;/p&gt;
&lt;h2 id=&quot;working-with-pprint&quot;&gt;Working With &lt;code&gt;pprint&lt;/code&gt;&lt;a class=&quot;headerlink&quot; href=&quot;#working-with-pprint&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pprint&lt;/code&gt; is a Python module made to print data structures in a pretty way.
It has long been part of the Python standard library,
so installing it separately isn’t necessary.
All you need to do is to import its &lt;code&gt;pprint()&lt;/code&gt; function:&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;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pprint&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pprint&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then,
instead of going with the normal &lt;code&gt;print(users)&lt;/code&gt; approach as you did in the example above,
you can call your new favorite function to make the output pretty:&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;pprint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This function prints &lt;code&gt;users&lt;/code&gt;—but in a new-and-improved &lt;em&gt;pretty&lt;/em&gt; way:&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;pprint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;[{&#x27;address&#x27;: {&#x27;city&#x27;: &#x27;Gwenborough&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-37.3159&#x27;, &#x27;lng&#x27;: &#x27;81.1496&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;street&#x27;: &#x27;Kulas Light&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;suite&#x27;: &#x27;Apt. 556&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;zipcode&#x27;: &#x27;92998-3874&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;company&#x27;: {&#x27;bs&#x27;: &#x27;harness real-time e-markets&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;catchPhrase&#x27;: &#x27;Multi-layered client-server neural-net&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;name&#x27;: &#x27;Romaguera-Crona&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;email&#x27;: &#x27;Sincere@april.biz&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;id&#x27;: 1,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;name&#x27;: &#x27;Leanne Graham&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;phone&#x27;: &#x27;1-770-736-8031 x56442&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;username&#x27;: &#x27;Bret&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;website&#x27;: &#x27;hildegard.org&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt; {&#x27;address&#x27;: {&#x27;city&#x27;: &#x27;Wisokyburgh&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-43.9509&#x27;, &#x27;lng&#x27;: &#x27;-34.4618&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;street&#x27;: &#x27;Victor Plains&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;suite&#x27;: &#x27;Suite 879&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;zipcode&#x27;: &#x27;90566-7771&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;company&#x27;: {&#x27;bs&#x27;: &#x27;synergize scalable supply-chains&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;catchPhrase&#x27;: &#x27;Proactive didactic contingency&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;name&#x27;: &#x27;Deckow-Crist&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;email&#x27;: &#x27;Shanna@melissa.tv&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;id&#x27;: 2,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;name&#x27;: &#x27;Ervin Howell&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;phone&#x27;: &#x27;010-692-6593 x09125&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;username&#x27;: &#x27;Antonette&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;website&#x27;: &#x27;anastasia.net&#x27;},&lt;/span&gt;

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

&lt;span class=&quot;go&quot;&gt; {&#x27;address&#x27;: {&#x27;city&#x27;: &#x27;Lebsackbury&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;geo&#x27;: {&#x27;lat&#x27;: &#x27;-38.2386&#x27;, &#x27;lng&#x27;: &#x27;57.2232&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;street&#x27;: &#x27;Kattie Turnpike&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;suite&#x27;: &#x27;Suite 198&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;zipcode&#x27;: &#x27;31428-2261&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;company&#x27;: {&#x27;bs&#x27;: &#x27;target end-to-end models&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;catchPhrase&#x27;: &#x27;Centralized empowering task-force&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;              &#x27;name&#x27;: &#x27;Hoeger LLC&#x27;},&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;email&#x27;: &#x27;Rey.Padberg@karina.biz&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;id&#x27;: 10,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;name&#x27;: &#x27;Clementina DuBuque&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;phone&#x27;: &#x27;024-648-3804&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;username&#x27;: &#x27;Moriah.Stanton&#x27;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &#x27;website&#x27;: &#x27;ambrose.net&#x27;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-pretty-print/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-pretty-print/ »&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 #88: Discussing Type Hints, Protocols, and Ducks in Python</title>
      <id>https://realpython.com/podcasts/rpp/88/</id>
      <link href="https://realpython.com/podcasts/rpp/88/"/>
      <updated>2021-12-03T12:00:00+00:00</updated>
      <summary>There seem to be three kinds of Python developers: those unaware of type hints or have no opinion, ones that embrace them, and others who have an allergic reaction at the mention of them. Python is famously a dynamically typed language, but there are advantages to adding type hints to your code. This week on the show, we have Luciano Ramalho to discuss his recent talk titled, &quot;Type hints, protocols, and good sense.&quot;</summary>
      <content type="html">
        &lt;p&gt;There seem to be three kinds of Python developers: those unaware of type hints or have no opinion, ones that embrace them, and others who have an allergic reaction at the mention of them. Python is famously a dynamically typed language, but there are advantages to adding type hints to your code. This week on the show, we have Luciano Ramalho to discuss his recent talk titled, &quot;Type hints, protocols, and good sense.&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>Advent of Code: Solving Your Puzzles With Python</title>
      <id>https://realpython.com/python-advent-of-code/</id>
      <link href="https://realpython.com/python-advent-of-code/"/>
      <updated>2021-12-01T14:00:00+00:00</updated>
      <summary>Advent of Code is an online advent calendar that shares new programming puzzles each day from December 1st to the 25th. In this tutorial, you&#x27;ll learn why solving programming puzzles can be beneficial and how you can get started with Advent of Code using Python.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Advent of Code is an online Advent calendar where you’ll find new programming puzzles offered each day from December 1st to the 25th. While you can solve the puzzles at any time, the excitement when new puzzles unlock is really something special. You can participate in Advent of Code in any programming language—including Python!&lt;/p&gt;
&lt;p&gt;This tutorial will help you get started with solving puzzles and earning your first golden stars.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What an &lt;strong&gt;online Advent calendar&lt;/strong&gt; is&lt;/li&gt;
&lt;li&gt;How solving puzzles can &lt;strong&gt;advance your programming skills&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How you can &lt;strong&gt;participate&lt;/strong&gt; in the Advent of Code&lt;/li&gt;
&lt;li&gt;How you can &lt;strong&gt;organize your code and tests&lt;/strong&gt; when solving Advent of Code puzzles&lt;/li&gt;
&lt;li&gt;How &lt;strong&gt;test-driven development&lt;/strong&gt; can be used when solving puzzles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Advent of Code puzzles are designed to be approachable by anyone with an interest in problem-solving. You don’t need a heavy computer science background to participate. Instead, Advent of Code is a great arena for learning new skills and testing out new features of Python.&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-shortened&quot; data-focus=&quot;false&quot;&gt;Click here to get a Python Cheat Sheet&lt;/a&gt; and learn the basics of Python 3, like working with data types, dictionaries, lists, and Python functions.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;puzzling-in-programming&quot;&gt;Puzzling in Programming?&lt;a class=&quot;headerlink&quot; href=&quot;#puzzling-in-programming&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Working on puzzles may seem like a waste of your available programming time. After all, it seems like you’re not really producing anything useful and you’re not advancing your current projects forward.&lt;/p&gt;
&lt;p&gt;However, there are several advantages to taking some time off to practice with programming puzzles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Programming puzzles are usually better specified and more contained than your regular job tasks. They offer you the chance to &lt;strong&gt;practice logical thinking&lt;/strong&gt; on problems that are less complex than the ones you typically need to handle in your day job.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can often challenge yourself with several similar puzzles. This allows you to &lt;strong&gt;build procedural memory&lt;/strong&gt;, much like muscle memory, and get experience with structuring certain kinds of code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Puzzles are often designed with an eye towards a solution. They allow you to &lt;strong&gt;learn about and apply algorithms&lt;/strong&gt; that are tried and tested and are an important part of any programmer’s toolbox.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For some puzzle solutions, even the greatest supercomputers can be too slow if the algorithm is inefficient. You can &lt;strong&gt;analyze the performance&lt;/strong&gt; of your solution and get experience to help you understand when a straightforward method is fast enough and when a more optimized procedure is necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Most programming languages are well-suited for solving programming puzzles. This gives you a great opportunity to &lt;strong&gt;compare different programming languages&lt;/strong&gt; for different tasks. Puzzles are also a great way for getting to know a new programming language or trying out some of the &lt;a href=&quot;https://realpython.com/python310-new-features/&quot;&gt;newest features&lt;/a&gt; of your favorite language.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On top of all of this, challenging yourself with a programming puzzle is often pretty fun! When you add it all up, setting aside some time for puzzles can be very rewarding.&lt;/p&gt;
&lt;h2 id=&quot;exploring-options-for-solving-programming-puzzles-online&quot;&gt;Exploring Options for Solving Programming Puzzles Online&lt;a class=&quot;headerlink&quot; href=&quot;#exploring-options-for-solving-programming-puzzles-online&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Luckily, there are many websites where you can find programming puzzles and try to solve them. There are often differences in the kinds of problems these websites present, how you submit your solutions, and what kind of feedback and community the sites can offer. You should therefore take some time to look around and find those that appeal the most to you.&lt;/p&gt;
&lt;p&gt;In this tutorial, you’ll learn about &lt;a href=&quot;https://adventofcode.com/about&quot;&gt;Advent of Code&lt;/a&gt;, including what kind of puzzles you can find there and which tools and tricks you can employ to solve them. However, there are also other places where you can get started solving programming puzzles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://exercism.org/&quot;&gt;Exercism&lt;/a&gt; has learning tracks in many different programming languages. Each learning track offers small tutorials about different programming concepts, coding challenges, and mentors that give you feedback on your solutions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://projecteuler.net/&quot;&gt;Project Euler&lt;/a&gt; has been around for a long time. The site offers hundreds of puzzles, usually formulated as math problems. You can solve the problems in any programming language, and once you’ve solved a puzzle, you get access to a community thread where you can discuss your solution with others.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.codewars.com/&quot;&gt;Code Wars&lt;/a&gt; offers tons of coding challenges, which they call &lt;a href=&quot;https://en.wikipedia.org/wiki/Kata&quot;&gt;katas&lt;/a&gt;. You can solve puzzles in many different programming languages with their built-in editor and automated tests. Afterward, you can compare your solutions to others’ and discuss strategies in the forums.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.hackerrank.com/&quot;&gt;HackerRank&lt;/a&gt; has great features if you’re looking for a job. They offer certifications in many different skills, including problem-solving and Python programming, as well as a job board that lets you show off your puzzle-solving skills as part of your job applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many other sites available where you can practice your puzzle-solving skills. In the rest of this tutorial, you’ll focus on what Advent of Code has to offer.&lt;/p&gt;
&lt;h2 id=&quot;preparing-for-advent-of-code-25-fresh-puzzles-for-christmas&quot;&gt;Preparing for Advent of Code: 25 Fresh Puzzles for Christmas&lt;a class=&quot;headerlink&quot; href=&quot;#preparing-for-advent-of-code-25-fresh-puzzles-for-christmas&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It’s time for Advent of Code! It was started by &lt;a href=&quot;https://realpython.com/interview-eric-wastl/&quot;&gt;Eric Wastl&lt;/a&gt; in 2015. Since then, a new &lt;strong&gt;advent calendar&lt;/strong&gt; of twenty-five new programming puzzles has been published every December. The puzzles have gotten more and more popular over the years. &lt;a href=&quot;https://adventofcode.com/2020/stats&quot;&gt;More than 170,000&lt;/a&gt; people have solved at least one of the puzzles from 2020.&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; Traditionally, an &lt;a href=&quot;https://en.wikipedia.org/wiki/Advent_calendar&quot;&gt;Advent calendar&lt;/a&gt; is a calendar used to count the days of &lt;a href=&quot;https://en.wikipedia.org/wiki/Advent&quot;&gt;Advent&lt;/a&gt; while waiting for Christmas. Over the years, Advent calendars have become more commercial and have lost some of their Christian connection.&lt;/p&gt;
&lt;p&gt;Most Advent calendars start on December 1st and end on December 24th, Christmas Eve, or December 25th, Christmas Day. Nowadays, there are all kinds of Advent calendars available, including &lt;a href=&quot;https://www.lego.com/en-us/product/lego-harry-potter-advent-calendar-76390&quot;&gt;LEGO calendars&lt;/a&gt;, &lt;a href=&quot;https://perchs.dk/product/a-c-perchs-advent-calendar-2021-reds/?lang=en&quot;&gt;tea calendars&lt;/a&gt;, and &lt;a href=&quot;https://www.elfcosmetics.com/snow-much-fun-24-day-advent-calendar/70993.html&quot;&gt;cosmetics calendars&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In traditional Advent calendars, you open one door every day to reveal what’s inside. Advent of Code mimics this by letting you open one puzzle each day from December 1st to December 25th. For each puzzle you solve, you’ll earn golden stars that are yours to keep.&lt;/p&gt;
&lt;p&gt;In this section, you’ll get more familiar with Advent of Code and see a glimpse of your first puzzle. &lt;a href=&quot;#solving-advent-of-code-with-python&quot;&gt;Later&lt;/a&gt;, you’ll look at the details of how you can solve these puzzles and practice solving a few of the puzzles yourself.&lt;/p&gt;
&lt;h3 id=&quot;advent-of-code-puzzles&quot;&gt;Advent of Code Puzzles&lt;a class=&quot;headerlink&quot; href=&quot;#advent-of-code-puzzles&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Advent of Code is an online Advent calendar where a new puzzle is published every day from December 1st to December 25th. Each puzzle becomes available at midnight, &lt;a href=&quot;https://www.timeanddate.com/time/zones/et&quot;&gt;US Eastern Time&lt;/a&gt;. An Advent of Code puzzle has a few typical characteristics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each puzzle consists of two parts, but the second part isn’t revealed until you finish the first part.&lt;/li&gt;
&lt;li&gt;You’ll earn one golden star (⭐) for each part that you finish. This means you can earn two stars per day and fifty stars if you solve all the puzzles for one year.&lt;/li&gt;
&lt;li&gt;The puzzle is the same for everyone, but you need to solve it based on personalized input that you get from the Advent of Code site. This means that your answer to a puzzle will be different from someone else’s, even if you use the same code to calculate it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can participate in a &lt;a href=&quot;https://adventofcode.com/leaderboard&quot;&gt;global race&lt;/a&gt; to be the first to solve each puzzle. However, this is usually pretty crowded with highly skilled, competitive programmers. Advent of Code is probably going to be more fun if you use it as practice for yourself or if you challenge your friends and coworkers to a small, friendly competition.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-advent-of-code/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-advent-of-code/ »&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>Data Visualization Interfaces in Python With Dash</title>
      <id>https://realpython.com/courses/data-viz-with-dash/</id>
      <link href="https://realpython.com/courses/data-viz-with-dash/"/>
      <updated>2021-11-30T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll learn how to build a dashboard using Python and Dash. Dash is a framework for building data visualization interfaces. It helps data scientists build fully interactive web applications quickly.</summary>
      <content type="html">
        &lt;p&gt;In the past, creating analytical web applications was a task for seasoned developers that required knowledge of multiple programming languages and frameworks. That&amp;rsquo;s no longer the case. Nowadays, you can make data visualization interfaces using pure Python. One popular tool for this is &lt;a href=&quot;https://dash.plotly.com/introduction&quot;&gt;Dash&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dash gives data scientists the ability to showcase their results in interactive web applications. You don&amp;rsquo;t need to be an expert in &lt;a href=&quot;https://realpython.com/learning-paths/become-python-web-developer/&quot;&gt;web development&lt;/a&gt;. In an afternoon, you can build and deploy a Dash app to share with others.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;Dash application&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use Dash &lt;strong&gt;core components&lt;/strong&gt; and &lt;strong&gt;HTML components&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize the style&lt;/strong&gt; of your Dash application&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;callbacks&lt;/strong&gt; to build interactive applications&lt;/li&gt;
&lt;li&gt;Deploy your application on &lt;strong&gt;Heroku&lt;/strong&gt;&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>Building a Neural Network &amp; Making Predictions With Python AI</title>
      <id>https://realpython.com/courses/build-neural-network-python-ai/</id>
      <link href="https://realpython.com/courses/build-neural-network-python-ai/"/>
      <updated>2021-11-23T14:00:00+00:00</updated>
      <summary>In this step-by-step course, you&#x27;ll build a neural network from scratch as an introduction to the world of artificial intelligence (AI) in Python. You&#x27;ll learn how to train your neural network and make accurate predictions based on a given dataset.</summary>
      <content type="html">
        &lt;p&gt;If you&amp;rsquo;re just starting out in the artificial intelligence (AI) world, then Python is a great language to learn since most of the tools are built using it. &lt;strong&gt;Deep learning&lt;/strong&gt; is a technique used to make predictions using data, and it heavily relies on &lt;a href=&quot;https://en.wikipedia.org/wiki/Neural_network&quot;&gt;neural networks&lt;/a&gt;. This course will show you how to build a neural network from scratch.&lt;/p&gt;
&lt;p&gt;In a production setting, you would use a deep learning framework like &lt;a href=&quot;https://www.tensorflow.org/&quot;&gt;TensorFlow&lt;/a&gt; or &lt;a href=&quot;https://pytorch.org/&quot;&gt;PyTorch&lt;/a&gt; instead of building your own neural network. That said, having some knowledge of how neural networks work is helpful because you can use it to better architect your deep learning models.&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;What &lt;strong&gt;artificial intelligence&lt;/strong&gt; is&lt;/li&gt;
&lt;li&gt;How both &lt;strong&gt;machine learning&lt;/strong&gt; and &lt;strong&gt;deep learning&lt;/strong&gt; play a role in AI&lt;/li&gt;
&lt;li&gt;How a &lt;strong&gt;neural network&lt;/strong&gt; functions internally&lt;/li&gt;
&lt;li&gt;How to &lt;strong&gt;build a neural network&lt;/strong&gt; from scratch using Python&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 Community Interview With Eric Wastl</title>
      <id>https://realpython.com/interview-eric-wastl/</id>
      <link href="https://realpython.com/interview-eric-wastl/"/>
      <updated>2021-11-22T14:00:00+00:00</updated>
      <summary>This week, we&#x27;re joined by Eric Wastl, a Senior Architect at TCGPlayer and the founder of Advent of Code. Join us as we discuss the inception of AoC, how to avoid common pitfalls when solving code challenges in AoC, and what Eric gets up to in the &quot;3.8 seconds&quot; of free time he has per year.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;This week, we’re joined by &lt;a href=&quot;https://twitter.com/ericwastl&quot;&gt;Eric Wastl&lt;/a&gt;, a Senior Architect at &lt;a href=&quot;https://www.tcgplayer.com/&quot;&gt;TCGPlayer&lt;/a&gt; and the founder of &lt;a href=&quot;https://adventofcode.com/2021/about&quot;&gt;Advent of Code (AoC)&lt;/a&gt;. Join us as we discuss the inception of AoC, how to avoid common pitfalls when solving code challenges in AoC, and what Eric gets up to in the “3.8 seconds” of free time he has per year.&lt;/p&gt;
&lt;p&gt;If you’re looking forward to participating in Advent of Code after reading this interview, then you might be interested in a practical guide to &lt;a href=&quot;https://realpython.com/python-advent-of-code/&quot;&gt;puzzling with Advent of Code&lt;/a&gt;.&lt;/p&gt;
&lt;p class=&quot;mt-5&quot;&gt;&lt;strong&gt;Ricky:&lt;/strong&gt; &lt;em&gt;Thanks for joining me, Eric. You’re perhaps most well known for being the founder of Advent of Code, which we’ll talk about shortly, but you’re also the Senior Architect at TCGPlayer. Tell us a little about your day-to-day life there and what interesting problems you get to solve.&lt;/em&gt;&lt;/p&gt;
&lt;figure class=&quot;&quot;&gt;&lt;img loading=&quot;lazy&quot; class=&quot;img-fluid w-25 float-right ml-3 rounded-circle&quot; src=&quot;https://files.realpython.com/media/ewastl.7e1e921895c9.jpg&quot; width=&quot;3648&quot; height=&quot;3648&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/ewastl.7e1e921895c9.jpg&amp;amp;w=912&amp;amp;sig=51655666b0bb29dfb958aa0f33465fa0dfb467bd 912w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/ewastl.7e1e921895c9.jpg&amp;amp;w=1824&amp;amp;sig=2b2e3ebe2bde35e3177e17d7b9ffe05366713087 1824w, https://files.realpython.com/media/ewastl.7e1e921895c9.jpg 3648w&quot; sizes=&quot;75vw&quot; alt=&quot;Eric Wastl&quot; data-asset=&quot;4037&quot;&gt;&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Eric:&lt;/strong&gt; I’ve been with TCGPlayer for about a year. The work I do ranges from tricky algorithms, Kubernetes, vendor selection, and infrastructure scaling to training, architecture planning, technical candidate assessment, and running big internal hackathons.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/interview-eric-wastl/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/interview-eric-wastl/ »&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 #87: Building a Content Aggregator and Working With RSS in Python</title>
      <id>https://realpython.com/podcasts/rpp/87/</id>
      <link href="https://realpython.com/podcasts/rpp/87/"/>
      <updated>2021-11-19T12:00:00+00:00</updated>
      <summary>Have you wanted to work with RSS feeds in Python? Maybe you&#x27;re looking for a new project to build for your portfolio that uses Django, unit tests, and custom commands. This week on the show, we have Real Python author Ricky White to talk about his recent step-by-step project titled, &quot;Build a Content Aggregator in Python.&quot;</summary>
      <content type="html">
        &lt;p&gt;Have you wanted to work with RSS feeds in Python? Maybe you&#x27;re looking for a new project to build for your portfolio that uses Django, unit tests, and custom commands. This week on the show, we have Real Python author Ricky White to talk about his recent step-by-step project titled, &quot;Build a Content Aggregator in Python.&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>Python News: What&#x27;s New From October 2021?</title>
      <id>https://realpython.com/python-news-october-2021/</id>
      <link href="https://realpython.com/python-news-october-2021/"/>
      <updated>2021-11-17T14:00:00+00:00</updated>
      <summary>The Python community gave a warm welcome to Python 3.10 in October 2021. In this article, you&#x27;ll catch up on some big events that happened this past month, including Python being named TIOBE&#x27;s most popular programming language.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;A culmination of great work done by volunteers worldwide, the release of &lt;strong&gt;Python 3.10&lt;/strong&gt; dominated the Python community’s news cycle in &lt;strong&gt;October 2021&lt;/strong&gt;. At the same time that this release was making new features available, Python got recognition as the top programming language for the month in the &lt;strong&gt;TIOBE Programming Community index&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There are also some new opportunities for you to support the community by participating in the &lt;strong&gt;Python Developer Survey&lt;/strong&gt; and answering the PyCon US 2022 &lt;strong&gt;Call for Proposals&lt;/strong&gt;.&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;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-shortened&quot; data-focus=&quot;false&quot;&gt;Click here to get a Python Cheat Sheet&lt;/a&gt; and learn the basics of Python 3, like working with data types, dictionaries, lists, and Python functions.&lt;/p&gt;&lt;/div&gt;

&lt;h2 id=&quot;the-python-310-release&quot;&gt;The Python 3.10 Release&lt;a class=&quot;headerlink&quot; href=&quot;#the-python-310-release&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;New versions of Python are now released &lt;a href=&quot;https://realpython.com/python39-new-features/#when-is-the-next-version-of-python-coming&quot;&gt;annually&lt;/a&gt;. We can look forward to the core developers sharing a lovely goody bag with the rest of us &lt;strong&gt;every October&lt;/strong&gt;. With Python 3.10, which came out of beta on October 4th, everyone had something exciting to anticipate.&lt;/p&gt;
&lt;p&gt;Each release of Python has a release manager who’s responsible for coordinating all changes and for building and preparing the files for distribution. The release manager for Python 3.10 and 3.11 is &lt;a href=&quot;https://twitter.com/pyblogsal&quot;&gt;Pablo Galindo Salgado&lt;/a&gt;. In a first for Python, he built and released Python &lt;strong&gt;live on YouTube&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;python-310-highlights&quot;&gt;Python 3.10 Highlights&lt;a class=&quot;headerlink&quot; href=&quot;#python-310-highlights&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The new release includes lots of improvements to the language. Among our favorites are improved &lt;strong&gt;error messages&lt;/strong&gt;, simplified syntax for &lt;strong&gt;type unions&lt;/strong&gt;, and &lt;strong&gt;structural pattern matching&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://realpython.com/python310-new-features/#better-error-messages&quot;&gt;Improved error messages&lt;/a&gt; will make your life easier, whether you’re a new Python developer or an experienced one. In particular, the feedback that you get when your code &lt;a href=&quot;https://realpython.com/invalid-syntax-python/&quot;&gt;isn’t valid Python&lt;/a&gt; is more pointed and actionable in Python 3.10 than in previous versions. As an example, consider the following code, where there’s no closing bracket at the end of the first line:&lt;/p&gt;
&lt;div class=&quot;highlight python&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;news&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;errors&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;types&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;patterns&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;news&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In Python 3.9 and earlier, you’ll see the following if you try to run this code:&lt;/p&gt;
&lt;div class=&quot;highlight pytb&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;  File &lt;span class=&quot;nb&quot;&gt;&quot;errors.py&quot;&lt;/span&gt;, line &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;news&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;
&lt;span class=&quot;gr&quot;&gt;SyntaxError&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;invalid syntax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-news-october-2021/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-news-october-2021/ »&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 Lists With Python&#x27;s .append()</title>
      <id>https://realpython.com/courses/building-lists-with-python-append/</id>
      <link href="https://realpython.com/courses/building-lists-with-python-append/"/>
      <updated>2021-11-16T14:00:00+00:00</updated>
      <summary>In this step-by-step course, you&#x27;ll learn how Python&#x27;s .append() works and how to use it for adding items to your list in place. You&#x27;ll also learn how to code your own stacks and queues using .append() and .pop().</summary>
      <content type="html">
        &lt;p&gt;Adding items to a list is a fairly common task in Python, so the language provides a bunch of methods and operators that can help you out with this operation. One of those methods is &lt;strong&gt;&lt;code&gt;.append()&lt;/code&gt;&lt;/strong&gt;. With &lt;code&gt;.append()&lt;/code&gt;, you can add items to the end of an existing list object. You can also use &lt;code&gt;.append()&lt;/code&gt; in a &lt;a href=&quot;https://realpython.com/python-for-loop/&quot;&gt;&lt;code&gt;for&lt;/code&gt; loop&lt;/a&gt; to populate lists programmatically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Work with &lt;strong&gt;&lt;code&gt;.append()&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Populate lists using &lt;code&gt;.append()&lt;/code&gt; and a &lt;strong&gt;&lt;code&gt;for&lt;/code&gt; loop&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;.append()&lt;/code&gt; with &lt;strong&gt;list comprehensions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Work with &lt;code&gt;.append()&lt;/code&gt; in &lt;strong&gt;&lt;code&gt;array.array()&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;collections.deque()&lt;/code&gt;&lt;/strong&gt;&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>Securely Deploy a Django App With Gunicorn, Nginx, &amp; HTTPS</title>
      <id>https://realpython.com/django-nginx-gunicorn/</id>
      <link href="https://realpython.com/django-nginx-gunicorn/"/>
      <updated>2021-11-15T14:00:00+00:00</updated>
      <summary>Ready to take your Django app beyond development? Learn how to securely deploy your Django web app in production over HTTPS with Gunicorn and Nginx. Along the way, you&#x27;ll explore how HTTP headers can fortify your app&#x27;s security.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Taking a &lt;strong&gt;Django&lt;/strong&gt; app from development to production is a demanding but rewarding process. This tutorial will take you through that process step by step, providing an in-depth guide that starts at square one with a no-frills Django application and adds in &lt;strong&gt;Gunicorn&lt;/strong&gt;, &lt;strong&gt;Nginx&lt;/strong&gt;, &lt;strong&gt;domain registration&lt;/strong&gt;, and security-focused &lt;strong&gt;HTTP headers&lt;/strong&gt;. After going over this tutorial, you’ll be better equipped to take your Django app into production and serve it to the world.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How you can take your Django app &lt;strong&gt;from development to production&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How you can &lt;strong&gt;host your app&lt;/strong&gt; on a real-world public domain&lt;/li&gt;
&lt;li&gt;How to introduce &lt;strong&gt;Gunicorn&lt;/strong&gt; and &lt;strong&gt;Nginx&lt;/strong&gt; into the request and response chain&lt;/li&gt;
&lt;li&gt;How &lt;strong&gt;HTTP headers&lt;/strong&gt; can fortify your site’s HTTPS security&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To make the most out of this tutorial, you should have an introductory-level &lt;a href=&quot;https://realpython.com/learning-paths/python3-introduction/&quot;&gt;understanding of Python&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/tutorials/django/&quot;&gt;Django&lt;/a&gt;, and the high-level mechanics of HTTP requests.&lt;/p&gt;
&lt;p&gt;You can download the Django project used in this tutorial by following the link below:&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Get Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/django-nginx-gunicorn-project-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-django-nginx-gunicorn-project-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get the companion Django project&lt;/a&gt; used in this tutorial.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;starting-with-django-and-wsgiserver&quot;&gt;Starting With Django and WSGIServer&lt;a class=&quot;headerlink&quot; href=&quot;#starting-with-django-and-wsgiserver&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You’ll use &lt;a href=&quot;https://realpython.com/tutorials/django/&quot;&gt;Django&lt;/a&gt; as the framework at the core of your web app, using it for URL routing, HTML rendering, authentication, administration, and backend logic. In this tutorial, you’ll supplement the Django component with two other layers, &lt;a href=&quot;https://gunicorn.org/&quot;&gt;Gunicorn&lt;/a&gt; and &lt;a href=&quot;https://nginx.org/&quot;&gt;Nginx&lt;/a&gt;, in order to serve the application scalably. But before you do that, you’ll need to set up your environment and get the Django application itself up and running.&lt;/p&gt;
&lt;h3 id=&quot;setting-up-a-cloud-virtual-machine-vm&quot;&gt;Setting Up a Cloud Virtual Machine (VM)&lt;a class=&quot;headerlink&quot; href=&quot;#setting-up-a-cloud-virtual-machine-vm&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First, you’ll need to launch and set up a &lt;a href=&quot;https://en.wikipedia.org/wiki/Virtual_machine&quot;&gt;virtual machine (VM)&lt;/a&gt; on which the web application will run. You should familiarize yourself with at least one &lt;a href=&quot;https://www.redhat.com/en/topics/cloud-computing/what-is-iaas&quot;&gt;infrastructure as a service (IaaS)&lt;/a&gt; cloud service provider to provision a VM. This section will walk you through the process at a high level but won’t cover every step in detail.&lt;/p&gt;
&lt;p&gt;Using a VM to serve a web app is an example of IaaS, where you have full control over the server software. Other options besides IaaS do exist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://realpython.com/aws-chalice-serverless-python/&quot;&gt;serverless&lt;/a&gt; architecture allows you to compose the Django app only and let a separate framework or cloud provider handle the infrastructure side.&lt;/li&gt;
&lt;li&gt;A &lt;a href=&quot;https://www.ibm.com/cloud/learn/containerization&quot;&gt;containerized&lt;/a&gt; approach allows multiple apps to run independently on the same host operating system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For this tutorial, though, you’ll use the tried-and-true route of serving Nginx and Django directly on IaaS.&lt;/p&gt;
&lt;p&gt;Two popular options for virtual machines are &lt;a href=&quot;https://azure.microsoft.com/en-us/services/virtual-machines/&quot;&gt;Azure VMs&lt;/a&gt; and &lt;a href=&quot;https://aws.amazon.com/ec2/&quot;&gt;Amazon EC2&lt;/a&gt;. To get more help with launching the instance, you should refer to the documentation for your cloud provider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For Azure VMs&lt;/strong&gt;, follow their &lt;a href=&quot;https://docs.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-portal&quot;&gt;quickstart guide for creating a Linux virtual machine in the Azure portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For Amazon EC2&lt;/strong&gt;, learn how to &lt;a href=&quot;https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html&quot;&gt;get set up&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Django project and everything else involved in this tutorial sit on a &lt;em&gt;t2.micro&lt;/em&gt; Amazon EC2 instance running Ubuntu Server 20.04.&lt;/p&gt;
&lt;p&gt;One important component of VM setup is &lt;strong&gt;inbound security rules&lt;/strong&gt;. These are fine-grained rules that control the inbound traffic to your instance. Create the following inbound security rules for initial development, which you’ll modify in production:&lt;/p&gt;
&lt;div class=&quot;table-responsive&quot;&gt;
&lt;table class=&quot;table table-hover&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Port Range&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;8000&lt;/td&gt;
&lt;td&gt;&lt;code&gt;my-laptop-ip-address/32&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;All&lt;/td&gt;
&lt;td&gt;All&lt;/td&gt;
&lt;td&gt;&lt;code&gt;security-group-id&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;SSH&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;code&gt;my-laptop-ip-address/32&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Now you’ll walk through these one at a time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Rule 1&lt;/strong&gt; allows TCP over port 8000 from your personal computer’s IPv4 address, allowing you to send requests to your Django app when you serve it in development over port 8000.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rule 2&lt;/strong&gt; allows inbound traffic from network interfaces and instances that are assigned to the same security group, using the security group ID as the source. This is a rule included in the default AWS security group that you should tie to your instance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rule 3&lt;/strong&gt; allows you to access your VM via SSH from your personal computer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You’ll also want to add an &lt;strong&gt;outbound rule&lt;/strong&gt; to allow outbound traffic to do things such as install packages:&lt;/p&gt;
&lt;div class=&quot;table-responsive&quot;&gt;
&lt;table class=&quot;table table-hover&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Port Range&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;All&lt;/td&gt;
&lt;td&gt;All&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.0.0.0/0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Tying that all together, your initial AWS security rule set can consist of three inbound rules and one outbound rule. These, in turn, come from three separate security groups—the default group, a group for HTTP access, and a group for SSH access:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/django-sg-initial.ceedc13b07ae.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img loading=&quot;lazy&quot; class=&quot;img-fluid mx-auto d-block border w-75&quot; src=&quot;https://files.realpython.com/media/django-sg-initial.ceedc13b07ae.jpg&quot; width=&quot;507&quot; height=&quot;436&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/django-sg-initial.ceedc13b07ae.jpg&amp;amp;w=126&amp;amp;sig=58fec06434e65a385da7167e6c372f43a5372cb2 126w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/django-sg-initial.ceedc13b07ae.jpg&amp;amp;w=253&amp;amp;sig=965ea00032c61b34e36811a780c3d2db76f00ac4 253w, https://files.realpython.com/media/django-sg-initial.ceedc13b07ae.jpg 507w&quot; sizes=&quot;75vw&quot; alt=&quot;Initial security ruleset for Django app&quot; data-asset=&quot;3997&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;figure-caption text-center&quot;&gt;Initial security group rule set&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;From your local computer, you can then &lt;a href=&quot;https://www.ssh.com/ssh/&quot;&gt;SSH&lt;/a&gt; into the instance:&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/django-nginx-gunicorn/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/django-nginx-gunicorn/ »&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 #86: The Legacy of OLPC and Charismatic Pitfalls in Teaching Programming</title>
      <id>https://realpython.com/podcasts/rpp/86/</id>
      <link href="https://realpython.com/podcasts/rpp/86/"/>
      <updated>2021-11-12T12:00:00+00:00</updated>
      <summary>Do you remember the One Laptop Per Child program? What went wrong, and what can we learn from the program&#x27;s failure? What are the potential pitfalls of charismatic technology, and how can we avoid them when introducing students to programming? This week on the show, former guest Al Sweigart and author Morgan Ames are here to talk about her book &quot;The Charisma Machine - The Life, Death, and Legacy of One Laptop per Child.&quot;</summary>
      <content type="html">
        &lt;p&gt;Do you remember the One Laptop Per Child program? What went wrong, and what can we learn from the program&#x27;s failure? What are the potential pitfalls of charismatic technology, and how can we avoid them when introducing students to programming? This week on the show, former guest Al Sweigart and author Morgan Ames are here to talk about her book &quot;The Charisma Machine - The Life, Death, and Legacy of One Laptop per Child.&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>Advanced Visual Studio Code for Python Developers</title>
      <id>https://realpython.com/advanced-visual-studio-code-python/</id>
      <link href="https://realpython.com/advanced-visual-studio-code-python/"/>
      <updated>2021-11-10T14:00:00+00:00</updated>
      <summary>In this tutorial, you&#x27;ll learn how you can configure, extend, and optimize Visual Studio Code for a more effective and productive Python development environment. By digging into this customizable code editor and IDE, you&#x27;ll put yourself on track to be a VS Code power user.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Visual Studio Code, or &lt;strong&gt;VS Code&lt;/strong&gt; for short, is a free and open source code editor by Microsoft. You can use VS Code as a &lt;strong&gt;lightweight code editor&lt;/strong&gt; to make quick changes, or you can configure it as an &lt;a href=&quot;https://en.wikipedia.org/wiki/Integrated_development_environment&quot;&gt;integrated development environment (IDE)&lt;/a&gt; through the use of &lt;strong&gt;third-party extensions&lt;/strong&gt;. In this tutorial, you’re going to look at how to get the most out of VS Code for Python development.&lt;/p&gt;
&lt;p&gt;During this tutorial, you’ll learn how you can &lt;strong&gt;configure&lt;/strong&gt;, &lt;strong&gt;extend&lt;/strong&gt;, and &lt;strong&gt;optimize&lt;/strong&gt; VS Code for a more effective and productive Python development environment. After finishing this tutorial, you’ll have a variety of tools to help you be more productive using VS Code. It can be a powerful tool for rapid Python development.&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;Customize your &lt;strong&gt;user interface&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Run and monitor &lt;strong&gt;Python tests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lint&lt;/strong&gt; and &lt;strong&gt;format&lt;/strong&gt; your code automatically&lt;/li&gt;
&lt;li&gt;Leverage &lt;strong&gt;type annotations&lt;/strong&gt; and &lt;strong&gt;Pylance&lt;/strong&gt; to write code faster with higher accuracy&lt;/li&gt;
&lt;li&gt;Configure and utilize both &lt;strong&gt;local and remote debugging&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Set up &lt;strong&gt;data science tools&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As usual, this tutorial is full of links, tips, and tricks to help you on your way.&lt;/p&gt;
&lt;p&gt;If you haven’t already installed &lt;a href=&quot;https://code.visualstudio.com/download&quot;&gt;Visual Studio Code&lt;/a&gt; or the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-python.python&quot;&gt;Python extension&lt;/a&gt;, you’ll need both for this tutorial. If you’re just getting started with VS Code, you might want to check out Jon Fincher’s tutorial on &lt;a href=&quot;https://realpython.com/python-development-visual-studio-code/&quot;&gt;Python development in Visual Studio Code&lt;/a&gt; before continuing with this one.&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;mastering-the-visual-studio-code-user-interface&quot;&gt;Mastering the Visual Studio Code User Interface&lt;a class=&quot;headerlink&quot; href=&quot;#mastering-the-visual-studio-code-user-interface&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By default, VS Code’s user interface is designed for everyone—whether you’re writing C++, doing front-end development with JavaScript and CSS, or using data science tools like Jupyter Notebooks. In this first section, you’ll explore how to tailor VS Code to support how you work.&lt;/p&gt;
&lt;h3 id=&quot;keyboard-shortcuts&quot;&gt;Keyboard Shortcuts&lt;a class=&quot;headerlink&quot; href=&quot;#keyboard-shortcuts&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For almost everything that you do in VS Code, you can do it directly from the keyboard. You can map all activities in VS Code, whether they’re built-in or provided via extensions, to a keyboard shortcut.&lt;/p&gt;
&lt;p&gt;A small subset of built-in commands is already mapped in &lt;a href=&quot;https://code.visualstudio.com/docs/getstarted/keybindings&quot;&gt;Keyboard Shortcuts&lt;/a&gt;. If you want to learn these default shortcuts, print out the PDF for &lt;a href=&quot;https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf&quot;&gt;Windows&lt;/a&gt;, &lt;a href=&quot;https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf&quot;&gt;macOS&lt;/a&gt;, or &lt;a href=&quot;https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf&quot;&gt;Linux&lt;/a&gt; and pin it next to your monitor.&lt;/p&gt;
&lt;p&gt;As a Python developer, a lot of the commands you’ll use in Visual Studio Code are provided from extensions, similar to the Python extension that you already installed. These don’t come with shortcuts mapped by default, but you can configure them using VS Code’s &lt;a href=&quot;https://code.visualstudio.com/docs/getstarted/keybindings#_keyboard-shortcuts-editor&quot;&gt;Keyboard Shortcuts editor&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;using-the-keyboard-shortcuts-editor&quot;&gt;Using the Keyboard Shortcuts Editor&lt;a class=&quot;headerlink&quot; href=&quot;#using-the-keyboard-shortcuts-editor&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Open the Keyboard Shortcuts editor by going to  &lt;em&gt;File → Preferences → Keyboard Shortcuts&lt;/em&gt; or &lt;em&gt;Code → Preferences → Keyboard Shortcuts&lt;/em&gt; on macOS:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/vscode-keyboard-shortcuts.687df9891a26.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/vscode-keyboard-shortcuts.687df9891a26.png&quot; width=&quot;3130&quot; height=&quot;1736&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/vscode-keyboard-shortcuts.687df9891a26.png&amp;amp;w=782&amp;amp;sig=a1e8417ec61a7de6eba529568d87f9f7fd1f17cf 782w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/vscode-keyboard-shortcuts.687df9891a26.png&amp;amp;w=1565&amp;amp;sig=185c3e856d39e59775327e58d7496dc1b09211aa 1565w, https://files.realpython.com/media/vscode-keyboard-shortcuts.687df9891a26.png 3130w&quot; sizes=&quot;75vw&quot; alt=&quot;VS Code Keyboard Shortcut Window&quot; data-asset=&quot;3672&quot;&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p&gt;In this editor, you can see a list of all the existing shortcuts along with their details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Command&lt;/em&gt;: The command or action to be run&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Keybinding&lt;/em&gt;: The sequence of keys to press to trigger this command, with a blank indicating that there’s no mapping&lt;/li&gt;
&lt;li&gt;&lt;em&gt;When&lt;/em&gt;: Conditions that need to be met for this keybinding to work, with a minus sign (&lt;code&gt;-&lt;/code&gt;) indicating that there are no requirements&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Source&lt;/em&gt;: Where this binding was configured, either defined by &lt;em&gt;Default&lt;/em&gt;, &lt;em&gt;User&lt;/em&gt;, or &lt;em&gt;Extension&lt;/em&gt;, the last one indicating that you provided it by installing a keymap extension&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To override an existing binding, right-click on the existing action and click &lt;em&gt;Change Keybinding&lt;/em&gt;. To assign a keybinding to a command that has no binding, double-click on it. If the key sequence you press is already assigned to something else, VS Code will warn you with a link to see which commands are mapped to this keybinding.&lt;/p&gt;
&lt;p&gt;As an example, type &lt;code&gt;python create terminal&lt;/code&gt; in the search box at the top. If no results come up, make sure you have the Python extension installed. Press &lt;span class=&quot;keys&quot;&gt;&lt;kbd class=&quot;key-enter&quot;&gt;Enter&lt;/kbd&gt;&lt;/span&gt; to assign a keybinding, like &lt;span class=&quot;keys&quot;&gt;&lt;kbd class=&quot;key-control&quot;&gt;Ctrl&lt;/kbd&gt;&lt;span&gt;+&lt;/span&gt;&lt;kbd class=&quot;key-alt&quot;&gt;Alt&lt;/kbd&gt;&lt;span&gt;+&lt;/span&gt;&lt;kbd class=&quot;key-t&quot;&gt;T&lt;/kbd&gt;&lt;/span&gt;, and then hit &lt;span class=&quot;keys&quot;&gt;&lt;kbd class=&quot;key-enter&quot;&gt;Enter&lt;/kbd&gt;&lt;/span&gt; again.&lt;/p&gt;
&lt;p&gt;To assign that shortcut to only work when you’re editing Python code, right-click on the shortcut and select &lt;em&gt;Change When Expression&lt;/em&gt;. Enter the expression &lt;code&gt;editorLangId == &#x27;python&#x27;&lt;/code&gt;:&lt;/p&gt;
&lt;figure class=&quot;js-lightbox&quot;&gt;&lt;a href=&quot;https://files.realpython.com/media/vscode-screenshot-2.c1a3c78e75e1.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/vscode-screenshot-2.c1a3c78e75e1.png&quot; width=&quot;2558&quot; height=&quot;742&quot; srcset=&quot;https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/vscode-screenshot-2.c1a3c78e75e1.png&amp;amp;w=639&amp;amp;sig=802a6d799cab73696ebccf67a2df67a772d24e57 639w, https://robocrop.realpython.net/?url=https%3A//files.realpython.com/media/vscode-screenshot-2.c1a3c78e75e1.png&amp;amp;w=1279&amp;amp;sig=6826ae50bf45a8fddd5a8018d9af0c2dfa2ca872 1279w, https://files.realpython.com/media/vscode-screenshot-2.c1a3c78e75e1.png 2558w&quot; sizes=&quot;75vw&quot; alt=&quot;Assigned keyboard shortcut&quot; data-asset=&quot;3673&quot;&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p&gt;There are &lt;a href=&quot;https://code.visualstudio.com/api/references/when-clause-contexts&quot;&gt;more conditional operators&lt;/a&gt; to choose from if you need something more specific. Here are some examples to get you started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;resourceFilename == &#x27;__init__.py&#x27;&lt;/code&gt;&lt;/strong&gt; when the file you’re editing is &lt;code&gt;__init__.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;editorLangId == &#x27;python&#x27;&lt;/code&gt;&lt;/strong&gt; when working with Python. If needed, you can also replace &lt;code&gt;&#x27;python&#x27;&lt;/code&gt; with another &lt;a href=&quot;https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers&quot;&gt;language identifier&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;editorHasSelection&lt;/code&gt;&lt;/strong&gt; for when you’re inside the editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you’ve configured this extension, open up a Python file in the editor to try it out by pressing your newly assigned keyboard shortcut &lt;span class=&quot;keys&quot;&gt;&lt;kbd class=&quot;key-control&quot;&gt;Ctrl&lt;/kbd&gt;&lt;span&gt;+&lt;/span&gt;&lt;kbd class=&quot;key-alt&quot;&gt;Alt&lt;/kbd&gt;&lt;span&gt;+&lt;/span&gt;&lt;kbd class=&quot;key-t&quot;&gt;T&lt;/kbd&gt;&lt;/span&gt; to open up a Python terminal.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/advanced-visual-studio-code-python/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/advanced-visual-studio-code-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>Using plt.scatter() to Visualize Data in Python</title>
      <id>https://realpython.com/courses/using-pltscatter-visualize-data-python/</id>
      <link href="https://realpython.com/courses/using-pltscatter-visualize-data-python/"/>
      <updated>2021-11-09T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll learn how to create scatter plots in Python, which are a key part of many data visualization applications. You&#x27;ll get an introduction to plt.scatter(), a versatile function in the Matplotlib module for creating scatter plots.</summary>
      <content type="html">
        &lt;p&gt;An important part of working with data is being able to &lt;strong&gt;visualize&lt;/strong&gt; it. Python has several third-party modules you can use for data visualization. One of the most popular modules is &lt;strong&gt;Matplotlib&lt;/strong&gt; and its submodule &lt;strong&gt;pyplot&lt;/strong&gt;, often referred to using the alias &lt;strong&gt;&lt;code&gt;plt&lt;/code&gt;&lt;/strong&gt;. Matplotlib provides a very versatile tool called &lt;strong&gt;&lt;code&gt;plt.scatter()&lt;/code&gt;&lt;/strong&gt; that allows you to create both basic and more complex scatter plots.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;scatter plot&lt;/strong&gt; using &lt;strong&gt;&lt;code&gt;plt.scatter()&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Use the required and optional &lt;strong&gt;input parameters&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Customize scatter plots for &lt;strong&gt;basic and more advanced plots&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Represent &lt;strong&gt;more than two dimensions&lt;/strong&gt; on a scatter plot&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 Command-Line To-Do App With Python and Typer</title>
      <id>https://realpython.com/python-typer-cli/</id>
      <link href="https://realpython.com/python-typer-cli/"/>
      <updated>2021-11-08T14:00:00+00:00</updated>
      <summary>In this step-by-step project, you&#x27;ll create a to-do application for your command line using Python and Typer. While you build this app, you&#x27;ll learn the basics of Typer, a modern and versatile library for building command-line interfaces (CLI).</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;Building an application to manage your &lt;strong&gt;to-do list&lt;/strong&gt; can be an interesting project when you’re learning a new programming language or trying to take your skills to the next level. In this tutorial, you’ll build a functional to-do application for the command line using Python and &lt;a href=&quot;https://typer.tiangolo.com/&quot;&gt;Typer&lt;/a&gt;, which is a relatively young library for creating powerful command-line interface (CLI) applications in almost no time.&lt;/p&gt;
&lt;p&gt;With a project like this, you’ll apply a wide set of core programming skills while building a real-world application with real features and requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build a functional &lt;strong&gt;to-do application&lt;/strong&gt; with a &lt;strong&gt;Typer CLI&lt;/strong&gt; in Python&lt;/li&gt;
&lt;li&gt;Use Typer to add &lt;strong&gt;commands&lt;/strong&gt;, &lt;strong&gt;arguments&lt;/strong&gt;, and &lt;strong&gt;options&lt;/strong&gt; to your to-do app&lt;/li&gt;
&lt;li&gt;Test your Python to-do application with Typer’s &lt;strong&gt;&lt;code&gt;CliRunner&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;pytest&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, you’ll practice your skills related to processing &lt;a href=&quot;https://realpython.com/python-json/&quot;&gt;JSON files&lt;/a&gt; by using Python’s &lt;code&gt;json&lt;/code&gt; module and managing &lt;a href=&quot;https://en.wikipedia.org/wiki/Configuration_file&quot;&gt;configuration files&lt;/a&gt; with Python’s &lt;code&gt;configparser&lt;/code&gt; module. With this knowledge, you’ll be ready to start creating CLI applications right away.&lt;/p&gt;
&lt;p&gt;You can download the entire code and all the additional resources for this to-do CLI application by clicking the link below and going to the &lt;code&gt;source_code_final/&lt;/code&gt; directory:&lt;/p&gt;
&lt;div class=&quot;alert alert-warning&quot; role=&quot;alert&quot;&gt;
&lt;p&gt;&lt;strong markdown=&quot;1&quot;&gt;Get Source Code:&lt;/strong&gt; &lt;a href=&quot;https://realpython.com/bonus/python-typer-cli-project-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-python-typer-cli-project-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get the source code you’ll use&lt;/a&gt; to build a to-do app for your command line using Python and Typer.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;a class=&quot;headerlink&quot; href=&quot;#demo&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this step-by-step project, you’ll build a &lt;a href=&quot;https://en.wikipedia.org/wiki/Command-line_interface&quot;&gt;command-line interface (CLI)&lt;/a&gt; application to manage a to-do list. Your application will provide a CLI based on Typer, a modern and versatile library for creating CLI applications.&lt;/p&gt;
&lt;p&gt;Before you get started, check out this demo of how your to-do application will look and work once you get to the end of this tutorial. The first part of the demo shows how to get help on working with the app. It also shows how to initialize and configure the app. The rest of the video demonstrates how to interact with the essential features, such as adding, removing, and listing to-dos:&lt;/p&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/591043158&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;Nice! The application has a user-friendly CLI that allows you to set up the to-do database. Once there, you can add, remove, and complete to-dos using appropriate &lt;strong&gt;commands&lt;/strong&gt;, &lt;strong&gt;arguments&lt;/strong&gt;, and &lt;strong&gt;options&lt;/strong&gt;. If you ever get stuck, then you can ask for help using the &lt;code&gt;--help&lt;/code&gt; option with proper arguments.&lt;/p&gt;
&lt;p&gt;Do you feel like kicking off this to-do app project? Cool! In the next section, you’ll plan out how to structure the layout of the project and what tools you’ll use to build it.&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;When you want to start a new application, you typically start by thinking about how you want the app to work. In this tutorial, you’ll build a to-do app for the command line. You’ll call that application &lt;code&gt;rptodo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You want your application to have a user-friendly command-line interface that allows your users to interact with the app and manage their to-do lists.&lt;/p&gt;
&lt;p&gt;To start off, you want your CLI to provide the following global options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;--version&lt;/code&gt;&lt;/strong&gt; shows the current version and exits the application.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--help&lt;/code&gt;&lt;/strong&gt; shows the global help message for the entire application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You’ll see these same options in many other CLI applications out there. It’s a nice idea to provide them because most users who work with the command line expect to find them in every app.&lt;/p&gt;
&lt;p&gt;Regarding managing a to-do list, your application will provide commands to initialize the app, add and remove to-dos, and manage the to-do completion status:&lt;/p&gt;
&lt;div class=&quot;table-responsive&quot;&gt;
&lt;table class=&quot;table table-hover&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Initializes the application’s to-do database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;add DESCRIPTION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds a new to-do to the database with a description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lists all the to-dos in the database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;complete TODO_ID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Completes a to-do by setting it as done using its ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;remove TODO_ID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Removes a to-do from the database using its ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;clear&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Removes all the to-dos by clearing the database&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;These commands provide all the functionality you need to turn your to-do application into a &lt;a href=&quot;https://en.wikipedia.org/wiki/Minimum_viable_product&quot;&gt;minimum viable product (MVP)&lt;/a&gt; so that you can &lt;a href=&quot;https://realpython.com/pypi-publish-python-package/&quot;&gt;publish it to PyPI&lt;/a&gt; or the platform of your choice and start getting feedback from your users.&lt;/p&gt;
&lt;p&gt;To provide all these features in your to-do application, you’ll need to complete a few tasks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build a &lt;strong&gt;command-line interface&lt;/strong&gt; capable of taking and processing commands, options, and arguments&lt;/li&gt;
&lt;li&gt;Select an appropriate &lt;strong&gt;data type&lt;/strong&gt; to represent your to-dos&lt;/li&gt;
&lt;li&gt;Implement a way to &lt;strong&gt;persistently store&lt;/strong&gt; your to-do list&lt;/li&gt;
&lt;li&gt;Define a way to &lt;strong&gt;connect&lt;/strong&gt; that user interface with the to-do data&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These tasks relate well to what is known as the Model-View-Controller design, which is an &lt;a href=&quot;https://en.wikipedia.org/wiki/Architectural_pattern&quot;&gt;architectural pattern&lt;/a&gt;. In this pattern, the &lt;strong&gt;model&lt;/strong&gt; takes care of the data, the &lt;strong&gt;view&lt;/strong&gt; deals with the user interface, and the &lt;strong&gt;controller&lt;/strong&gt; connects both ends to make the application work.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/python-typer-cli/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/python-typer-cli/ »&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 #85: Exploring Django Templates, Tags, and Filters</title>
      <id>https://realpython.com/podcasts/rpp/85/</id>
      <link href="https://realpython.com/podcasts/rpp/85/"/>
      <updated>2021-11-05T12:00:00+00:00</updated>
      <summary>Are you getting the most out of the Django framework? It&#x27;s a powerful web framework if you&#x27;re not interested in reinventing the wheel. Django includes a useful template system with inheritance for composing reusable HTML. This week on the show, we have previous guest and Real Python author Christopher Trudeau to talk about his recent articles and courses about Django.</summary>
      <content type="html">
        &lt;p&gt;Are you getting the most out of the Django framework? It&#x27;s a powerful web framework if you&#x27;re not interested in reinventing the wheel. Django includes a useful template system with inheritance for composing reusable HTML. This week on the show, we have previous guest and Real Python author Christopher Trudeau to talk about his recent articles and courses about Django.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Build a Content Aggregator in Python</title>
      <id>https://realpython.com/build-a-content-aggregator-python/</id>
      <link href="https://realpython.com/build-a-content-aggregator-python/"/>
      <updated>2021-11-03T14:00:00+00:00</updated>
      <summary>In this project-based tutorial, you&#x27;ll build a content aggregator from scratch with Python and Django. Using custom management commands, feedparser, and django-apscheduler, you&#x27;ll set up an app to periodically parse RSS feeds for Python podcasts and display the latest episodes to your users.</summary>
      <content type="html">
        &lt;div&gt;&lt;p&gt;In this project-based tutorial, you’ll build a &lt;strong&gt;content aggregator&lt;/strong&gt; from scratch using Python and the popular framework &lt;strong&gt;Django&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;With so much content coming out online daily, it can be time consuming to go to multiple sites and sources to consume information about your favorite subjects. This is why content aggregators are so popular and powerful, as you can use them to view all the latest news and content in one place.&lt;/p&gt;
&lt;p&gt;Whether you’re looking for a &lt;strong&gt;portfolio project&lt;/strong&gt; or ways in which to extend future projects beyond simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Create,_read,_update_and_delete&quot;&gt;CRUD&lt;/a&gt; capabilities, this tutorial will have something for you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this tutorial, you’ll learn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to work with &lt;strong&gt;RSS feeds&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to create a Django &lt;strong&gt;custom management command&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to run your custom command automatically on a &lt;strong&gt;schedule&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to use &lt;strong&gt;unit tests&lt;/strong&gt; to test your Django app’s functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click the link below to download the code for this project and follow along as you build your own content aggregator:&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/content-aggregator-project-code/&quot; class=&quot;alert-link&quot; data-toggle=&quot;modal&quot; data-target=&quot;#modal-content-aggregator-project-code&quot; data-focus=&quot;false&quot; markdown=&quot;1&quot;&gt;Click here to get the source code you’ll use&lt;/a&gt; to build a content aggregator with Django and Python in this tutorial.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;demo-what-youll-build&quot;&gt;Demo: What You’ll Build&lt;a class=&quot;headerlink&quot; href=&quot;#demo-what-youll-build&quot; title=&quot;Permanent link&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You’ll build your own podcast content aggregator in Python named &lt;strong&gt;pyCasts!&lt;/strong&gt; by following this tutorial from start to finish.&lt;/p&gt;
&lt;p&gt;The application will be a single web page displaying the latest Python podcast episodes from &lt;a href=&quot;https://realpython.com/podcasts/rpp/&quot;&gt;The Real Python Podcast&lt;/a&gt; and the &lt;a href=&quot;https://talkpython.fm/&quot;&gt;Talk Python to Me Podcast&lt;/a&gt;. After completing this tutorial, you can practice what you’ve learned by adding more podcast feeds to the application.&lt;/p&gt;
&lt;p&gt;Here’s a quick demo video of how it will look in action:&lt;/p&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/640030974&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;There are many moving parts behind the scenes that make this work efficiently and effectively in an automated fashion. You’ll learn about all of them in this tutorial. Get ready to delve in.&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;In order to be able to display the content to the end user, you have several steps to follow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#step-1-setting-up-your-project&quot;&gt;Set up the project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#step-2-building-your-podcast-model&quot;&gt;Build the podcast model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#step-3-creating-your-homepage-view&quot;&gt;Create the homepage view&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#step-4-parsing-podcast-rss-feeds&quot;&gt;Parse a podcast RSS feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#step-5-creating-a-django-custom-command&quot;&gt;Create a Django custom command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#step-6-adding-additional-feeds-to-your-python-content-aggregator&quot;&gt;Add additional feeds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#step-7-scheduling-tasks-with-django-apscheduler&quot;&gt;Schedule tasks with django-apscheduler&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You’ll walk through each of these over the course of this tutorial. Now you’ll look at which technologies and frameworks you’re going to use for the above steps.&lt;/p&gt;
&lt;p&gt;In order to fetch the podcast RSS feeds into your application and parse them, you’ll learn how to use the &lt;a href=&quot;https://feedparser.readthedocs.io/en/latest/&quot;&gt;feedparser&lt;/a&gt; library. You’ll use this library to extract only the newest episode data from the feed, which you’ll &lt;a href=&quot;https://en.wikipedia.org/wiki/Marshalling_(computer_science)&quot;&gt;marshall&lt;/a&gt; into an &lt;code&gt;Episode&lt;/code&gt; model and save to the database with the Django ORM.&lt;/p&gt;
&lt;p&gt;You could add this code to a script and manually run it periodically, but that would defeat the point of having an aggregator to save time. Instead, you’ll learn how to use a built-in Django tool called a &lt;a href=&quot;https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/&quot;&gt;custom management command&lt;/a&gt;. To parse and save the data, you’ll run your code from within Django itself.&lt;/p&gt;
&lt;p&gt;With help from the &lt;a href=&quot;https://github.com/jcass77/django-apscheduler&quot;&gt;django-apscheduler&lt;/a&gt; library, you’ll &lt;strong&gt;set a schedule&lt;/strong&gt; for your function calls, which are also called &lt;strong&gt;jobs&lt;/strong&gt;. You can then use the Django admin panel to view which jobs ran and when. This will ensure that the fetching and parsing of your feed will happen automatically without needing admin intervention.&lt;/p&gt;
&lt;p&gt;You’ll then use the &lt;a href=&quot;https://docs.djangoproject.com/en/3.1/topics/templates/#the-django-template-language&quot;&gt;Django template engine&lt;/a&gt; to show the user the queried context—in other words, the latest episodes.&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;To get the most out of this tutorial, you should be comfortable with the following concepts and technologies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/learning-paths/python3-introduction/&quot;&gt;Python basics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/python-virtual-environments-a-primer/&quot;&gt;Virtual environment&lt;/a&gt; setup and usage&lt;/li&gt;
&lt;li&gt;A basic level of &lt;a href=&quot;https://www.w3schools.com/html/html_intro.asp&quot;&gt;HTML&lt;/a&gt; and &lt;a href=&quot;https://www.w3schools.com/css/css_intro.asp&quot;&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Django fundamentals, such as its &lt;a href=&quot;https://realpython.com/python-application-layouts/#django&quot;&gt;folder structure&lt;/a&gt;, &lt;a href=&quot;https://docs.djangoproject.com/en/3.1/topics/http/urls/&quot;&gt;URL routing&lt;/a&gt;, &lt;a href=&quot;https://realpython.com/django-migrations-a-primer/&quot;&gt;migrations&lt;/a&gt;, and how to &lt;a href=&quot;https://realpython.com/django-setup/&quot;&gt;create a project and app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You might also find it helpful to have some experience with &lt;a href=&quot;https://getbootstrap.com/&quot;&gt;Bootstrap 4&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://realpython.com/build-a-content-aggregator-python/?utm_source=realpython&amp;utm_medium=rss&quot;&gt;Read the full article at https://realpython.com/build-a-content-aggregator-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>Reading Input and Writing Output in Python</title>
      <id>https://realpython.com/courses/reading-input-writing-output-python/</id>
      <link href="https://realpython.com/courses/reading-input-writing-output-python/"/>
      <updated>2021-11-02T14:00:00+00:00</updated>
      <summary>In this introductory Python course, you&#x27;ll learn how to take user input from the keyboard with the built-in function input() and how to display output to the console with the built-in function print().</summary>
      <content type="html">
        &lt;p&gt;You often need to set up a program to communicate with the outside world by obtaining input data from the user and displaying data back to the user. This course will introduce you to reading input and writing output in Python.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By the end of this course, you&amp;rsquo;ll know how to:&lt;/strong&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take &lt;strong&gt;user input from the keyboard&lt;/strong&gt; with the built-in function &lt;strong&gt;&lt;code&gt;input()&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Display &lt;strong&gt;output to the console&lt;/strong&gt; with the built-in function &lt;strong&gt;&lt;code&gt;print()&lt;/code&gt;&lt;/strong&gt;&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 #84: Creating and Manipulating PDFs in Python With borb</title>
      <id>https://realpython.com/podcasts/rpp/84/</id>
      <link href="https://realpython.com/podcasts/rpp/84/"/>
      <updated>2021-10-29T12:00:00+00:00</updated>
      <summary>Have you wanted to generate PDFs from your Python project? Many of the current libraries require designing the document down at the pixel level. Would you be interested in a tool that lets you specify the page layout while it handles the specific details of laying out the text? This week on the show, we talk with Joris Schellekens about his library for creating and manipulating PDFs named borb.</summary>
      <content type="html">
        &lt;p&gt;Have you wanted to generate PDFs from your Python project? Many of the current libraries require designing the document down at the pixel level. Would you be interested in a tool that lets you specify the page layout while it handles the specific details of laying out the text? This week on the show, we talk with Joris Schellekens about his library for creating and manipulating PDFs named borb.&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>Writing Idiomatic Python</title>
      <id>https://realpython.com/courses/writing-idiomatic-python/</id>
      <link href="https://realpython.com/courses/writing-idiomatic-python/"/>
      <updated>2021-10-26T14:00:00+00:00</updated>
      <summary>What are the programming idioms unique to Python? This course is a short overview for people coming from other languages and an introduction for beginners to the idiomatic practices within Python. You&#x27;ll cover truth values, looping, DRY principles, and the Zen of Python.</summary>
      <content type="html">
        &lt;p&gt;What programming idioms are unique to Python? This course is both a short overview for people coming from other languages as well as an introduction for programming beginners to the idiomatic practices within Python.&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 to access and interpret &lt;strong&gt;The Zen of Python&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to &lt;strong&gt;set up a script&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to test &lt;strong&gt;truth values&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How to &lt;strong&gt;swap variables&lt;/strong&gt; in-place&lt;/li&gt;
&lt;li&gt;How to create Pythonic &lt;strong&gt;&lt;code&gt;for&lt;/code&gt; loops&lt;/strong&gt;&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 #83: Ready to Publish Your Python Packages?</title>
      <id>https://realpython.com/podcasts/rpp/83/</id>
      <link href="https://realpython.com/podcasts/rpp/83/"/>
      <updated>2021-10-22T12:00:00+00:00</updated>
      <summary>Are you interested in sharing your Python project with the broader world? Would you like to make it easily installable using pip? How do you create Python packages that share your code in a scalable and maintainable way? This week on the show, Real Python author and former guest Dane Hillard returns to talk about his new book, &quot;Publishing Python Packages.&quot;</summary>
      <content type="html">
        &lt;p&gt;Are you interested in sharing your Python project with the broader world? Would you like to make it easily installable using pip? How do you create Python packages that share your code in a scalable and maintainable way? This week on the show, Real Python author and former guest Dane Hillard returns to talk about his new book, &quot;Publishing Python Packages.&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>Python Assignment Expressions and Using the Walrus Operator</title>
      <id>https://realpython.com/courses/python-assignment-expressions-walrus-operator/</id>
      <link href="https://realpython.com/courses/python-assignment-expressions-walrus-operator/"/>
      <updated>2021-10-19T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll learn about assignment expressions and the walrus operator. The biggest change in Python 3.8 was the inclusion of the := operator, which you can use to assign variables in the middle of expressions. You&#x27;ll see several examples of how to take advantage of this new feature.</summary>
      <content type="html">
        &lt;p&gt;Each new version of Python adds new features to the language. For Python 3.8, the biggest change is the addition of &lt;strong&gt;assignment expressions&lt;/strong&gt;. Specifically, the &lt;code&gt;:=&lt;/code&gt; operator gives you a new syntax for assigning variables in the middle of expressions. This operator is colloquially known as the &lt;strong&gt;walrus operator&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This course is an in-depth introduction to the walrus operator. You&amp;rsquo;ll learn some of the motivations for the syntax update and explore some examples where assignment expressions can be useful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify &lt;strong&gt;the walrus operator&lt;/strong&gt; and understand its meaning&lt;/li&gt;
&lt;li&gt;Understand &lt;strong&gt;use cases&lt;/strong&gt; for the walrus operator&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid repetitive code&lt;/strong&gt; by using the walrus operator&lt;/li&gt;
&lt;li&gt;Convert between code using the walrus operator and code using &lt;strong&gt;other assignment methods&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Understand the impacts on &lt;strong&gt;backward compatibility&lt;/strong&gt; when using the walrus operator&lt;/li&gt;
&lt;li&gt;Use appropriate &lt;strong&gt;style&lt;/strong&gt; in your assignment expressions&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 #82: Welcoming the CPython Developer in Residence</title>
      <id>https://realpython.com/podcasts/rpp/82/</id>
      <link href="https://realpython.com/podcasts/rpp/82/"/>
      <updated>2021-10-15T12:00:00+00:00</updated>
      <summary>Earlier this year, the Python Software Foundation announced the creation of the Developer in Residence role. The first Visionary Sponsors of the PSF have provided funding for this new role for one year. What development responsibilities does this job address? This week on the show, we talk to previous guest Łukasz Langa about becoming the first CPython Developer in Residence.</summary>
      <content type="html">
        &lt;p&gt;Earlier this year, the Python Software Foundation announced the creation of the Developer in Residence role. The first Visionary Sponsors of the PSF have provided funding for this new role for one year. What development responsibilities does this job address? This week on the show, we talk to previous guest Łukasz Langa about becoming the first CPython Developer in Residence.&lt;/p&gt;
        &lt;hr /&gt;
        &lt;p&gt;&lt;em&gt;[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short &amp;amp; sweet Python Trick delivered to your inbox every couple of days. &lt;a href=&quot;https://realpython.com/python-tricks/?utm_source=realpython&amp;amp;utm_medium=rss&amp;amp;utm_campaign=footer&quot;&gt;&amp;gt;&amp;gt; Click here to learn more and see examples&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;
      </content>
    </entry>
  
    <entry>
      <title>Using Pygame to Build an Asteroids Game in Python</title>
      <id>https://realpython.com/courses/asteroids-game-python-pygame/</id>
      <link href="https://realpython.com/courses/asteroids-game-python-pygame/"/>
      <updated>2021-10-12T14:00:00+00:00</updated>
      <summary>In this course, you&#x27;ll build a clone of the Asteroids game in Python using Pygame. Step by step, you&#x27;ll add images, input handling, game logic, sounds, and text to your program.</summary>
      <content type="html">
        &lt;p&gt;Do you want to create your own computer games but like Python too much to abandon it for a career as a game developer? There&amp;rsquo;s a solution for that! With the Pygame module, you can use your amazing Python skills to create games, from the basic to the very complex. Below, you&amp;rsquo;ll learn how to use Pygame by making a clone of the Asteroids game!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In this course, you&amp;rsquo;ll learn how to build a complete game, including:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loading &lt;strong&gt;images&lt;/strong&gt; and displaying them on the screen&lt;/li&gt;
&lt;li&gt;Handling &lt;strong&gt;user input&lt;/strong&gt; in order to control the game&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Moving objects&lt;/strong&gt; according to the &lt;strong&gt;game logic&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Detecting &lt;strong&gt;collisions&lt;/strong&gt; between objects&lt;/li&gt;
&lt;li&gt;Displaying &lt;strong&gt;text&lt;/strong&gt; on the screen&lt;/li&gt;
&lt;li&gt;Playing &lt;strong&gt;sounds&lt;/strong&gt;&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 #81: Exploring the New Features of Python 3.10</title>
      <id>https://realpython.com/podcasts/rpp/81/</id>
      <link href="https://realpython.com/podcasts/rpp/81/"/>
      <updated>2021-10-08T12:00:00+00:00</updated>
      <summary>Python 3.10 is here! This week on the show, two former guests and Real Python authors return to talk about the new version. Geir Arne Hjelle&#x27;s article was posted to the site Monday, and it&#x27;s titled &quot;Python 3.10: Cool New Features for You to Try&quot;. Christopher Trudeau&#x27;s video course came out on Tuesday, and it covers the topics from the article with multiple visual examples of Python 3.10 code.</summary>
      <content type="html">
        &lt;p&gt;Python 3.10 is here! This week on the show, two former guests and Real Python authors return to talk about the new version. Geir Arne Hjelle&#x27;s article was posted to the site Monday, and it&#x27;s titled &quot;Python 3.10: Cool New Features for You to Try&quot;. Christopher Trudeau&#x27;s video course came out on Tuesday, and it covers the topics from the article with multiple visual examples of Python 3.10 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>
  

</feed>
