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

如何在function内部判断其是当前脚本运行还是作为imported module运行

实现方案

可以实现该需求,核心利用Python模块的内置属性特性:每个模块的__name__属性在模块作为入口脚本直接运行时取值为__main__,作为依赖被其他脚本导入时取值为模块自身的名称。

由于函数的全局命名空间绑定的是它定义所在模块的命名空间,而非调用方的命名空间,因此可以直接在函数内部读取该属性判断运行场景,示例代码如下:

def func():
    if __name__ == "__main__":
        # 所属脚本直接运行时执行的逻辑
        print("函数在所属脚本内直接运行")
    else:
        # 作为导入模块被调用时执行的逻辑
        print("函数被其他脚本导入后运行")

补充说明

  • 上述写法已经覆盖绝大多数常规使用场景,如果需要兼容函数嵌套定义、动态生成等特殊场景,可以用inspect模块显式获取函数所属模块再做判断:
import inspect

def func():
    current_module = inspect.getmodule(func)
    if current_module.__name__ == "__main__":
        print("所属脚本直接运行")
    else:
        print("被其他脚本导入调用")
  • 测试方法:
    • 把代码写入demo.py,末尾添加func(),直接运行python demo.py,会输出直接运行对应的提示
    • 新建另一个脚本import_demo.py,写入from demo import func; func(),运行该脚本,会输出被导入对应的提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:09:04