我正在编写一个IPythonNotebook并使我的代码更少聚集,我定义了一些不在主笔记本中的函数。我将它们替换为我导入的外部.py文件。
为什么test()
不知道u()
?
在myModule.py文件中
def test():
number = u()+u()
return number
我的主文件(在笔记本中)
from myModul import test
def u():
bla = 1
return bla
test()
我的test()
- 功能已导入,但不知道u
:
NameError:未定义全局名称“u”
答案 0 :(得分:3)
你不能这样做;只在函数定义的模块中查找全局变量。
您为函数提供了一个接受u
作为参数的参数:
def test(u):
number = u()+u()
return number
并在主文件中:
def u():
bla = 1
return bla
test(u)
如果Python以您期望的方式工作,那么您将创建许多难以跟踪的问题,这些问题首先应该由命名空间(如模块)解决。
答案 1 :(得分:0)
python没有全局函数的想法 - 函数存在于模块中。即使变量只是模块内部的全局变量,除非导入它们,否则任何其他模块都无法看到变量。
所以如果你希望你的测试功能能够看到你的功能" U" - 你要么: 1)将你的mainmodule导入myModul - 这不是一个好主意,因为你最终会得到循环依赖。
2)关注Martijn Pieters将函数u传递给测试函数的好主意
3)考虑代码的组织 - 如果你的"测试"功能真的取决于呼叫" u"那么它们应该在不同的模块中定义吗?