最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python縮進規(guī)則與代碼塊規(guī)范的實現

 更新時間:2026年06月22日 09:55:38   作者:星河耀銀海  
本文介紹了Python中獨特的縮進規(guī)則與代碼塊規(guī)范,Python通過縮進而非花括號劃分代碼塊,強制代碼風格統一,文章還列舉了常見的縮進錯誤,感興趣的可以了解一下

一、開篇:Python最獨特的設計

如果你問我Python和其他編程語言最明顯的區(qū)別是什么,我會毫不猶豫地說:縮進。

在C、Java、JavaScript等大多數語言中,縮進只是"看起來好看"的可選格式,實際的代碼塊靠花括號 {} 來劃分。這些語言中,你把代碼全寫在一行也是合法的(只是沒人這么寫)。

但在Python中,縮進就是語法本身。代碼塊的劃分、語句的歸屬關系,全靠縮進來決定。這個設計非常大膽,問世之初爭議很大,但事實證明它是Python成功的關鍵原因之一。

?? 縮進強制代碼看起來整潔。你在任何地方看到的Python代碼,都有著高度一致的視覺風格。這是一種"代碼可讀性"的制度性保障。

二、縮進的基本規(guī)則

2.1 用空格還是Tab

這是Python社區(qū)最經典的"圣戰(zhàn)"話題之一。答案是:

? PEP 8(Python官方代碼風格指南)推薦使用4個空格

# 推薦:4個空格
if True:
    print('縮進了4個空格')

# 不推薦:Tab
if True:
	print('縮進了1個Tab')

?? 關鍵規(guī)則:不要混用空格和Tab! 在一個文件中,要么全用空格,要么全用Tab?;煊脮е?TabError: inconsistent use of tabs and spaces in indentation

所有現代Python IDE(PyCharm、VS Code)在你按Tab鍵時默認插入4個空格而不是Tab字符。這個設置一般在IDE的"縮進"選項中可以看到。

2.2 縮進層級

同一個代碼塊中的所有語句必須使用相同數量的縮進

# ? 正確:同一代碼塊使用相同的縮進(4個空格)
if True:
    print('第一條語句')
    print('第二條語句')
    print('第三條語句')

# ? 錯誤:同一個代碼塊縮進不一致
if True:
    print('第一條語句')
      print('第二條語句')  # 縮進多了2個空格,報錯!
    print('第三條語句')

2.3 什么情況下需要縮進

以下Python語句后面需要縮進,因為它們都會引入一個新的代碼塊:

關鍵字場景示例
if/elif/else條件判斷if x > 0:
for/while循環(huán)for i in range(10):
def函數定義def my_function():
class類定義class MyClass:
try/except/finally異常處理try:
with上下文管理器with open('file'):
match/case模式匹配match value:

這些關鍵字后面都有一個冒號 :,冒號就是"接下來要縮進"的信號。

# 冒號后面必須縮進
if score >= 60:         # 冒號
    print('及格')       # 縮進4個空格,屬于if代碼塊

print('判斷結束')       # 沒有縮進,不屬于if代碼塊

三、縮進的嵌套

3.1 多層縮進

當代碼邏輯嵌套時,每嵌套一層就增加一級縮進:

def analyze_score(name, score):
    """分析學生成績"""
    if score >= 60:                          # 0級縮進(函數內第1層)
        print(f'{name} 及格了')               # 1級縮進(if內)
        if score >= 90:                      # 1級縮進(if內,另一個if)
            print('太棒了,成績優(yōu)秀!')        # 2級縮進(內層if內)
            if score == 100:                 # 2級縮進(內層if內)
                print('滿分!你是傳奇!')       # 3級縮進
        elif score >= 80:                    # 1級縮進
            print('成績良好,繼續(xù)加油!')       # 2級縮進
        else:                                # 1級縮進
            print('成績及格,還有提升空間')     # 2級縮進
    else:                                    # 0級縮進
        print(f'{name} 不及格,需要努力!')    # 1級縮進
        if score < 30:                       # 1級縮進
            print('成績太低,建議找老師輔導')   # 2級縮進

    # 0級縮進——回到函數體層級
    print(f'{name} 的成績分析完畢')           # 1級縮進


# 調用函數
analyze_score('小明', 95)

?? 縮進就像俄羅斯套娃。外層套內層,內層再套內層??s進級別告訴你"當前代碼屬于哪一層"。

3.2 縮進的可視化理解

把上面的代碼用方括號標注一下代碼塊的邊界:

