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

如何从主文件覆盖导入模块中的常量并在其函数中使用?

问题原因

Python中函数的默认参数是在函数定义时就确定并绑定值的,而非调用时动态获取。你在test_import.py里定义my_func(var=MY_CONST)的时候,var的默认值就已经固定为当时的MY_CONST=1了,之后在主文件修改test_import.MY_CONST,并不会改变这个已经绑定好的默认参数值。

解决方案

方案1:函数内部动态获取常量值

修改模块中的函数,将默认参数设为None,在函数内部引用模块的常量,这样每次调用函数时都会取当前的常量值:

test_import.py修改为:

MY_CONST = 1

def my_func(var=None):
    # 未传参时,使用当前模块的MY_CONST
    if var is None:
        var = MY_CONST
    print(var)

主文件main.py保持原有修改逻辑:

import test_import

test_import.MY_CONST = 3
test_import.my_func()  # 输出3

方案2:用类封装常量

把常量放在类中,函数内部引用类属性,修改类属性即可同步生效:

test_import.py修改为:

class AppConfig:
    MY_CONST = 1

def my_func(var=None):
    if var is None:
        var = AppConfig.MY_CONST
    print(var)

主文件main.py:

import test_import

test_import.AppConfig.MY_CONST = 3
test_import.my_func()  # 输出3

方案3:修改函数的默认参数属性(不推荐)

如果不想修改模块里的函数代码,可以直接操作函数的__defaults__内部属性,替换默认参数的值:

main.py修改为:

import test_import

test_import.MY_CONST = 3
# 函数的默认参数存储在__defaults__元组中,替换第一个元素
test_import.my_func.__defaults__ = (test_import.MY_CONST,)

test_import.my_func()  # 输出3

注意:这种方式属于操作Python内部机制,不同版本可能存在兼容性问题,日常开发不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:42:37