我不知道';我不太理解Python中的这个模板函数

我不知道';我不太理解Python中的这个模板函数,python,Python,如果我在命令行中执行“python template.py text.py”,If将打印“1和2之和为3”。在template.py文件中,replacement()是一个函数,为什么它是sub()函数的一个参数,而它没有参数?(它应该以匹配对象作为参数)并且,如果它是空的,范围字典是用来做什么的?? 非常感谢 所以您要问几个关于此代码的问题。它的意图很清楚:它的意图是 读取输入文件 合并成一行 对于该行中方括号中的每个表达式 调用eval(code,scope),其中code是括号中的表达式

如果我在命令行中执行“python template.py text.py”,If将打印“1和2之和为3”。在template.py文件中,replacement()是一个函数,为什么它是sub()函数的一个参数,而它没有参数?(它应该以匹配对象作为参数)并且,如果它是空的,范围字典是用来做什么的??
非常感谢

所以您要问几个关于此代码的问题。它的意图很清楚:它的意图是

  • 读取输入文件
  • 合并成一行
  • 对于该行中方括号中的每个表达式
  • 调用
    eval(code,scope)
    ,其中
    code
    是括号中的表达式
  • 现在请回答您的具体问题:

  • replacement()是一个函数,为什么它是sub()函数的参数而没有参数
  • 因为这就是工作原理

    关于sub(模式、repl、字符串、计数=0、标志=0)

    返回通过替换字符串中模式的最左侧非重叠引用而获得的字符串 答复。如果找不到模式,则返回的字符串将保持不变。答复 可以是字符串或函数;[...] 如果repl是一个函数,则会为每个非重叠函数调用它 模式的出现。该函数接受单个匹配对象 参数,并返回替换字符串

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

  • 还有,如果范围字典为空,它是用来做什么的
  • 这是用于跟踪变量赋值的字典。它将作为
    eval()
    的第二个参数提供

    为了便于说明,这里是
    replacement()
    函数的执行轨迹。该函数正好执行了5次

    #text.py
    
    [x = 1]
    [y = 2]
    The sum of [x] and [y] is [x + y]
    

    pat_field.sub()中的替换函数没有参数。它叫“文本”。谢谢回复!是的,我知道这里的替换用作字符串,函数返回一个字符串。但是,如果函数不以匹配对象作为参数,它怎么能返回字符串呢?谢谢你的回答!这很有帮助!
    #text.py
    
    [x = 1]
    [y = 2]
    The sum of [x] and [y] is [x + y]
    
    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']