def analyze_score(name, score):
│   如果 score >= 60:
│   │   print('及格')
│   │   如果 score >= 90:
│   │   │   print('優(yōu)秀')
│   │   │   如果 score == 100:
│   │   │   │   print('滿分')
│   │   否則如果 score >= 80:
│   │   │   print('良好')
│   │   否則:
│   │   │   print('及格')
│   否則:
│   │   print('不及格')
│   │   如果 score < 30:
│   │   │   print('太低')
│   print('分析完畢')

每個 代表一級縮進。同一豎線上的代碼屬于同一代碼塊。

四、常見的縮進錯誤

4.1 IndentationError: expected an indented block

這個錯誤發(fā)生在:寫了冒號,但下一行沒有縮進。

>>> if True:
>>> print('hello')
# IndentationError: expected an indented block

? 解決方法:在冒號后面按回車,然后加上縮進:

if True:
    print('hello')

4.2 IndentationError: unexpected indent

這個錯誤發(fā)生在:不該縮進的地方縮進了。

>>> print('hello')
>>>     print('world')
# IndentationError: unexpected indent

通常出現在縮進層級搞混的時候:

# ? 錯誤:第二個print不應該縮進
def greet():
    print('hello')
        print('world')  # 這一行多縮進了!

# ? 正確:同級代碼使用相同的縮進
def greet():
    print('hello')
    print('world')

4.3 TabError: inconsistent use of tabs and spaces

混用了Tab和空格:

# ? 第2行用了Tab,第3行用了空格——混用了!
if True:
	print('用Tab縮進')   # Tab
    print('用空格縮進')   # 4個空格

? 現代的IDE通常會自動統一縮進方式。如果你手動用文本編輯器寫代碼,建議設置編輯器"將Tab轉換為空格"。

4.4 縮進導致的邏輯錯誤

這是最隱蔽的一類錯誤——代碼能正常運行,但邏輯和你想的不一樣:

# 你能看出這個程序的bug嗎?
total = 0
for i in range(1, 11):
    total += i
    print(f'當前累加到{i},總和為{total}')
    print('循環(huán)體內的最后一行')

print(f'最終結果:{total}')

上面這段是正確的。但看下面這個:

# 這個程序的輸出和你想的一樣嗎?
total = 0
for i in range(1, 11):
    total += i
print(f'當前累加到{i},總和為{total}')    # 注意:這行在循環(huán)外面!
print('循環(huán)結束')

第二個程序中,print 語句沒有縮進在循環(huán)內部,所以它只會在循環(huán)完全結束之后執(zhí)行一次,而不是每次循環(huán)都執(zhí)行。但代碼不會報錯——這是個邏輯bug。

五、代碼塊:Python的組織單元

5.1 什么是一個代碼塊

代碼塊是一組邏輯相關的語句,它們有相同的縮進級別。每當Python遇到一個冒號,它就期待下面出現一個縮進的代碼塊。

# if語句引入的代碼塊
if condition:
    statement1     # 這兩行有相同的縮進,
    statement2     # 它們屬于同一個代碼塊

# for循環(huán)引入的代碼塊
for item in sequence:
    process(item)  # 循環(huán)體代碼塊
    log(item)

# 函數定義引入的代碼塊
def my_function():
    setup()        # 函數體代碼塊
    result = calculate()
    return result

5.2 代碼塊可以嵌套

def outer_function():
    """外層函數"""
    print('進入外層函數')

    def inner_function():
        """內層函數——嵌套在外層函數內部"""
        print('進入內層函數')
        for i in range(3):
            print(f'內層循環(huán):{i}')
        print('離開內層函數')

    print('調用內層函數之前')
    inner_function()
    print('離開外層函數')

outer_function()

輸出:

進入外層函數
調用內層函數之前
進入內層函數
內層循環(huán):0
內層循環(huán):1
內層循環(huán):2
離開內層函數
離開外層函數

?? 這個例子展示了幾層嵌套:外層函數體內有內層函數定義,內層函數體內有for循環(huán),for循環(huán)體內有print語句。每一層都對應一級縮進。

5.3 空代碼塊:pass語句

有時你需要一個代碼塊占位(函數還沒想好怎么寫),但不能讓它空著。這時用 pass

# ? 錯誤:代碼塊為空
def function_not_ready_yet():
    # 這里什么也沒有——報錯!

# ? 正確:用pass占位
def function_not_ready_yet():
    pass    # 占位符,表示"這里以后會寫代碼"

# pass的其他使用場景
if condition_not_met_yet:
    pass    # 暫時不知道條件滿足時該做什么

class FutureClass:
    pass    # 類的骨架,以后再填充

for item in large_list:
    if item is None:
        pass    # 跳過None值,不做任何處理
    else:
        process(item)

六、PEP 8縮進規(guī)范詳解

PEP 8是Python的官方代碼風格指南,它關于縮進有以下規(guī)定:

