動手實踐:如何提取Python代碼中的字符串變量的值

要提取Python代碼中所有變量類型為字符串的變量的值,但不執行代碼(避免安全風險),可以通過靜態分析代碼的抽象語法樹(AST)來實現。以下是完整的解決方案:

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術!

往期文章推薦:

  • 20.條件概率:不確定性決策的基石
  • 19.深度解讀概率與證據權重 -Probability and the Weighing of Evidence
  • 18.WOE值:風險建模中的“證據權重”量化術——從似然比理論到FICO評分卡實踐
  • 17.KS值:風控模型的“風險照妖鏡”
  • 16.如何量化違約風險?信用評分卡的開發全流程拆解
  • 15.CatBoost:征服類別型特征的梯度提升王者
  • 14.XGBoost:梯度提升的終極進化——統治Kaggle的算法之王
  • 13.LightGBM:極速梯度提升機——結構化數據建模的終極武器
  • 12.PAC 學習框架:機器學習的可靠性工程
  • 11.Boosting:從理論到實踐——集成學習中的偏差征服者
  • 10.GBDT:梯度提升決策樹——集成學習中的預測利器
  • 9.集成學習基礎:Bagging 原理與應用
  • 8.隨機森林詳解:原理、優勢與應用實踐
  • 7.經濟學神圖:洛倫茲曲線
  • 6.雙生“基尼”:跨越世紀的術語撞車與學科分野
  • 5.CART算法全解析:分類回歸雙修的決策樹之王
  • 4.C4.5算法深度解析:決策樹進化的里程碑
  • 3.決策樹:化繁為簡的智能決策利器
  • 2.深入解析ID3算法:信息熵驅動的決策樹構建基石
  • 1.類圖:軟件世界的“建筑藍圖”
import astdef extract_string_variables(code):"""從Python代碼中提取所有賦值為字符串的變量值(不執行代碼)返回格式: [(變量名, 字符串值), ...]"""try:tree = ast.parse(code)except SyntaxError as e:return f"語法錯誤: {e}"results = []# 遞歸處理賦值目標def process_target(target, value):# 處理簡單變量賦值 (x = "value")if isinstance(target, ast.Name):if isinstance(value, ast.Str):results.append((target.id, value.s))elif isinstance(value, ast.Constant) and isinstance(value.value, str):results.append((target.id, value.value))# 處理元組解包賦值 (x, y = "a", "b")elif isinstance(target, ast.Tuple):if isinstance(value, ast.Tuple) and len(target.elts) == len(value.elts):for t, v in zip(target.elts, value.elts):process_target(t, v)# 遍歷AST節點for node in ast.walk(tree):# 處理賦值語句if isinstance(node, ast.Assign):for target in node.targets:process_target(target, node.value)# 處理函數參數默認值elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):args = node.args# 處理位置參數默認值defaults = args.defaultsnum_pos_args = len(args.args)num_defaults = len(defaults)start_index = num_pos_args - num_defaultsfor i in range(start_index, num_pos_args):arg_name = args.args[i].argdefault_val = defaults[i - start_index]if isinstance(default_val, ast.Str):results.append((arg_name, default_val.s))elif isinstance(default_val, ast.Constant) and isinstance(default_val.value, str):results.append((arg_name, default_val.value))# 處理關鍵字參數默認值for j, kwarg in enumerate(args.kwonlyargs):default_val = args.kw_defaults[j]if default_val and (isinstance(default_val, ast.Str) or (isinstance(default_val, ast.Constant) and isinstance(default_val.value, str)):value = default_val.s if isinstance(default_val, ast.Str) else default_val.valueresults.append((kwarg.arg, value))return results# 示例用法
if __name__ == "__main__":code = """name = "Alice"age = 30msg = "Hello, " + namex, y = "X", "Y"title = "Manager"def greet(msg="Default greeting"):local = "inside function"class MyClass:class_var = "Class value""""print(extract_string_variables(code))

輸出示例:

[('name', 'Alice'),('x', 'X'),('y', 'Y'),('title', 'Manager'),('msg', 'Default greeting'),('class_var', 'Class value')
]

