<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: sarthak</title>
    <description>The latest articles on Forem by sarthak (@externref).</description>
    <link>https://forem.com/externref</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1184664%2F1c8a025c-a1e5-49c0-b1d8-b6d1bdd39ab6.png</url>
      <title>Forem: sarthak</title>
      <link>https://forem.com/externref</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/externref"/>
    <language>en</language>
    <item>
      <title>Overloading functions in Python</title>
      <dc:creator>sarthak</dc:creator>
      <pubDate>Mon, 23 Sep 2024 17:58:08 +0000</pubDate>
      <link>https://forem.com/externref/overloading-functions-in-python-35eh</link>
      <guid>https://forem.com/externref/overloading-functions-in-python-35eh</guid>
      <description>&lt;p&gt;Function overloading refers to the ability to define multiple functions with the same name but different signatures, meaning they have different numbers or types of parameters. The correct version of the function is chosen automatically by the compiler or interpreter, depending on the number and type of arguments passed during the function call.&lt;/p&gt;

&lt;p&gt;Languages like Java and C++ support this as a feature natively.&lt;/p&gt;

&lt;p&gt;While python does not support function overloading natively since it's a dynamically typed language, its possible to implement the same using various modules and utilities.&lt;/p&gt;

&lt;p&gt;This is my implementation of overloading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;__future__&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;annotations&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;

&lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;overloads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...],&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callable&lt;/span&gt;&lt;span class="p"&gt;[...,&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
    &lt;span class="n"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callable&lt;/span&gt;&lt;span class="p"&gt;[...,&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;overloads&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fallback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_fallback&lt;/span&gt;
        &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__call__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kwrg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;kwrg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;kwds&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;overloads&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;)](&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nb"&gt;NotImplementedError&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The OverloadNamespace class is a callable that acts as a medium between the function name and the call signature. The arguments are passed into the &lt;code&gt;__call__&lt;/code&gt; dunder method which matches the provided data types with type tuples stored in the &lt;code&gt;overloads&lt;/code&gt; dictionary. The matched signature is returned and is called with the provided args/kwargs provided. If no matching signature is found, the &lt;code&gt;fallback&lt;/code&gt; function is called.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the OverloadNamespace class
&lt;/h2&gt;

&lt;p&gt;This class is not meant to be used manually, it's utilised by decorators that modify the function and return an instance of the &lt;code&gt;OverloadNamespace&lt;/code&gt; class using the same name as the function's provided name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;overload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callable&lt;/span&gt;&lt;span class="p"&gt;[...,&lt;/span&gt; &lt;span class="n"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Decorator used to create overloads of functions with same name. Returns a [OverloadNamespace]&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isfunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;overload_using_types&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;inner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callable&lt;/span&gt;&lt;span class="p"&gt;[...,&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;sig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;sig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Number of types and args in function is not same.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

        &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nc"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;overloads&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;inner&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;overload_using_types&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callable&lt;/span&gt;&lt;span class="p"&gt;[...,&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;parameters&lt;/span&gt;
    &lt;span class="n"&gt;types&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;annotation&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nc"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;overloads&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;overload&lt;/code&gt; decorator checks the types of arguments using the decorator value or typehints and returns the namespace class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example usage&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# types in decorator
&lt;/span&gt;&lt;span class="nd"&gt;@overload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;

&lt;span class="c1"&gt;# or as typehints
&lt;/span&gt;&lt;span class="nd"&gt;@overload&lt;/span&gt; 
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 3
&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is just a basic idea and works for non-union fixed types.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fallback
&lt;/h3&gt;

&lt;p&gt;Fallback function are used as the function to be called when no argument patterns match the call pattern.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Callable&lt;/span&gt;&lt;span class="p"&gt;[...,&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Fallback function to be called if no overloads match to the provided arguments.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nc"&gt;OverloadNamespace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fallback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt;

&lt;span class="nd"&gt;@fallback&lt;/span&gt; 
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>oop</category>
    </item>
    <item>
      <title>Linux How-TOs ❓ | A must know list of commands in Linux shells</title>
      <dc:creator>sarthak</dc:creator>
      <pubDate>Sat, 24 Aug 2024 02:44:17 +0000</pubDate>
      <link>https://forem.com/externref/linux-how-tos-a-must-know-list-of-commands-in-linux-shells-43o0</link>
      <guid>https://forem.com/externref/linux-how-tos-a-must-know-list-of-commands-in-linux-shells-43o0</guid>
      <description>&lt;p&gt;Hello Everyone 👋.&lt;/p&gt;

&lt;p&gt;Here's a list of useful tools and commands that are required often for using Linux as a daily driver or even only for development.&lt;/p&gt;

&lt;p&gt;This article will cover commands from bash, &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#zsh" rel="noopener noreferrer"&gt;zsh&lt;/a&gt;, and &lt;a href="https://github.com/fish-shell/fish-shell" rel="noopener noreferrer"&gt;fish&lt;/a&gt; since they are mostly compatible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Topics covered in this article
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;: &lt;code&gt;Environment variables&lt;/code&gt;, &lt;code&gt;Aliasing&lt;/code&gt;, &lt;code&gt;Path&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Built in commands&lt;/strong&gt;: &lt;code&gt;set(fish)&lt;/code&gt;, &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;mkdir&lt;/code&gt;, &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;echo&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;wget&lt;/code&gt;, &lt;code&gt;tar&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Installable commands&lt;/strong&gt;: &lt;code&gt;nano&lt;/code&gt;, &lt;code&gt;mousepad&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Basics
&lt;/h3&gt;

&lt;p&gt;Before starting with commands here are some core concepts you should be aware of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~&lt;/code&gt; in a path represents the home directory (eg: &lt;code&gt;/home/username/&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; represents the root directory &lt;/li&gt;
&lt;li&gt;Values starting with a &lt;code&gt;$&lt;/code&gt; denote an environment variable. For example, &lt;code&gt;$HOME&lt;/code&gt; returns the path to your home directory. If the environment variable is not found an empty string is returned.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;
/home/sarthak
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$THIS_ENV_DONT_EXIST&lt;/span&gt;

sarthak@sarthak ~&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;There might be some differences between syntax patterns in different shells, in that case, alternatives will be used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are basic commands you should know to use the terminal efficiently.&lt;/p&gt;
&lt;h3&gt;
  
  
  Environment Variables
&lt;/h3&gt;

&lt;p&gt;Environment variables are used to store values for a process into the system, there are several Environment variables like &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;PWD&lt;/code&gt;, &lt;code&gt;USER&lt;/code&gt; etc set up by the processes on the system. Here are some operations you can perform on them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# reading a env variable&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt; &lt;span class="c"&gt;# prefixing the name with $&lt;/span&gt;
&lt;span class="nv"&gt;ENV_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"VALUE"&lt;/span&gt; &lt;span class="c"&gt;# setting value for a session&lt;/span&gt;
&lt;span class="c"&gt;# Example&lt;/span&gt;
sarthak@sarthak:~&lt;span class="nv"&gt;$ VAR2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sarthak in bash"&lt;/span&gt; &lt;span class="c"&gt;# using bash&lt;/span&gt;
sarthak@sarthak:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$VAR1&lt;/span&gt; &lt;span class="nv"&gt;$VAR2&lt;/span&gt;
sarthak &lt;span class="k"&gt;in &lt;/span&gt;bash
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;set &lt;/span&gt;VAR1 &lt;span class="s2"&gt;"sarthak in fish"&lt;/span&gt; &lt;span class="c"&gt;# using fish&lt;/span&gt;
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$VAR1&lt;/span&gt;
sarthak &lt;span class="k"&gt;in &lt;/span&gt;fish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Creating aliases
&lt;/h3&gt;

&lt;p&gt;You can create aliases for long commands using &lt;code&gt;alias&lt;/code&gt; command. These are useful when you need to repeat same task multiple times.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;ALIAS] &lt;span class="o"&gt;[&lt;/span&gt;COMMAND]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32jehnmqvfrfejs324ld.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32jehnmqvfrfejs324ld.png" alt="grep example" width="761" height="287"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The PATH variable
&lt;/h3&gt;

&lt;p&gt;The path variable stores directory addresses where executable files are stored. These are stored in a single string seperated by a colons. You can access the path using the &lt;code&gt;PATH&lt;/code&gt; variable in the shell.&lt;br&gt;
&lt;strong&gt;Adding a path temporarily&lt;/strong&gt;&lt;br&gt;
To add a path temporarily you can use the &lt;code&gt;export&lt;/code&gt; command in the active shell&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:/path/to/directory &lt;span class="c"&gt;# for bash and zsh&lt;/span&gt;
fish_add_path /path/to/directory &lt;span class="c"&gt;# for fish&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will add the PATH to the path variable for current shell session.&lt;br&gt;
&lt;strong&gt;Adding a path permanently&lt;/strong&gt;&lt;br&gt;
You need to edit your RC file which should be named after your shell ( &lt;code&gt;.bashrc&lt;/code&gt;, &lt;code&gt;.zshrc&lt;/code&gt;) to execute the commands from above. For fish shell you need to add the set command in &lt;code&gt;~/.config/fish/config.fish&lt;/code&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Navigation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cd&lt;/strong&gt;: The &lt;code&gt;cd&lt;/code&gt; command is used to move from one directory to another. The syntax for the command is
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;DIRECTORY] &lt;span class="c"&gt;# where directory is the path of the directory to navigate to &lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; .. &lt;span class="c"&gt;# to navigate to the parent directory of your current&lt;/span&gt;
&lt;span class="c"&gt;# you can also navigate to other dir in the parent dir&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../other_directory_in_parent_directory 
&lt;span class="nb"&gt;cd&lt;/span&gt; ~ &lt;span class="c"&gt;# for the home directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; / &lt;span class="c"&gt;# for the root directory&lt;/span&gt;

&lt;span class="c"&gt;# exclusive to fish, you can type in the directory path directly&lt;/span&gt;
directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pwd&lt;/strong&gt;:  &lt;strong&gt;P&lt;/strong&gt;rint &lt;strong&gt;W&lt;/strong&gt;orking &lt;strong&gt;D&lt;/strong&gt;irectory prints the path to the current working directory.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# example&lt;/span&gt;
sarthak@sarthak ~/p/codeforces &lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;pwd&lt;/span&gt;
/home/sarthak/projects/codeforces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ls&lt;/strong&gt;: This is used to list the contents of a directory. Command syntax:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;DIR_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c"&gt;# current directory is listed by default&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="c"&gt;# shows files and folders inside the dir recusively&lt;/span&gt;
&lt;span class="c"&gt;# you don't want to use the -R tag most of the times.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Working with directories and files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mkdir&lt;/strong&gt;: The &lt;code&gt;mkdir&lt;/code&gt; command is used to &lt;code&gt;m&lt;/code&gt;a&lt;code&gt;k&lt;/code&gt;e &lt;code&gt;dir&lt;/code&gt;ectories in the current working directory. Command syntax:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;DIRECTORY_NAME] &lt;span class="c"&gt;# creates a directory with the name provided&lt;/span&gt;
&lt;span class="c"&gt;# if the directory is a subdirectory and the parent dir does not exist&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;DIRECTORY_PATH] 
&lt;span class="c"&gt;# example&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;hello/world &lt;span class="c"&gt;# will error since dir hello does not exist&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; hello/world &lt;span class="c"&gt;# will create hello dir with world dir inside it&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;touch&lt;/strong&gt;: This command is actually meant to modify edit and create time of files, but can also be used to create them. Command syntax:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;hello.txt &lt;span class="c"&gt;# creates a new file called hello.txt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cat&lt;/strong&gt;: This command is used to con&lt;code&gt;cat&lt;/code&gt;inate the contents of file(s) and display them. Command Syntax:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;FILE&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)]&lt;/span&gt;
&lt;span class="c"&gt;# example&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;file1.txt file2.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;echo&lt;/strong&gt;: The echo command is mainly used to display text in the stdout but can also be used to write in a file. Command syntax:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"text to display in shell"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"text to display in file"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; filename
&lt;span class="c"&gt;# Example&lt;/span&gt;
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"import hello"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; main.py
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;cat &lt;/span&gt;main.py
import hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;rm&lt;/strong&gt;: The &lt;code&gt;rm&lt;/code&gt; command is used to &lt;code&gt;r&lt;/code&gt;e&lt;code&gt;m&lt;/code&gt;ove files or dirs specified in the argument. Some useful flags for this command are:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt;: recursively remove items from the directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;f&lt;/code&gt;: ignore files that do not exist without any prompts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Command Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &amp;lt;flags&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;TARGET] 
&lt;span class="c"&gt;# Example&lt;/span&gt;
&lt;span class="nb"&gt;rm &lt;/span&gt;hello.txt &lt;span class="c"&gt;# will remove the hello.txt file &lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; src/ 
&lt;span class="c"&gt;# will remove all the files and dirs inside the src dir and delete it&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cp&lt;/strong&gt;: This command is used to create a &lt;code&gt;c&lt;/code&gt;o&lt;code&gt;p&lt;/code&gt;y of a file. Command syntax:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;SOURCE_FILE] &lt;span class="o"&gt;[&lt;/span&gt;TARGET_FILE] &lt;span class="c"&gt;# target file created if doesn't exist&lt;/span&gt;
&lt;span class="c"&gt;# Example&lt;/span&gt;
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;cat &lt;/span&gt;hello.py
import hello
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;cp &lt;/span&gt;hello.py test.py
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;cat &lt;/span&gt;test.py
import hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mv&lt;/strong&gt;: The &lt;code&gt;m&lt;/code&gt;o&lt;code&gt;v&lt;/code&gt;e command is used to move the file from one location to another.  It can also be used to rename the file.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;FILE] &lt;span class="o"&gt;[&lt;/span&gt;TARGET] &lt;span class="c"&gt;# target can be a directory or a file name&lt;/span&gt;
&lt;span class="c"&gt;# Example&lt;/span&gt;
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;mkdir &lt;/span&gt;test_dir
&lt;span class="c"&gt;# moving to a new directory&lt;/span&gt;
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;mv &lt;/span&gt;hello.py test_dir/
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;cat &lt;/span&gt;test_dir/hello.py
import hello
&lt;span class="c"&gt;# renaming the file&lt;/span&gt;
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;mv &lt;/span&gt;test_dir/hello.py test_dir/renamed_file.py
sarthak@sarthak ~&amp;gt; &lt;span class="nb"&gt;cat &lt;/span&gt;test_dir/renamed_file.py
import hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;grep&lt;/strong&gt;: The grep command is used to find for text in a file. Command syntax
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &amp;lt;tags&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;STR_TO_SEARCH_FOR] &lt;span class="o"&gt;[&lt;/span&gt;FILENAME]
&lt;span class="c"&gt;# Example&lt;/span&gt;
sarthak@sarthak ~ &lt;span class="o"&gt;[&lt;/span&gt;1]&amp;gt; &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"py"&lt;/span&gt; space/src/lib.rs
use pyo3::prelude::&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c"&gt;#[pyfunction]&lt;/span&gt;
&lt;span class="c"&gt;#[pymodule(name="space")]&lt;/span&gt;
    m.add_function&lt;span class="o"&gt;(&lt;/span&gt;wrap_pyfunction!&lt;span class="o"&gt;(&lt;/span&gt;test_function, m&lt;span class="o"&gt;)&lt;/span&gt;?&lt;span class="o"&gt;)&lt;/span&gt;?&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c"&gt;# For better output use the --color and -n tags&lt;/span&gt;
