<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Learning Notes on XEDCZQ Blog</title><link>https://xedczq.cn/en/tags/learning-notes/</link><description>Recent content in Learning Notes on XEDCZQ Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 22 May 2026 11:20:20 +0800</lastBuildDate><atom:link href="https://xedczq.cn/en/tags/learning-notes/index.xml" rel="self" type="application/rss+xml"/><item><title>python-basics</title><link>https://xedczq.cn/en/post/javatopython/</link><pubDate>Fri, 22 May 2026 11:20:20 +0800</pubDate><guid>https://xedczq.cn/en/post/javatopython/</guid><description>&lt;h1 id="python-basics"&gt;&lt;a href="#python-basics" class="header-anchor"&gt;&lt;/a&gt;Python Basics
&lt;/h1&gt;&lt;p&gt;After building several Java AI projects, I noticed that the demand for Python AI application development is broader in the market. Although I did use Python before, most of it was done through vibe coding, so my fundamentals were not solid. I am using this chance to systematically fill in Python basics.&lt;/p&gt;
&lt;h2 id="basic-variables-and-syntax-style"&gt;&lt;a href="#basic-variables-and-syntax-style" class="header-anchor"&gt;&lt;/a&gt;Basic Variables and Syntax Style
&lt;/h2&gt;&lt;p&gt;I first defined a few variables:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;money&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;50.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;小明&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Compared with Java, the most direct differences are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No &lt;code&gt;;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;No main-class entry structure&lt;/li&gt;
&lt;li&gt;No explicit variable type declaration when defining variables&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="for-loop-and-string-formatting"&gt;&lt;a href="#for-loop-and-string-formatting" class="header-anchor"&gt;&lt;/a&gt;for Loop and String Formatting
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; hello world&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I used &lt;code&gt;f-string&lt;/code&gt; here. Also, &lt;code&gt;print&lt;/code&gt; can use comma-separated arguments:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;money:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;money&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;My understanding is that this style is more direct and avoids frequent string concatenation as in Java.&lt;/p&gt;
&lt;h2 id="boolean-values-and-ifelse"&gt;&lt;a href="#boolean-values-and-ifelse" class="header-anchor"&gt;&lt;/a&gt;Boolean Values and if/else
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sig1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sig2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sig2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sig2 is true&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sig2 is false&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I also noticed Python is highly indentation-sensitive. The &lt;code&gt;if/else&lt;/code&gt; block is fully defined by indentation levels.&lt;/p&gt;
&lt;h2 id="functions-and-type-inspection"&gt;&lt;a href="#functions-and-type-inspection" class="header-anchor"&gt;&lt;/a&gt;Functions and Type Inspection
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&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="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;print_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;money&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;print_type&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;print_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At this stage, I mainly used this to get familiar with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Function definitions without mandatory return type declarations&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;type()&lt;/code&gt; to quickly inspect the real runtime type of variables&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="type-conversion"&gt;&lt;a href="#type-conversion" class="header-anchor"&gt;&lt;/a&gt;Type Conversion
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&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="nb"&gt;str&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This verifies numeric-to-string conversion using &lt;code&gt;str(a)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="identifier-and-naming-rules"&gt;&lt;a href="#identifier-and-naming-rules" class="header-anchor"&gt;&lt;/a&gt;Identifier and Naming Rules
&lt;/h2&gt;&lt;p&gt;The key rules I memorized today are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identifiers can consist of Chinese/English characters, digits, and underscores&lt;/li&gt;
&lt;li&gt;They cannot start with a digit&lt;/li&gt;
&lt;li&gt;They cannot use Python keywords&lt;/li&gt;
&lt;li&gt;Python is case-sensitive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Variable naming convention:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use lowercase letters&lt;/li&gt;
&lt;li&gt;Use underscores for multi-word names (&lt;code&gt;snake_case&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Invalid naming examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Names with special symbols such as &lt;code&gt;name!&lt;/code&gt;, &lt;code&gt;name@&lt;/code&gt;, &lt;code&gt;name#&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stage-summary"&gt;&lt;a href="#stage-summary" class="header-anchor"&gt;&lt;/a&gt;Stage Summary
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;First, remove Java-style boilerplate thinking&lt;/li&gt;
&lt;li&gt;Then, get used to Python indentation and dynamic typing&lt;/li&gt;
&lt;li&gt;Then, master the most common basics: loops, conditions, functions, and type conversion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, I will continue with lists/dicts, object-oriented programming, file handling, and common AI development libraries.&lt;/p&gt;</description></item></channel></rss>