功能說明:

  1. 安全靜態分析:使用AST解析代碼,不執行任何代碼,避免安全風險
  2. 識別場景
    • 簡單賦值:var = "string"
    • 鏈式賦值:a = b = "value"
    • 元組解包:x, y = "a", "b"
    • 函數參數默認值:def func(param="default")
    • 類屬性賦值:class_var = "value"
  3. 忽略內容
    • 非字符串賦值(整數、變量、表達式等)
    • 動態生成的字符串
    • 函數/方法內部的局部變量(除非是參數默認值)

注意事項:

  1. 只能識別直接賦值的字符串字面量
  2. 無法識別動態生成的字符串(如f"Hello {name}"
  3. 函數/類內部的局部變量不會被捕獲(參數默認值除外)
  4. 返回結果包含變量名和對應的字符串值元組列表

此方法通過Python標準庫的ast模塊實現,無需額外依賴,安全可靠地提取代碼中的字符串賦值信息。

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87002.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python中字符串isalpha()函數詳解

在 Python 中,isalpha() 是字符串(string)類型的內置方法,用于檢查字符串中的所有字符是否都是字母字符(alphabetic character)。以下是詳細說明: 一、基本功能 返回值:布爾值&…

Gradio全解13——MCP詳解(4)——TypeScript包命令:npm與npx

Gradio全解13——MCP詳解(4)——TypeScript包命令:npm與npx 第13章 MCP詳解13.4 TypeScript包命令:npm與npx13.4.1 概念區分1. npm概念與運行邏輯2. npx概念及特點 13.4.2 操作示例1. 使用npm執行包2. 使用npx執行包3. 常用npm命令…

《推客小程序全鏈路開發指南:從架構設計到裂變運營》

在移動互聯網流量紅利逐漸消退的今天,如何低成本獲客成為企業營銷的核心痛點。推客小程序作為一種基于社交關系的裂變營銷工具,正成為企業突破增長瓶頸的利器。本文將為您全面解析推客小程序的開發定制全流程,幫助您打造專屬的社交裂變營銷平…

中鈞科技參加中亞數字經濟對話會,引領新疆企業數字化新征程!

6月27 日,烏魯木齊成為數字經濟領域的焦點,中國新疆 - 中亞國家數字經濟和數字貿易企業對話會在此盛大舉行。 來自中亞國家及新疆數字經濟領域的100 余位核心代表齊聚一堂,圍繞數字經濟時代的機遇、挑戰與策略展開深度探討。 本次對話會由新…

k8s一鍵部署tongweb企業版7049m6(by why+lqw)

聲明 1.此貼僅供參考,請根據自身需求在測試環境測試和修改。 安裝準備 1.獲取對應的安裝包和授權,并將授權和安裝包放在同一個目錄下 2.docekr已配置遠程倉庫 3.提前拉取jdk的鏡像(這里配置了使用openjdk:8) 安裝 將以下內容復制到k8s_…

Qt 與 Halcon 聯合開發六:基于海康SDK設計完整的相機類【附源碼】

在現代工業自動化、機器人視覺、等領域,相機模塊的作用至關重要。通過相機模塊采集到的圖像數據,我們能夠進行一系列的圖像處理和分析。為了高效地控制相機和處理圖像,本篇文章將介紹如何使用Qt和Halcon聯合開發一個相機模塊,幫助…

第7篇:Gin模板引擎——服務端頁面渲染

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web開發中,服務端頁面渲染(SSR)依然是構建動態網頁的重要方式。Gin框架雖然以API開發見長,但也內置了強大的模板引擎支持,基于Go標準庫的html/template包實現。本文將深入…

RagFlow 源碼部署啟動指南

一、環境準備 1. 安裝 uv 和 pre-commit 如果已安裝,可跳過。推薦使用官方方式安裝,避免報錯: pipx install uv pre-commit export UV_INDEXhttps://mirrors.aliyun.com/pypi/simple安裝報錯 使用清華源安裝: pipx install uv…

【Python基礎】12 閑談分享:Python用于無人駕駛的未來

引言:一個程序員的自動駕駛夢想 還記得2016年的那個秋天,我第一次坐進特斯拉Model S的駕駛座,體驗Autopilot功能。當方向盤開始自己轉動,車輛在高速公路上自動跟隨前車時,我的內心涌起了一種奇妙的感覺——這不就是我…

為什么js是單線程?

js單線程,同一時間只能做一件事 。js的單線程 主要與它的用途有關。作為瀏覽器腳本語言,js的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題。如果js同時有兩個線程,一個線程在…

DVWA靶場通關筆記-文件包含(Medium級別 9種滲透方法)

目錄 一、文件包含 1、原因 2、危害 3、防范措施 二、代碼審計(Medium級別) 1、滲透準備 (1)配置php.ini (2)file1.php (3)file2.php (4)file3.php…

飛云翻倍布林(翻倍密碼系統四線布林版)雙安全系統+均價趨勢指標+日線周線MACD,組合操盤技術圖文分享

如上圖組合操盤套裝指標,主圖指標-翻倍密碼系統四線布林版-飛云翻倍布林。副圖指標1-均價趨勢指標,跟蹤市場均價走勢和趨勢;副圖指標2-日線周線MACD指標,跟蹤日線和周線兩個級別的MACD多空走勢以及共振與否。 主圖指標-飛云翻倍布…

《匯編語言:基于X86處理器》第6章 條件處理(1)

本章向程序員的匯編語言工具箱中引入一個重要的內容,使得編寫出來的程序具備作決策的功能。幾乎所有的程序都需要這種能力。首先,介紹布爾操作,由于能影響CPU狀態標志,它們是所有條件指令的核心。然后,說明怎樣使用演繹…

【分治思想】歸并排序 與 逆序對

歸并排序 歸并排序是一種分治算法,怎么分,怎么治? 分:通過遞歸不斷把數組分成兩半,直到每個子數組只剩 1 個元素(天然有序)治:把兩個已經排好序的子數組合并成一個有序數組。 把問…

SQL參數化查詢:防注入與計劃緩存的雙重優勢

在數據庫操作中,SQL參數化查詢(Parameterized Queries)是一種非常有效的技術,它不僅可以防止SQL注入攻擊,還可以提高數據庫查詢的效率,尤其是在與計劃緩存(Query Plan Caching)結合使…

【你怕一E1】- 孰輕孰重如何斷-組合問題的多種情形

摘要 本視頻講解了組合問題的多種情形,包括多選一、多選二、多選三以及分隊問題的解題方法。首先介紹了從不同人數中選人的不同選擇方式,如一百人中選一人有一百種選擇。隨后,詳細講解了有序思考方法在多選二問題中的應用,通過選隊長的方式列舉不同組合情況,并歸納出選擇規…

nginx反向代理的bug

nginx反向代理的bug 問題呈現 當我們配置反向代理的時候查詢error.log的時候我們發現以下的問題 2025/06/29 08:38:47 [error] 7#7: *2 open() “/usr/share/nginx/html/payed/notify” failed (2: No such file or directory), client: 192.168.98.1, server: localhost, r…

MyBatis 動態 SQL 與緩存機制深度解析

在Java持久層技術體系中,MyBatis憑借其靈活的SQL映射和強大的動態SQL能力,成為企業級應用開發的首選框架。本文從動態SQL核心語法、緩存實現原理、性能優化及面試高頻問題四個維度,結合源碼與工程實踐,系統解析MyBatis的核心特性與…

Nuxt 3 中實現跨組件通信方式總結:使用 Pinia、Provide/Inject 或 Props

在開發復雜的 Web 應用時,跨組件通信是一個常見的需求。Nuxt 3 提供了多種方式來實現這一點,包括使用狀態管理工具(如 Pinia)、Vue 的 provide/inject 機制以及傳統的 props 傳遞。本文將詳細介紹這三種方法,并通過一個…

Java ArrayList 擴容機制

一、ArrayList 簡介 ArrayList 是 Java 集合框架中基于數組實現的可變長度列表,其核心特性是: 支持隨機訪問(通過索引)支持動態擴容插入/刪除效率較低(非尾部操作) 二、底層數據結構 // JDK 11 transien…