1. 程式人生 > >真香,理解記憶法學習Python基礎語法

真香,理解記憶法學習Python基礎語法

這篇文章很難寫!我最開始學 Python,和大多數人一樣,是看的菜鳥教程: 在寫完這篇文章的第一遍後,我發現並沒有寫出新意,很可能讀者看到後,會和我當初一樣,很快就忘了。我現在已經不是讀者而是作者了,我想我可以做出一些改變,降低閱讀門檻,加強理解記憶。 # 版本選擇 Python 有 2 個不相容的版本,Python2 和 Python3。Python2 已經逐漸被淘汰,現在只需要學 Python3 即可。 # 語法是什麼 先直觀感受一下,用不同程式語言在介面上打印出 HelloWorld 字樣: **C 語言** ```c #include int main(void) { printf("Hello World!"); return 0; } ``` **Python** ```python print("HelloWorld!") ``` 看到了麼,結果一樣,但是程式語言的寫法不一樣,就像中文和英文,同一個意思,卻是用不同字元表達出來的。語法就是用來告訴你該怎麼表達的一套規則。學 Python 只有懂 Python 語法,才能知道怎麼寫程式碼。 # 從一個例子講起 假設我們要用 Python 實現這樣一個功能,鍵盤輸入"大河向東流"後,螢幕上會顯示“天上的星星參北斗”。用 Python 實現的程式碼為: ```python # 獲取鍵盤輸入 pre_sentence = input() # 判斷如果輸入的句子是大河向東流 if pre_sentence == "大河向東流": # 在螢幕上列印天上的星星參北斗 print("天上的星星參北斗") ``` 這個例子涉及到這些名詞術語:編碼、識別符號、語句、縮排、程式碼塊、引號、註釋、空行、函式。 # 編碼 編碼,是指把人類語言編成計算機能懂的二進位制(010101 這種)。不同國家的字元是不一樣的,用來編碼的字符集也就不一樣。美國的字符集包括英文字母、標點符號字元、阿拉伯數字,叫做 ASCII。歐洲的字符集,加入了帶重音的字元、希臘字母等叫做,Latin-1。中國!加入了漢字!叫做 GB2312。後來加入了生僻字、繁體字及日韓漢字等,叫做 GBK。天下大亂,亂碼無法交流,ISO 國際標準化組織決定一統江湖,Unicode 誕生。再優化優化,UTF-8。 預設情況下,Python3 原始碼檔案都是以 UTF-8 編碼,字串都是 unicode 字串,讓全球不同國家無障礙程式設計。程式碼中既可以寫英文也可以寫中文,但是中文只能用來顯示和註釋,不決定程式執行。 # 識別符號 識別符號是程式設計時使用的名字,比如例子中的 `pre_sentence`。在 Python 中,名字由字母、數字、下劃線組成,不能以數字開頭,並且區分大小寫。比如以下是合法的: ``` a_12_b_ _a1 _A1 ``` 以下是非法的: ``` 1abc $ddd ``` 我們在寫程式碼的時候,經常需要取名字,取名最好具有業務意義。有些名字包含多個英文單詞,寫在一起不好閱讀,名字又不能包含空格,要麼首字母大寫,要麼用下劃線來分隔。現有的 Python 程式碼庫中,這兩種方式都存在,因為 Python 是由開源社群發展來的,五花八門,百花齊放。為了越來越規範,Google 制定了 PEP8 規範(Python Enhancement Proposal 8),建議大家用下劃線來分隔。 下劃線除了用來分隔多個單詞,在 Python 中還有更多的作用。單個下劃線開頭 `_foo` 代表私有的,只能“自己”用。單個下劃線結尾 `class_` 可以用來解決和 Python 已有名字衝突。雙下劃線 `__main__` 在 Python 中有極其特殊的作用。 Python 已經把有些名字用了,你不能再用,否則會衝突報錯。可以在 cmd 中輸入 `python` 進入 Python 後,輸入以下程式碼檢視哪些名字已經被用了: ```python >>> import keyword >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] ```
# 語句 交流不可能是按單詞來交流,而是按語句。Python 中一行程式碼就是一條語句,這是一般規定。也有少數例外,比如可以使用反斜槓(\\),把一條語句寫成多行: ```python total = item_one + \ item_two + \ item_three ``` 如果在 [], {}, 或 () 中,不用反斜槓(\\)也可以寫成多行: ```python total = ['item_one', 'item_two', 'item_three', 'item_four', 'item_five'] ``` 反之亦然,Python 中多條語句也是能寫成一行的(不推薦): ```python import sys; x = 'runoob'; sys.stdout.write(x + '\n') ``` # 縮排 有些話不是一句就能說完的,比如我現在說的這句,哈哈。為了程式碼有層次,閱讀更方便,程式語言會使用縮排來斷句。Python 的縮排有點異類,不是用花括號 `{}`,而是用 4 個空格,而且必須要縮排一致,否則就會報錯。比如: ```python if True: print ("Answer") print ("True") else: print ("Answer") # 沒有嚴格縮排,在執行時會報錯 print ("False") ``` 報錯: ```python IndentationError: unindent does not match any outer indentation level ``` 如果用 PyCharm,那麼就完全不用擔心這個問題了,因為它有智慧提示,在編寫的時候就能糾正過來。我已經完全適應了敲空格,為什麼空格鍵設計的那麼大?就是用來敲的! # 程式碼塊 “多條縮排相同的語句就叫做程式碼塊”,這是教程給的定義,我們平時說的程式碼塊,更多指的是相關聯的多行程式碼。比如,如果 xxx,那麼 xxx,否則 xxx: ```python if expression : suite else : suite ``` # 引號 引號常用來框住字串,Python 同時支援單引號、雙引號、三引號,只要保證引號的開始和結束一致就行: ```python word = 'word' sentence = "這是一個句子。" paragraph = """這是一個段落。 包含了多個語句""" ``` 單行用單引號或雙引號,多行用三引號。我一般會優先用雙引號,看著規範(毫無依據,哈哈哈)。 # 註釋 Python 的單行註釋用 #: ```python # 第一個註釋 print ("Hello, Python!") # 第二個註釋 ``` Python 的多行註釋用三個單引號或三個雙引號: ```python ''' 這是多行註釋,使用單引號。 這是多行註釋,使用單引號。 這是多行註釋,使用單引號。 ''' """ 這是多行註釋,使用雙引號。 這是多行註釋,使用雙引號。 這是多行註釋,使用雙引號。 """ ``` # 空行 空行也是 Python 程式碼的一部分,既能分隔不同業務程式碼,也能提高閱讀體驗。不過不需要刻意記哪些地方需要多少空行,在 PyCharm 中 CTRL + ALT + SHIFT + L 組合鍵可以快速格式化為符合 PEP8 規範的程式碼,標準化的空行一目瞭然:
# 函式 例子中 `input()`、`print()` 這種 `名字 + ()` 形式的叫做函式,寫 Python 經常會用到函式,也需要我們自己寫函式。函式是一塊程式碼片段,有輸入,有輸出,可以重複使用,有特定功能,比如 `input()` 用來鍵盤輸入,`print()` 用來列印到螢幕顯示。我們寫 Python 程式碼都是在 .py 檔案中來寫的,每個 .py 檔案在 Python 中叫做模組。模組多了以後,我們需要把它們按照業務意義分別放到不同的目錄進行管理,有些目錄中包含 `__init__.py` 檔案,這種目錄叫做包。 # import 與 from...import 模組與模組之間是分離的,除了 Python 已經為我們提供的基礎語法,如果想用其他模組的程式碼,就需要使用 `import` 或 `from..import` 來匯入。視使用需要不同,匯入格式也不同: 將整個模組( somemodule )匯入,格式為: `import somemodule` 從某個模組中匯入某個函式,格式為: `from somemodule import somefunction` 從某個模組中匯入多個函式,格式為: `from somemodule import firstfunc, secondfunc, thirdfunc` 將某個模組中的全部函式匯入,格式為: `from somemodule import *` # 動態語言 Python 是動態語言,不需要指定資料型別。比如: ```python a = 1 b = "string" ``` # 強型別語言 Python 是強型別語言,經常會有人搞錯。比如: ``` a = 1 b = "string" c = a + b ``` 是會報錯的: ``` TypeError: unsupported operand type(s) for +: 'int' and 'str' ``` 不是相同的型別不能直接相加。 JavaScript 才是弱型別語言,不同資料型別可以直接相加。 # 小結 本文雖然參考了菜鳥教程,但是重新組織了寫作手法。先介紹了版本選擇和語法的概念,接著從一個例子講起,把相關的概念挨個講解了一遍,然後簡單提到了模組和包,引出了 import 的原因,最後說明了 Python 是動態、強型別語言。 參考資料: https://www.runoob.com/python3/python3-basic-syn