首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Python tokenize 模塊詳解:生成標記迭代器實現詞法分析

     編輯:程式設計疑難解答

模塊功能

tokenize 是 Python 標準庫,用於將 Python 源代碼分解為 **標記流**,返回一個 **迭代器**,每次調用 next() 產生一個 TokenInfo 對象,包含類型、字符串、行列位置等信息。

核心 API

  • tokenize.generate_tokens(readline):接收一個可調用對象(如文件對象的 readline 方法),返回迭代器。
  • tokenize.untokenize(iterable):逆操作,將標記序列還原為源代碼字符串。

示例代碼解析

import tokenize

# 打開文件獲取 readline 方法
with open('Yield.py', 'rb') as f:
    tokens = tokenize.generate_tokens(f.readline)
    for tok in tokens:
        print(tok)
        # TokenInfo(type=1, string='def', start=(1,0), end=(1,3), line='def foo():')

輸出包含:NAME、NUMBER、STRING、OP、NEWLINE、INDENT/DEDENT 等標記類型。

應用場景

  • **語法高亮**:編輯器根據標記類型著色。
  • **代碼靜態分析**:檢測未使用導入、命名規範違規。
  • **自動重構工具**:提取函數簽名、修改字面量。
  • **教學演示**:可視化 Python 詞法結構。

注意事項

  • 輸入必須為 **字節流**(rb 模式)或實現 readline 返回字節的對象。
  • Python 3.8+ 推薦使用 tokenize.open() 自動處理編碼聲明。
  • 標記類型常量定義在 token 模塊(如 token.NAME、token.OP)。

參考資源

博客詳解:Python tokenize 模塊使用詳解

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved