<!DOCTYPE html>
<html lang="en">
<head>

    <title>Pythonflow</title>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="HandheldFriendly" content="True" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    
    <link rel="preload" as="style" href="/assets/built/screen.css?v=7aeeb0ad67" />
    <link rel="preload" as="script" href="/assets/built/casper.js?v=7aeeb0ad67" />

    <link rel="stylesheet" type="text/css" href="/assets/built/screen.css?v=7aeeb0ad67" />

    <meta name="description" content="Python, Linux and all in between">
    <link rel="icon" href="https://pythonflow.com/content/images/size/w256h256/2025/11/pythonflow_logo.png" type="image/png">
    <link rel="canonical" href="https://pythonflow.com/">
    <meta name="referrer" content="no-referrer-when-downgrade">
    
    <meta property="og:site_name" content="Flow like a Python">
    <meta property="og:type" content="website">
    <meta property="og:title" content="Flow like a Python">
    <meta property="og:description" content="Python, Linux and all in between">
    <meta property="og:url" content="https://pythonflow.com/">
    <meta name="twitter:card" content="summary">
    <meta name="twitter:title" content="flowfelis">
    <meta name="twitter:description" content="Flow like a Python">
    <meta name="twitter:url" content="https://pythonflow.com/">
    <meta name="twitter:site" content="@ghost">
    
    <script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "WebSite",
    "publisher": {
        "@type": "Organization",
        "name": "Flow like a Python",
        "url": "https://pythonflow.com/",
        "logo": {
            "@type": "ImageObject",
            "url": "https://pythonflow.com/content/images/size/w256h256/2025/11/pythonflow_logo.png",
            "width": 60,
            "height": 60
        }
    },
    "url": "https://pythonflow.com/",
    "name": "Flow like a Python",
    "mainEntityOfPage": "https://pythonflow.com/",
    "description": "Python, Linux and all in between"
}
    </script>

    <meta name="generator" content="Ghost 6.7">
    <link rel="alternate" type="application/rss+xml" title="Flow like a Python" href="https://pythonflow.com/rss/">
    
    <script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="046a714172404258c19fa10467" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://pythonflow.com/" data-locale="en" crossorigin="anonymous"></script>
    
    <link href="https://pythonflow.com/webmentions/receive/" rel="webmention">
    <script defer src="/public/cards.min.js?v=7aeeb0ad67"></script>
    <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=7aeeb0ad67">
    <script defer src="/public/comment-counts.min.js?v=7aeeb0ad67" data-ghost-comments-counts-api="https://pythonflow.com/members/api/comments/counts/"></script><style>:root {--ghost-accent-color: #1998ff;}</style>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs/themes/prism.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs/plugins/line-numbers/prism-line-numbers.css">

<!-- decrease prismjs font size -->
<style>
    pre[class*="language-"] {
        font-size: 0.8em;
    }
</style>

<!-- Google Analytics -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-HFRQXXRE2T"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-HFRQXXRE2T');
</script>

    <link rel="preconnect" href="https://fonts.bunny.net"><link rel="stylesheet" href="https://fonts.bunny.net/css?family=chakra-petch:400"><style>:root {--gh-font-heading: Chakra Petch;}</style>

</head>
<body class="home-template gh-font-heading-chakra-petch is-head-middle-logo">
<div class="viewport">

    <header id="gh-head" class="gh-head outer is-header-hidden">
        <div class="gh-head-inner inner">
            <div class="gh-head-brand">
                <a class="gh-head-logo no-image" href="https://pythonflow.com">
                        Flow like a Python
                </a>
                <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button>
                <button class="gh-burger" aria-label="Main Menu"></button>
            </div>

            <nav class="gh-head-menu">
                <ul class="nav">
    <li class="nav-home nav-current"><a href="https://pythonflow.com/">Home</a></li>
    <li class="nav-about"><a href="https://pythonflow.com/about/">About</a></li>
    <li class="nav-cv"><a href="https://pythonflow.com/cv/">CV</a></li>
</ul>

            </nav>

            <div class="gh-head-actions">
                        <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button>
            </div>
        </div>
    </header>

    <div class="site-content">
        
<div class="site-header-content outer no-content">



</div>

<main id="site-main" class="site-main outer">
<div class="inner posts">

    <div class="post-feed">
            
<article class="post-card post post-card-large">

    <a class="post-card-image-link" href="/why-you-should-learn-prompt-engineering/">

        <img class="post-card-image"
            srcset="https://images.unsplash.com/photo-1737641624486-7846df8528dc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDF8fHByb21wdHxlbnwwfHx8fDE3NzEwMDE4ODF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;300 300w,
                    https://images.unsplash.com/photo-1737641624486-7846df8528dc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDF8fHByb21wdHxlbnwwfHx8fDE3NzEwMDE4ODF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;600 600w,
                    https://images.unsplash.com/photo-1737641624486-7846df8528dc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDF8fHByb21wdHxlbnwwfHx8fDE3NzEwMDE4ODF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
                    https://images.unsplash.com/photo-1737641624486-7846df8528dc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDF8fHByb21wdHxlbnwwfHx8fDE3NzEwMDE4ODF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
            sizes="(max-width: 1000px) 400px, 800px"
            src="https://images.unsplash.com/photo-1737641624486-7846df8528dc?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDF8fHByb21wdHxlbnwwfHx8fDE3NzEwMDE4ODF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;600"
            alt="Why you should learn Prompt Engineering"
            loading="lazy"
        />


    </a>

    <div class="post-card-content">

        <a class="post-card-content-link" href="/why-you-should-learn-prompt-engineering/">
            <header class="post-card-header">
                <div class="post-card-tags">
                </div>
                <h2 class="post-card-title">
                    Why you should learn Prompt Engineering
                </h2>
            </header>
                <div class="post-card-excerpt">When I first heard about prompt engineering,

I thought:

 * it&#39;s a scam.
 * How can &quot;Explaining something in natural language(i.e. English)&quot; be engineered?
 * Even it is, it must be over-engineering

However, I was wrong.

By changing(engineering) the prompt, you can get:

 * More accurate output</div>
        </a>

        <footer class="post-card-meta">
            <time class="post-card-meta-date" datetime="2026-02-13">13 Feb 2026</time>
                <span class="post-card-meta-length">1 min read</span>
                <script
    data-ghost-comment-count="698f56005ba67a74968e49a0"
    data-ghost-comment-count-empty=""
    data-ghost-comment-count-singular="comment"
    data-ghost-comment-count-plural="comments"
    data-ghost-comment-count-tag="span"
    data-ghost-comment-count-class-name=""
    data-ghost-comment-count-autowrap="true"
>
</script>
        </footer>

    </div>

</article>
            
<article class="post-card post post-card-large">

    <a class="post-card-image-link" href="/only-one-shall-exist-the-singleton-pattern-in-python/">

        <img class="post-card-image"
            srcset="https://images.unsplash.com/photo-1584819574093-18416adc12ec?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNpbmdsZXxlbnwwfHx8fDE3NjI5OTYzOTJ8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;300 300w,
                    https://images.unsplash.com/photo-1584819574093-18416adc12ec?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNpbmdsZXxlbnwwfHx8fDE3NjI5OTYzOTJ8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;600 600w,
                    https://images.unsplash.com/photo-1584819574093-18416adc12ec?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNpbmdsZXxlbnwwfHx8fDE3NjI5OTYzOTJ8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
                    https://images.unsplash.com/photo-1584819574093-18416adc12ec?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNpbmdsZXxlbnwwfHx8fDE3NjI5OTYzOTJ8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
            sizes="(max-width: 1000px) 400px, 800px"
            src="https://images.unsplash.com/photo-1584819574093-18416adc12ec?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDN8fHNpbmdsZXxlbnwwfHx8fDE3NjI5OTYzOTJ8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;600"
            alt="Staying single has benefits :) "
            loading="lazy"
        />


    </a>

    <div class="post-card-content">

        <a class="post-card-content-link" href="/only-one-shall-exist-the-singleton-pattern-in-python/">
            <header class="post-card-header">
                <div class="post-card-tags">
                </div>
                <h2 class="post-card-title">
                    Only One Shall Exist: The Singleton Pattern in Python
                </h2>
            </header>
                <div class="post-card-excerpt">What are Design Patterns Anyway

Design patterns help developers with repeating problems. They are like a blueprint for common problems.

To give an example from daily life, everytime you are about to tie your shoe laces, you don&#39;t think how to do it, someone came up with an</div>
        </a>

        <footer class="post-card-meta">
            <time class="post-card-meta-date" datetime="2025-11-13">13 Nov 2025</time>
                <span class="post-card-meta-length">3 min read</span>
                <script
    data-ghost-comment-count="6915c141e7590516bdb002e9"
    data-ghost-comment-count-empty=""
    data-ghost-comment-count-singular="comment"
    data-ghost-comment-count-plural="comments"
    data-ghost-comment-count-tag="span"
    data-ghost-comment-count-class-name=""
    data-ghost-comment-count-autowrap="true"
>
</script>
        </footer>

    </div>

</article>
            
<article class="post-card post post-card-large">

    <a class="post-card-image-link" href="/understanding-circular-imports/">

        <img class="post-card-image"
            srcset="https://images.unsplash.com/photo-1613299988484-9e1722cecc26?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDE0fHx1bnRhbmdsZXxlbnwwfHx8fDE3NjExMDkyNTF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;300 300w,
                    https://images.unsplash.com/photo-1613299988484-9e1722cecc26?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDE0fHx1bnRhbmdsZXxlbnwwfHx8fDE3NjExMDkyNTF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;600 600w,
                    https://images.unsplash.com/photo-1613299988484-9e1722cecc26?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDE0fHx1bnRhbmdsZXxlbnwwfHx8fDE3NjExMDkyNTF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
                    https://images.unsplash.com/photo-1613299988484-9e1722cecc26?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDE0fHx1bnRhbmdsZXxlbnwwfHx8fDE3NjExMDkyNTF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
            sizes="(max-width: 1000px) 400px, 800px"
            src="https://images.unsplash.com/photo-1613299988484-9e1722cecc26?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;M3wxMTc3M3wwfDF8c2VhcmNofDE0fHx1bnRhbmdsZXxlbnwwfHx8fDE3NjExMDkyNTF8MA&amp;ixlib&#x3D;rb-4.1.0&amp;q&#x3D;80&amp;w&#x3D;600"
            alt="Breaking the Loop: A Deep Dive into Circular Imports in Python"
            loading="lazy"
        />


    </a>

    <div class="post-card-content">

        <a class="post-card-content-link" href="/understanding-circular-imports/">
            <header class="post-card-header">
                <div class="post-card-tags">
                </div>
                <h2 class="post-card-title">
                    Breaking the Loop: A Deep Dive into Circular Imports in Python
                </h2>
            </header>
                <div class="post-card-excerpt">Introduction

Every seasoned Python developer must have seen at least once in their life a circular import issue. You have quickly fixed it via finding a solution from Stackoverflow or AI. However, have you really understood what caused the issue? Yes, two files importing each other is not allowed, but</div>
        </a>

        <footer class="post-card-meta">
            <time class="post-card-meta-date" datetime="2025-10-22">22 Oct 2025</time>
                <span class="post-card-meta-length">2 min read</span>
                <script
    data-ghost-comment-count="68f84d14e7590516bdb00238"
    data-ghost-comment-count-empty=""
    data-ghost-comment-count-singular="comment"
    data-ghost-comment-count-plural="comments"
    data-ghost-comment-count-tag="span"
    data-ghost-comment-count-class-name=""
    data-ghost-comment-count-autowrap="true"
>
</script>
        </footer>

    </div>

</article>
    </div>

    <nav class="pagination">
    <span class="page-number">Page 1 of 1</span>
</nav>


</div>
</main>

    </div>

    <footer class="site-footer outer">
        <div class="inner">
            <section class="copyright"><a href="https://pythonflow.com">Flow like a Python</a> &copy; 2026</section>
            <nav class="site-footer-nav">
                <ul class="nav">
    <li class="nav-sign-up nav-current"><a href="#/portal/">Sign up</a></li>
</ul>

            </nav>
            <div class="gh-powered-by"><a href="https://ghost.org/" target="_blank" rel="noopener">Powered by Ghost</a></div>
        </div>
    </footer>

</div>


<script
    src="https://code.jquery.com/jquery-3.5.1.min.js"
    integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
    crossorigin="anonymous">
</script>
<script src="/assets/built/casper.js?v=7aeeb0ad67"></script>
<script>
$(document).ready(function () {
    // Mobile Menu Trigger
    $('.gh-burger').click(function () {
        $('body').toggleClass('gh-head-open');
    });
    // FitVids - Makes video embeds responsive
    $(".gh-content").fitVids();
});
</script>

<script src="https://cdn.jsdelivr.net/npm/prismjs/prism.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/plugins/autoloader/prism-autoloader.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/plugins/line-numbers/prism-line-numbers.min.js"></script>

<script>
document.querySelectorAll('pre code').forEach(code => {
  const pre = code.parentElement;
  if (!pre.classList.contains('line-numbers')) {
    pre.classList.add('line-numbers');
  }
});

// ensure Prism runs after DOM + plugin are ready
document.addEventListener('DOMContentLoaded', () => {
  Prism.highlightAll();
});
</script>

</body>
</html>