&lt;span class="c"&gt;# it will highlight the output and add line numbers to the matches&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9kqxa7dgelv3tj6l3ur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9kqxa7dgelv3tj6l3ur.png" alt="grep example" width="596" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;wget&lt;/strong&gt;: This utility is used to download files to the local system.
Command Syntax:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &amp;lt;&lt;span class="nt"&gt;-c&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;URL] &lt;span class="c"&gt;# the c tag is used to establish a continous download&lt;/span&gt;
&lt;span class="c"&gt;# Example&lt;/span&gt;
sarthak@sarthak ~&amp;gt; wget &lt;span class="nt"&gt;-c&lt;/span&gt; https://bootstrap.pypa.io/get-pip.py
&lt;span class="nt"&gt;--2024-08-24&lt;/span&gt; 08:01:29--  https://bootstrap.pypa.io/get-pip.py
Resolving bootstrap.pypa.io &lt;span class="o"&gt;(&lt;/span&gt;bootstrap.pypa.io&lt;span class="o"&gt;)&lt;/span&gt;... 151.101.156.175, 2a04:4e42:25::175
Connecting to bootstrap.pypa.io &lt;span class="o"&gt;(&lt;/span&gt;bootstrap.pypa.io&lt;span class="o"&gt;)&lt;/span&gt;|151.101.156.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2266755 &lt;span class="o"&gt;(&lt;/span&gt;2.2M&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;text/x-python]
Saving to: ‘get-pip.py’

