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


這篇文章很難寫!我最開始學 Python,和大多數人一樣,是看的菜鳥教程:

image-20201202093309781

在寫完這篇文章的第一遍后,我發現並沒有寫出新意,很可能讀者看到后,會和我當初一樣,很快就忘了。我現在已經不是讀者而是作者了,我想我可以做出一些改變,降低閱讀門檻,加強理解記憶。

版本選擇

Python 有 2 個不兼容的版本,Python2 和 Python3。Python2 已經逐漸被淘汰,現在只需要學 Python3 即可。

語法是什么

先直觀感受一下,用不同編程語言在界面上打印出 HelloWorld 字樣:

C 語言

#include <stdio.h>
int main(void)
{
    printf("Hello World!");
    return 0;
}

Python

print("HelloWorld!")

看到了么,結果一樣,但是編程語言的寫法不一樣,就像中文和英文,同一個意思,卻是用不同字符表達出來的。語法就是用來告訴你該怎么表達的一套規則。學 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 后,輸入以下代碼查看哪些名字已經被用了:

>>> 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 中一行代碼就是一條語句,這是一般規定。也有少數例外,比如可以使用反斜杠(\),把一條語句寫成多行:

total = item_one + \
        item_two + \
        item_three

如果在 [], {}, 或 () 中,不用反斜杠(\)也可以寫成多行:

total = ['item_one', 'item_two', 'item_three',
         'item_four', 'item_five']

反之亦然,Python 中多條語句也是能寫成一行的(不推薦):

import sys; x = 'runoob'; sys.stdout.write(x + '\n')

縮進

有些話不是一句就能說完的,比如我現在說的這句,哈哈。為了代碼有層次,閱讀更方便,編程語言會使用縮進來斷句。Python 的縮進有點異類,不是用花括號 {},而是用 4 個空格,而且必須要縮進一致,否則就會報錯。比如:

if True:
    print ("Answer")
    print ("True")
else:
    print ("Answer")
    # 沒有嚴格縮進,在執行時會報錯
  print ("False")

報錯:

IndentationError: unindent does not match any outer indentation level

如果用 PyCharm,那么就完全不用擔心這個問題了,因為它有智能提示,在編寫的時候就能糾正過來。我已經完全適應了敲空格,為什么空格鍵設計的那么大?就是用來敲的!

代碼塊

“多條縮進相同的語句就叫做代碼塊”,這是教程給的定義,我們平時說的代碼塊,更多指的是相關聯的多行代碼。比如,如果 xxx,那么 xxx,否則 xxx:

if expression : 
   suite
else : 
   suite

引號

引號常用來框住字符串,Python 同時支持單引號、雙引號、三引號,只要保證引號的開始和結束一致就行:

word = 'word'
sentence = "這是一個句子。"
paragraph = """這是一個段落。
包含了多個語句"""

單行用單引號或雙引號,多行用三引號。我一般會優先用雙引號,看着規范(毫無依據,哈哈哈)。

注釋

Python 的單行注釋用 #:

# 第一個注釋
print ("Hello, Python!")  # 第二個注釋

Python 的多行注釋用三個單引號或三個雙引號:

'''
這是多行注釋,使用單引號。
這是多行注釋,使用單引號。
這是多行注釋,使用單引號。
'''

"""
這是多行注釋,使用雙引號。
這是多行注釋,使用雙引號。
這是多行注釋,使用雙引號。
"""

空行

空行也是 Python 代碼的一部分,既能分隔不同業務代碼,也能提高閱讀體驗。不過不需要刻意記哪些地方需要多少空行,在 PyCharm 中 CTRL + ALT + SHIFT + L 組合鍵可以快速格式化為符合 PEP8 規范的代碼,標准化的空行一目了然:

函數

例子中 input()print() 這種 名字 + () 形式的叫做函數,寫 Python 經常會用到函數,也需要我們自己寫函數。函數是一塊代碼片段,有輸入,有輸出,可以重復使用,有特定功能,比如 input() 用來鍵盤輸入,print() 用來打印到屏幕顯示。我們寫 Python 代碼都是在 .py 文件中來寫的,每個 .py 文件在 Python 中叫做模塊。模塊多了以后,我們需要把它們按照業務意義分別放到不同的目錄進行管理,有些目錄中包含 __init__.py 文件,這種目錄叫做包。

import 與 from...import

模塊與模塊之間是分離的,除了 Python 已經為我們提供的基礎語法,如果想用其他模塊的代碼,就需要使用 importfrom..import 來導入。視使用需要不同,導入格式也不同:

將整個模塊( somemodule )導入,格式為: import somemodule

從某個模塊中導入某個函數,格式為: from somemodule import somefunction

從某個模塊中導入多個函數,格式為: from somemodule import firstfunc, secondfunc, thirdfunc

將某個模塊中的全部函數導入,格式為: from somemodule import *

動態語言

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-syntax.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM