gpt4 book ai didi

python - 我不太了解Python中的这个模板函数

转载 作者:行者123 更新时间:2023-11-28 22:24:07 25 4
gpt4 key购买 nike

#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”,如果将打印“The sum of 1 and 2 is 3”。在文件template.py中,replacement()是一个函数,为什么它是sub()函数的一个参数而且它没有参数?(它应该以一个匹配对象作为参数)还有,作用域字典是什么如果它是空的??非常感谢!!!

最佳答案

所以你问了几个关于这段代码的问题。它的目的很明确:它旨在

  1. 读取输入文件,
  2. 合并成一行,
  3. 对于在该行中找到的方括号中的每个表达式
  4. 调用eval(code,scope),其中code是括号中的表达式。

现在回答您的具体问题:

  1. replacement() is a function, why it is an argument of sub() function and it does not have argument?

因为这就是sub() function作品

re.sub(pattern, repl, string, count=0, flags=0)

Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl. If the pattern isn’t found, string is returned unchanged. repl can be a string or a function; [...] If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string.

这里的 pattern 是 self 参数,repl 设置为我们的 replacement() 函数。它将接收匹配对象作为参数,其中包含对每个匹配组的引用。

  1. And also, what is the scope dictionary for if it is empty?

这是将用于跟踪变量赋值的字典。它将作为 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']

关于python - 我不太了解Python中的这个模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com