get-pip.py                    100%[&lt;span class="o"&gt;=================================================&amp;gt;]&lt;/span&gt;   2.16M  10.3MB/s    &lt;span class="k"&gt;in &lt;/span&gt;0.2s

2024-08-24 08:01:30 &lt;span class="o"&gt;(&lt;/span&gt;10.3 MB/s&lt;span class="o"&gt;)&lt;/span&gt; - ‘get-pip.py’ saved &lt;span class="o"&gt;[&lt;/span&gt;2266755/2266755]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Text Editing
&lt;/h3&gt;

&lt;p&gt;Text editing tools like &lt;code&gt;nano&lt;/code&gt; and &lt;code&gt;vim&lt;/code&gt; come pre installed on most linux distributions. You can use &lt;code&gt;nano&lt;/code&gt; for basic text editing inside the terminal. &lt;br&gt;
&lt;strong&gt;Usage&lt;/strong&gt;: &lt;code&gt;nano [FILENAME]&lt;/code&gt;&lt;br&gt;
Alternatively you can use &lt;code&gt;mousepad&lt;/code&gt; for GUI based editing.&lt;br&gt;
&lt;strong&gt;Usage&lt;/strong&gt;: &lt;code&gt;mousepad [FILENAME]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabjgg2wj93yp2k3i0h57.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabjgg2wj93yp2k3i0h57.gif" alt="nano usage" width="600" height="337"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Working with Archives
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;tar&lt;/code&gt; command is used to work with &lt;code&gt;tar.gz&lt;/code&gt; format which is mostly used in linux OS(s).&lt;br&gt;
&lt;strong&gt;Usage&lt;/strong&gt;: &lt;code&gt;tar [options] [archive-file]&lt;/code&gt;&lt;br&gt;
You can use this command to unarchive files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-cvzf&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;archive].tar.gz &lt;span class="o"&gt;[&lt;/span&gt;FOLDER NAME]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;These are the commands I use for development using Ubuntu(WSL) and Arch(Bare Metal) as a daily driver. Fell free to comment for improvements and other relevant useful information that can be added 😄.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>developer</category>
      <category>bash</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
