我有以下代码作为我正在处理的 css 预处理器的一部分。此部分采用用户定义的变量并将它们插入到代码中。正则表达式仅在被空格、大括号、方括号、逗号、引号或运算符包围时才替换。当我运行它时,我只会每隔一段时间替换一次变量。
def insert_vars(ccss, variables):
for var in variables.keys():
replacer = re.compile(r"""(?P<before>[,+\[(\b{:"'])\$""" + var + """(?P<after>[\b}:"'\])+,])""")
ccss = replacer.sub(r"\g<before>" + variables[var] + r"\g<after>", ccss)
del replacer
re.purge()
return ccss.replace(r"\$", "$")
当我运行它时
insert_vars("hello $animal, $nounification != {$noun}ification.", {"animal": "python", "noun": "car"})
50% 的时间返回
hello $animal, $nounification != {car}ification.
另外50%
hello $animal, $nounification != {$noun}ification.
有人知道为什么吗?
请您参考如下方法:
发生的事情是您的 return 关键字是循环的一部分,如 acjr stated in the comments .
这意味着循环只会运行一次迭代。
.keys() 的顺序未定义,'animal' 或 'noun' 都可以排在第一位。
一半情况下,您的代码会先获取 'noun',这会正常工作,或者会先获取 'animal',但不会有任何效果。
因此,您应该将 return 的缩进减少到循环之外。
