// python主程序与子模块的问题
您好,想请教个问题:
// VScode下运行
我在主程序文档A.py定义了一个函数,f(x),
然后我为了在不搞乱主程序代码的前提下
想单独检验f(x)写的对不对,我就创建了子文档B.py
在B中写入 from A import *
然后在B中调用f(x)
但是无论我怎么输入x,返回值始终是none
但是当我把函数f(x)的定义复制到B中时,f(x)运行正确
我在想这里是不是有一个我还不知道的 涉及主程序与子模块的概念
我对python栈帧运行也不清楚
希望da_Lao们抽空解答,谢谢!
建议把出错的代码发出来看看,提高定位问题的效率
“Devil组”引证GPT后的撰写:
- 可能是因为在子文档B中使用了from A import *语句导致的。
- 使用from A import *语句会将A模块中所有非下划线开头的全局名称导入到B模块的命名空间中。这意味着B模块中的所有全局名称都会覆盖A模块中的同名全局名称,可能导致不可预期的结果。
- 在你的情况下,如果A.py文件中有一些全局名称与B.py中的名称相同,它们将被覆盖,并且你在B.py中调用f(x)时实际上调用的是B.py中的一个名为f的对象,而不是A.py中的f函数。这可能导致返回none或不可预期的结果。
- 为了解决这个问题,你可以使用 import A 语句来导入A模块,然后在B.py中使用 A.f(x) 来调用函数f。这样可以避免覆盖全局名称,并确保你调用的是A模块中的f函数。
- 另外,当你在B.py中定义函数f(x)时,它与A.py中的f函数是不同的对象。如果你想在B.py中测试A.py中的f函数,最好是将测试代码放在A.py文件的末尾,并在执行A.py时运行测试代码,或者编写单元测试代码进行测试。
希望这能帮助你!