我需要在包含许多函数定义的大量 Python 文件中替换所有出现的
def some_func(foo, bar):
和
@jit(parallel=True)
def some_func(foo, bar):
和任何缩进级别def some_func(foo, bar)
有。
例子:我想更换
def some_func_1(foo, bar):
def some_func_2(foo, bar):
def some_func_3(foo, bar):
def some_func_4(foo, bar):
和
@jit(parallel=True)
def some_func_1(foo, bar):
@jit(parallel=True)
def some_func_2(foo, bar):
@jit(parallel=True)
def some_func_3(foo, bar):
@jit(parallel=True)
def some_func_4(foo, bar):
动机:我想“强力加速/并行化” FDTD 模拟包,而不必通过使用numba
的自动并行化@jit
。
附言:对于这种幼稚的滥用方法的任何评论/批评@jit
也都是受欢迎的(例如,如果这根本不起作用)!
答案1
更好的解决方案可能是使用jit_模块自动执行所有函数
答案2
这适用于任何类型的空格(空格或制表符)以及任何类型的换行符\n
, \r\n
, \r
。
- Ctrl+H
- 找什么:
^(\h*)(?=def\b.*(\R))
- 用。。。来代替:
$1@jit\(parallel=True\)$2$1
- 打钩 相符
- 打钩 环绕
- 选择 正则表达式
- 取消勾选
. matches newline
- Replace all
解释:
^ # beginning of line
( # group 1
\h* # 0 or more horizontal spaces
) # end group
(?= # positive lookahead, make sure we have after:
def\b # literally "def" and a word boundary, in order to not match "default"
.* # 0 or more any character but newline
(\R) # group 2, any kind of linebreak
) # end lookahead
替代品:
$1 # content of group 1, the spaces to insert
@jit\(parallel=True\) # literally
$2 # content of group 2, the linebreak used in the file
$1 # content of group 1, the spaces to insert
截图(之前):
截图(之后):
答案3
答案4
在 Notepad++ 中,搜索(^.*)(def )
(末尾有空格) 并替换为 即可\1@jit\(parallel=True\)\r\n\1\2
。末尾的空格很重要,否则诸如 之类的字符串default
也会被替换。