[英]I don't quite understand this template function in Python
#template.py
import fileinput, re
field_pat = re.compile(r'\[(.+?)\]')
scope = {}
def replacement(match):
code = match.group(1)
try:
return str(eval(code, scope))
except SyntaxError:
exec code in scope
return
lines = []
for line in fileinput.input():
lines.append(line)
text = ''.join(lines)
print field_pat.sub(replacement, text)
#text.py
[x = 1]
[y = 2]
The sum of [x] and [y] is [x + y]
如果我在命令行中執行“ python template.py text.py”,則將輸出“ 1和2之和為3”。 在文件template.py中,replacement()是一個函數,為什么它是sub()函數的自變量,卻沒有自變量?(應該以match對象作為自變量)而且,作用域字典是什么因為如果是空的? 非常感謝!!!
因此,您正在詢問有關此代碼的幾個問題。 目的是很明確的:它旨在
eval(code,scope)
,其中code
是括號中的表達式。 現在針對您的具體問題:
- replace()是一個函數,為什么它是sub()函數的一個參數,卻沒有參數?
因為那是sub()
函數的工作方式
回覆。 子 (模式,REPL,字符串,計數= 0,標志= 0)
返回通過用替換repl替換字符串中最左邊的不重疊模式所獲得的字符串 。 如果找不到該模式,則返回的字符串不變。 repl可以是字符串或函數 ; [...]如果repl是一個函數,則每次pattern的非重疊出現都會調用它。 該函數采用單個match對象參數,並返回替換字符串。
這里的模式是self
變量, repl
設置為我們的replacement()
函數。 它將接收match對象作為參數,其中包含對每個匹配組的引用。
- 而且,如果作用域詞典為空,該作用域詞典的作用是什么?
那是將用於跟蹤變量分配的字典。 它將作為eval()
的第二個參數提供。
為了便於說明,這里是replacement()
函數執行的痕跡。 該函數正好執行5次。
Evaluating 'x = 1', scope = []
Evaluating 'y = 2', scope = ['x : 1']
Evaluating 'x', scope = ['x : 1', 'y : 2']
Evaluating 'y', scope = ['x : 1', 'y : 2']
Evaluating 'x + y', scope = ['x : 1', 'y : 2']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.