summaryrefslogtreecommitdiffstats
path: root/thoughts/syntax/random-python-idiosyncrasies.html
diff options
context:
space:
mode:
Diffstat (limited to 'thoughts/syntax/random-python-idiosyncrasies.html')
-rw-r--r--thoughts/syntax/random-python-idiosyncrasies.html140
1 files changed, 104 insertions, 36 deletions
diff --git a/thoughts/syntax/random-python-idiosyncrasies.html b/thoughts/syntax/random-python-idiosyncrasies.html
index 80e4563..ba88071 100644
--- a/thoughts/syntax/random-python-idiosyncrasies.html
+++ b/thoughts/syntax/random-python-idiosyncrasies.html
@@ -12,6 +12,68 @@
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
+ pre > code.sourceCode { white-space: pre; position: relative; }
+ pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
+ pre > code.sourceCode > span:empty { height: 1.2em; }
+ code.sourceCode > span { color: inherit; text-decoration: inherit; }
+ div.sourceCode { margin: 1em 0; }
+ pre.sourceCode { margin: 0; }
+ @media screen {
+ div.sourceCode { overflow: auto; }
+ }
+ @media print {
+ pre > code.sourceCode { white-space: pre-wrap; }
+ pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
+ }
+ pre.numberSource code
+ { counter-reset: source-line 0; }
+ pre.numberSource code > span
+ { position: relative; left: -4em; counter-increment: source-line; }
+ pre.numberSource code > span > a:first-child::before
+ { content: counter(source-line);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ color: #aaaaaa;
+ }
+ pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
+ div.sourceCode
+ { }
+ @media screen {
+ pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
+ }
+ code span.al { color: #ff0000; font-weight: bold; } /* Alert */
+ code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
+ code span.at { color: #7d9029; } /* Attribute */
+ code span.bn { color: #40a070; } /* BaseN */
+ code span.bu { } /* BuiltIn */
+ code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
+ code span.ch { color: #4070a0; } /* Char */
+ code span.cn { color: #880000; } /* Constant */
+ code span.co { color: #60a0b0; font-style: italic; } /* Comment */
+ code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
+ code span.do { color: #ba2121; font-style: italic; } /* Documentation */
+ code span.dt { color: #902000; } /* DataType */
+ code span.dv { color: #40a070; } /* DecVal */
+ code span.er { color: #ff0000; font-weight: bold; } /* Error */
+ code span.ex { } /* Extension */
+ code span.fl { color: #40a070; } /* Float */
+ code span.fu { color: #06287e; } /* Function */
+ code span.im { } /* Import */
+ code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
+ code span.kw { color: #007020; font-weight: bold; } /* Keyword */
+ code span.op { color: #666666; } /* Operator */
+ code span.ot { color: #007020; } /* Other */
+ code span.pp { color: #bc7a00; } /* Preprocessor */
+ code span.sc { color: #4070a0; } /* SpecialChar */
+ code span.ss { color: #bb6688; } /* SpecialString */
+ code span.st { color: #4070a0; } /* String */
+ code span.va { color: #19177c; } /* Variable */
+ code span.vs { color: #4070a0; } /* VerbatimString */
+ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
</head>
<body>
@@ -22,64 +84,70 @@
<ul>
<li><a href="#strings-are-double-quoted.-keys-and-chars-are-single-quoted.">1) <em>Strings</em> are <em>double-quoted</em>. <em>Keys</em> and <em>chars</em> are <em>single-quoted</em>.</a></li>
<li><a href="#long-strings-belong-in-parentheses">2) Long strings belong in parentheses</a></li>
-<li><a href="#tabs-are-four-spaces-and-spaces-are-always-prefered-to-tabs">3) Tabs are four spaces and spaces are <em>ALWAYS</em> prefered to tabs</a></li>
+<li><a href="#tabs-are-four-spaces-and-spaces-are-always-preferred-to-tabs">3) Tabs are four spaces and spaces are <em>ALWAYS</em> preferred to tabs</a></li>
<li><a href="#always-add-spaces-between-arithmetic-but-never-for-brackets">4) Always add spaces between arithmetic, but never for brackets</a></li>
<li><a href="#everything-should-be-snake_case">5) EVERYTHING should be snake_case</a></li>
</ul></li>
</ul>
</nav>
<h1 id="coding-style-guide">Coding Style Guide</h1>
-<p>The purpose of this document is twofold: 1) To ensure that anyone who might like to make my code better understands why I write python the way I do 2) to ensure <em>I</em> adhere to my own style because I'm terribly inconsistent</p>
+<p>The purpose of this document is twofold:</p>
+<ol type="1">
+<li>To ensure that anyone who might like to make my code better understands why I write python the way I do</li>
+<li>To ensure <em>I</em> adhere to my own style because I'm terribly inconsistent</li>
+</ol>
<p>Being terribly inconsistent, the guidelines are not set in stone and if you have a good argument for doing things a particular, I don't really care.</p>
-<p><em>BUT</em> first and foremost, <em>code must comply with PEP8 first</em>. This is easy to automate. I like coala since it's friendly but there' plenty of advanced linters out there.</p>
+<p><em>BUT</em> first and foremost, <em>code must comply with PEP8 first</em>. This is easy to automate. I like <a href="https://pypi.org/project/black/">black</a> since it's easy to use but there' plenty of advanced linters out there.</p>
+<p>I usually invoke it like this to turn off forcing double quotes and force the line length to 72:</p>
+<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true"></a><span class="ex">black</span> -S -l 72 file.py</span></code></pre></div>
<p>That aside, I have the following idiosyncracies:</p>
<h2 id="strings-are-double-quoted.-keys-and-chars-are-single-quoted.">1) <em>Strings</em> are <em>double-quoted</em>. <em>Keys</em> and <em>chars</em> are <em>single-quoted</em>.</h2>
<p>This is really just because I like how C does it. And Cpython's C-based so why not?</p>
<p>Like so:</p>
-<pre class="code"><code>string = &quot;This is a phrase&quot;
-word = &quot;word&quot;
-cur_char = &#39;a&#39;
-newline = &#39;\n&#39; # note, two characters, but it&#39;s still ONE char out
-# keys are single-quoted to avoid confusion
-dictionary = { &#39;key&#39; &quot;1245dqw3w431&quot;, &#39;return&#39;: newline }</code></pre>
+<div class="sourceCode" id="cb2"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true"></a>string <span class="op">=</span> <span class="st">&quot;This is a phrase&quot;</span></span>
+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a>word <span class="op">=</span> <span class="st">&quot;word&quot;</span></span>
+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true"></a>cur_char <span class="op">=</span> <span class="st">&#39;a&#39;</span></span>
+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true"></a>newline <span class="op">=</span> <span class="st">&#39;</span><span class="ch">\n</span><span class="st">&#39;</span> <span class="co"># note, two characters, but it&#39;s still ONE char out</span></span>
+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true"></a><span class="co"># keys are single-quoted to avoid confusion</span></span>
+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true"></a>dictionary <span class="op">=</span> { <span class="st">&#39;key&#39;</span> <span class="st">&quot;1245dqw3w431&quot;</span>, <span class="st">&#39;return&#39;</span>: newline }</span></code></pre></div>
<p>The only exception is for strings with quotes in them (anything to avoid escapes, really)</p>
-<pre class="code"><code>quoted_string = (
- &#39;&quot;You miss 100% of the shots you don&#39;t take - Wayne Gretsky&quot;&#39;
- &#39; - Michael Scott&#39;
-)</code></pre>
+<div class="sourceCode" id="cb3"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true"></a>quoted_string <span class="op">=</span> (</span>
+<span id="cb3-2"><a href="#cb3-2" aria-hidden="true"></a> <span class="st">&#39;&quot;You miss 100</span><span class="sc">% o</span><span class="st">f the shots you don&#39;</span>t take <span class="op">-</span> Wayne Gretsky<span class="st">&quot;&#39;</span></span>
+<span id="cb3-3"><a href="#cb3-3" aria-hidden="true"></a><span class="st"> &#39; - Michael Scott&#39;</span></span>
+<span id="cb3-4"><a href="#cb3-4" aria-hidden="true"></a><span class="st">)</span></span></code></pre></div>
<p>That brings me to my next point.</p>
<h2 id="long-strings-belong-in-parentheses">2) Long strings belong in parentheses</h2>
<p>As in:</p>
-<pre class="code"><code>longboi = (
- &quot;This is a really long string usefull when making help menus. Be\n&quot;
- &quot;sure to leave s space at the end of each line, or add a new line\n&quot;
- &quot;when needed.\n\n&quot;
-
- &quot;Try your best to keep formatting accurate like this.&quot;
-)</code></pre>
-<h2 id="tabs-are-four-spaces-and-spaces-are-always-prefered-to-tabs">3) Tabs are four spaces and spaces are <em>ALWAYS</em> prefered to tabs</h2>
+<div class="sourceCode" id="cb4"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a>longboi <span class="op">=</span> (</span>
+<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a> <span class="st">&quot;This is a really long string usefull when making help menus. Be</span><span class="ch">\n</span><span class="st">&quot;</span></span>
+<span id="cb4-3"><a href="#cb4-3" aria-hidden="true"></a> <span class="st">&quot;sure to leave s space at the end of each line, or add a new line</span><span class="ch">\n</span><span class="st">&quot;</span></span>
+<span id="cb4-4"><a href="#cb4-4" aria-hidden="true"></a> <span class="st">&quot;when needed.</span><span class="ch">\n\n</span><span class="st">&quot;</span></span>
+<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a></span>
+<span id="cb4-6"><a href="#cb4-6" aria-hidden="true"></a> <span class="st">&quot;Try your best to keep formatting accurate like this.&quot;</span></span>
+<span id="cb4-7"><a href="#cb4-7" aria-hidden="true"></a>)</span></code></pre></div>
+<h2 id="tabs-are-four-spaces-and-spaces-are-always-preferred-to-tabs">3) Tabs are four spaces and spaces are <em>ALWAYS</em> preferred to tabs</h2>
<p>Again, see PEP8.</p>
<h2 id="always-add-spaces-between-arithmetic-but-never-for-brackets">4) Always add spaces between arithmetic, but never for brackets</h2>
<p>It's a pain to read:</p>
-<pre class="code"><code>1/(2*sqrt(pi))*exp(x**2)</code></pre>
+<div class="sourceCode" id="cb5"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true"></a><span class="dv">1</span><span class="op">/</span>(<span class="dv">2</span><span class="op">*</span>sqrt(pi))<span class="op">*</span>exp(x<span class="op">**</span><span class="dv">2</span>)</span></code></pre></div>
<p>Do this</p>
-<pre class="code"><code>1 / (2 * sqrt(pi)) * exp(x ** 2)</code></pre>
+<div class="sourceCode" id="cb6"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true"></a><span class="dv">1</span> <span class="op">/</span> (<span class="dv">2</span> <span class="op">*</span> sqrt(pi)) <span class="op">*</span> exp(x <span class="op">**</span> <span class="dv">2</span>)</span></code></pre></div>
<p>The same goes for logic operators</p>
-<pre class="code"><code>true &amp; false ^ true</code></pre>
+<div class="sourceCode" id="cb7"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true"></a>true <span class="op">&amp;</span> false <span class="op">^</span> true</span></code></pre></div>
<h2 id="everything-should-be-snake_case">5) EVERYTHING should be snake_case</h2>
<p>This is python. Unless there's a compatibility thing (like a library's code was written that way, or it matches an API variable), snake_case is preferred.</p>
-<pre class="code"><code>user_input = int(input()) # variable
-MAX_INPUT = 1000 # constant
-def judge_input(_input, _max): # function
- if _max &gt; _input:
- print(&quot;Too big!&quot;)
-
-judge_input(user_input, MAX_INPUT
-class Input_Judger: # a class
- # etc etc</code></pre>
+<div class="sourceCode" id="cb8"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true"></a>user_input <span class="op">=</span> <span class="bu">int</span>(<span class="bu">input</span>()) <span class="co"># variable</span></span>
+<span id="cb8-2"><a href="#cb8-2" aria-hidden="true"></a>MAX_INPUT <span class="op">=</span> <span class="dv">1000</span> <span class="co"># constant</span></span>
+<span id="cb8-3"><a href="#cb8-3" aria-hidden="true"></a><span class="kw">def</span> judge_input(_input, _max): <span class="co"># function</span></span>
+<span id="cb8-4"><a href="#cb8-4" aria-hidden="true"></a> <span class="cf">if</span> _max <span class="op">&gt;</span> _input:</span>
+<span id="cb8-5"><a href="#cb8-5" aria-hidden="true"></a> <span class="bu">print</span>(<span class="st">&quot;Too big!&quot;</span>)</span>
+<span id="cb8-6"><a href="#cb8-6" aria-hidden="true"></a></span>
+<span id="cb8-7"><a href="#cb8-7" aria-hidden="true"></a>judge_input(user_input, MAX_INPUT</span>
+<span id="cb8-8"><a href="#cb8-8" aria-hidden="true"></a><span class="kw">class</span> Input_Judger: <span class="co"># a class</span></span>
+<span id="cb8-9"><a href="#cb8-9" aria-hidden="true"></a> <span class="co"># etc etc</span></span></code></pre></div>
<p>Example exception:</p>
-<pre class="code"><code># this doesn&#39;t actually work, but you get the idea
-r = requests.get(&quot;www.debian.org&quot;)
-pageSize = r.json()[&#39;pageSize&#39;] # camel case ok</code></pre>
+<div class="sourceCode" id="cb9"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true"></a><span class="co"># this doesn&#39;t actually work, but you get the idea</span></span>
+<span id="cb9-2"><a href="#cb9-2" aria-hidden="true"></a>r <span class="op">=</span> requests.get(<span class="st">&quot;www.debian.org&quot;</span>)</span>
+<span id="cb9-3"><a href="#cb9-3" aria-hidden="true"></a>pageSize <span class="op">=</span> r.json()[<span class="st">&#39;pageSize&#39;</span>] <span class="co"># camel case ok</span></span></code></pre></div>
</body>
</html>