6.1 基本規(guī)則

  • 每個縮進級別使用4個空格
  • 不要使用Tab,或者在IDE中設置Tab自動轉4個空格
  • 同一文件中保持縮進方式一致

6.2 續(xù)行縮進

當一行代碼太長需要換行時,續(xù)行有兩種縮進方式:

方式一:與開括號對齊

# 續(xù)行與第一個括號后面的內容對齊
result = some_function(param_one, param_two,
                       param_three, param_four)

方式二:懸掛縮進

# 續(xù)行額外縮進一級(4個空格)
result = some_function(
    param_one, param_two,
    param_three, param_four
)

兩者都可以,但在同一個項目中要保持一致。

6.3 長if語句的換行

# 當if條件太長時
if (student_score >= 60
        and student_attendance >= 0.8
        and not student_is_suspended
        and course_is_available):
    print('該學生可以參加期末考試')

用括號把條件包裹起來,然后在合適的位置換行。注意續(xù)行要額外縮進以示區(qū)分。

6.4 空行的使用

PEP 8不僅定義了縮進,還定義了空行的使用:

import os
import sys
                                # 兩個空行
class MyClass:
    """類的文檔字符串"""
                                # 一個空行
    def __init__(self):
        self.data = []
                                # 一個空行
    def add_data(self, item):
        """添加數據"""
        self.data.append(item)
                                # 一個空行
    def get_data(self):
        """獲取數據"""
        return self.data
                                # 兩個空行
def standalone_function():
    """獨立的函數"""
    pass

規(guī)則總結:

  • 頂層函數和類之間:兩個空行
  • 類中的方法之間:一個空行
  • 函數/方法內部邏輯段落之間:一個空行

七、不同語言縮進對比

了解其他語言的做法,能幫助你更好地理解Python為什么選擇縮進作為語法:

C語言——花括號,縮進可選:

if (x > 0) {
    printf("positive\n");
    printf("this is inside if\n");
}
printf("this is outside if\n");

Java語言——花括號,縮進可選:

if (x > 0) {
    System.out.println("positive");
}

Python——縮進就是語法:

if x > 0:
    print('positive')

在C/Java中,下面的兩種寫法都是合法的(雖然第二種很難看):

// 寫法一(正常)
if (x > 0) {
    printf("yes");
}

// 寫法二(合法但不推薦)
if (x > 0) { printf("yes"); }

但在Python中,你不能省略縮進來壓縮代碼——縮進是語法的一部分,不是可選的格式。

?? 這種設計帶來的好處是:你看到的代碼結構和代碼的實際結構永遠是一致的。不存在"縮進看起來在循環(huán)里,但代碼實際在循環(huán)外"的情況。在C/Java中,這種縮進和實際結構不一致的問題是很多bug的來源。

八、IDE中的縮進助手

8.1 VS Code中的縮進設置

在VS Code中,打開 設置,搜索"縮進":

{
    "[python]": {
        "editor.tabSize": 4,
        "editor.insertSpaces": true,
        "editor.detectIndentation": true
    },
    "editor.renderWhitespace": "boundary"
}
  • tabSize: 4:Tab鍵插入/刪除4個空格
  • insertSpaces: true:按Tab鍵插入空格而非Tab字符
  • detectIndentation: true:自動檢測文件的縮進風格

8.2 PyCharm中的縮進設置

文件 → 設置 → 編輯器 → 代碼風格 → Python

Tab大?。?
縮進:4
續(xù)行縮進:8
使用Tab字符:[取消勾選]

8.3 可視化空格

建議在編輯器中開啟"顯示空白字符"的功能,這樣你就能看到每個空格和Tab:

  • VS Code:View → Render Whitespace
  • PyCharm:View → Active Editor → Show Whitespaces

開啟后,空格顯示為灰色小點(·),Tab顯示為灰色箭頭()。

九、實戰(zhàn):重構混亂縮進的代碼

9.1 原始混亂代碼

def process_students(students):
    passed = []
failed = []
for student in students:
        if student['score'] >= 60:
            passed.append(student)
    else:
        failed.append(student)
    return passed, failed

這段代碼縮進混亂,運行會報 IndentationError。

9.2 修復后的代碼

def process_students(students):
    """處理學生列表,分開及格和不及格的學生"""
    passed = []
    failed = []

    for student in students:
        if student['score'] >= 60:
            passed.append(student)
        else:
            failed.append(student)

    return passed, failed


# 測試
students = [
    {'name': '小明', 'score': 85},
    {'name': '小紅', 'score': 42},
    {'name': '小剛', 'score': 96},
    {'name': '小麗', 'score': 58},
]

passed, failed = process_students(students)
print(f'及格的學生:{[s["name"] for s in passed]}')
print(f'不及格的學生:{[s["name"] for s in failed]}')

