You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python模块中所有函数添加前缀?以foo.py与bar.py为例

嘿,这个问题我刚好碰到过,给你两种可行的方案,看哪种更适合你的场景:

方案一:直接修改foo.py的函数名(最直观稳妥)

如果允许改动foo.py的源代码,最直接的方式就是手动给所有自定义函数加上foo_前缀。比如原来的foo.py是这样的:

# foo.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

修改后变成:

# foo.py
def foo_add(a, b):
    return a + b

def foo_multiply(a, b):
    return a * b

之后在bar.py里就能正常导入使用了:

# bar.py
# 按需导入特定函数
from foo import foo_add, foo_multiply
# 或者一次性导入所有带前缀的函数
# from foo import *

print(foo_add(2, 3))  # 输出5

方案二:在bar.py中动态添加前缀(无需修改foo.py)

如果因为某些限制不能改动foo.py的代码,那可以在bar.py里通过动态导入的方式,自动给导入的函数加上foo_前缀,再注入到bar的命名空间中。具体实现如下:

先保留原foo.py不变:

# foo.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

然后在bar.py中编写这段逻辑:

# bar.py
import foo
import inspect

# 遍历foo模块的所有成员,筛选出自定义函数
for name, obj in inspect.getmembers(foo, inspect.isfunction):
    # 给函数名添加foo_前缀
    new_func_name = f"foo_{name}"
    # 将重命名后的函数绑定到bar的全局命名空间
    globals()[new_func_name] = obj

# 现在就能直接使用带前缀的函数了
print(foo_add(2, 3))  # 输出5
print(foo_multiply(4, 5))  # 输出20

这里用到inspect模块来精准识别函数,能自动排除模块里的类、变量、导入的外部函数等非目标对象。如果需要跳过某些特定函数,只需在循环里加个判断,比如if name != "skip_this_func":即可。

内容的提问来源于stack exchange,提问作者user592419

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:50:10