使导入函数的全局函数已知

时间:2014-03-24 15:25:55

标签: python ipython-notebook

我正在编写一个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”

2 个答案:

答案 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"那么它们应该在不同的模块中定义吗?