假設我有一個字串形式的函式呼叫,比如"log(2, floor(9.4))". 我想以一種允許我訪問第一個呼叫的函式名稱和引數的方式解構呼叫,并準確推斷作為引數的函式呼叫是否是引數。
例如,解構上面的字串時的引數會變成[2, floor(9.4)]
我已經嘗試過使用一些字串決議技術(例如,用逗號分割),但它似乎不起作用。
uj5u.com熱心網友回復:
您可以使用該ast模塊:
import ast
data = "log(2, floor(9.4))"
parse_tree = ast.parse(data)
# ast.unparse() is for 3.9 only.
# If using an earlier version, use the astunparse package instead.
result = [ast.unparse(node) for node in parse_tree.body[0].value.args]
print(result)
這輸出:
['2', 'floor(9.4)']
我從手動檢查ast.dump(parse_tree).
請注意,我寫的東西有點快和臟,因為只有一個字串要決議。如果您要決議大量這些字串(或更大的程式),您應該創建一個ast.NodeVisitor. 如果您還想對源代碼進行修改,您應該創建一個子類來ast.NodeTransformer代替。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454721.html
上一篇:Go xmas2020 全英課程 05 學習筆記、Arrays, Slices, and Maps
下一篇:不允許使用多個**引數的解決方法