9.3 使用IDE自動格式化

選中所有代碼,按 Ctrl + Alt + L(PyCharm)或 Shift + Alt + F(VS Code),IDE會自動修復縮進問題。

?? 養(yǎng)成一個好習慣:寫完一段代碼后,按快捷鍵格式化一下。這能自動修復縮進和其他格式問題。

十、本篇小結

? Python的縮進規(guī)則是它最獨特的設計,也是初學者最容易踩坑的地方。核心要點:

  1. 4個空格 = 1級縮進(PEP 8標準)
  2. 冒號 : 后面必須縮進,開始一個新的代碼塊
  3. 同級代碼塊必須保持相同縮進
  4. 不要混用Tab和空格(IDE中設置Tab轉4空格)
  5. 空代碼塊用 pass 占位
  6. 縮進決定邏輯歸屬——不恰當的縮進可能導致代碼能運行但邏輯不對

?? 縮進規(guī)則是Python的"第一道門檻",一旦掌握了,你就會發(fā)現它是一個非常有價值的設計——讓你的代碼天然整潔、統一、可讀。

到此這篇關于Python縮進規(guī)則與代碼塊規(guī)范的實現的文章就介紹到這了,更多相關Python縮進規(guī)則與代碼塊規(guī)范內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解python?flask是如何預防CSRF攻擊

    詳解python?flask是如何預防CSRF攻擊

    CSRF(Cross-site?request?forgery)攻擊是一種常見的網絡安全漏洞,它可以通過欺騙用戶執(zhí)行惡意請求來攻擊?Web?應用程序,本篇文章將介紹python?flask是如何預防CSRF攻擊,需要的朋友可以參考下
    2024-04-04
  • Python虛擬機棧幀對象及獲取源碼學習

    Python虛擬機棧幀對象及獲取源碼學習

    這篇文章主要為大家介紹了Python虛擬機棧幀對象及獲取源碼學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python3日期與時間戳轉換的幾種方法詳解

    Python3日期與時間戳轉換的幾種方法詳解

    我們可以利用內置模塊 datetime 獲取當前時間,然后將其轉換為對應的時間戳。這篇文章主要介紹了Python3日期與時間戳轉換的幾種方法,需要的朋友可以參考下
    2019-06-06
  • Python實現屏幕截圖的兩種方式

    Python實現屏幕截圖的兩種方式

    這篇文章主要介紹了Python實現屏幕截圖的兩種方式及對這兩者的特點和用法進行詳細解釋,感興趣的朋友一起看看
    2018-02-02
  • Python選擇排序、冒泡排序、合并排序代碼實例

    Python選擇排序、冒泡排序、合并排序代碼實例

    這篇文章主要介紹了Python選擇排序、冒泡排序、合并排序代碼實例,本文直接給出實現代碼,需要的朋友可以參考下
    2015-04-04
  • python?中的?return?解析

    python?中的?return?解析

    這篇文章主要介紹了python?中的?return?解析,return?語句用于退出函數,向調用方返回一個表達式。執(zhí)行到?return?語句時,會退出函數,return?之后的語句不再執(zhí),下文下邊就利用舉例給大家講解該內容得相關資料,需要的小伙伴可以參考一下
    2022-02-02
  • django model object序列化實例

    django model object序列化實例

    這篇文章主要介紹了django model object序列化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python中Django文件上傳方法詳解

    python中Django文件上傳方法詳解

    在本篇文章里小編給大家整理了一篇關于python中Django文件上傳方法,有興趣的朋友們可以學習下。
    2020-08-08
  • Python實現賬號密碼輸錯三次即鎖定功能簡單示例

    Python實現賬號密碼輸錯三次即鎖定功能簡單示例

    這篇文章主要介紹了Python實現賬號密碼輸錯三次即鎖定功能,結合實例形式分析了Python文件讀取、流程控制、數據判斷等相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • Python引用類型和值類型的區(qū)別與使用解析

    Python引用類型和值類型的區(qū)別與使用解析

    這篇文章主要介紹了Python引用類型和值類型的區(qū)別與使用解析,需要的朋友可以參考下
    2017-10-10

最新評論

南丹县| 淮阳县| 浦城县| 嘉定区| 太白县| 剑河县| 土默特右旗| 论坛| 城口县| 会理县| 封丘县| 泽库县| 班戈县| 古交市| 浮梁县| 连州市| 湖北省| 桐梓县| 玉屏| 房产| 班戈县| 七台河市| 台山市| 乐业县| 慈利县| 岑巩县| 通许县| 锡林浩特市| 民县| 安达市| 花莲市| 普安县| 金湖县| 淳化县| 肇东市| 获嘉县| 平凉市| 沂南县| 城口县| 白银市| 常宁市|