Blender Python导入def的范围

时间:2012-11-22 10:06:48

标签: python blender-2.61

在Blender Python中,我有以下问题:

导入时:

import mathutils
def write_something(): 
    var = mathutils.Matrix.Rotation(-math.pi/2, 4, 'X')

给出“全局名称'mathutils'未定义”

但如果我这样做

def write_something:
    import mathutils
    var = import mathutils.Matrix.Rotation(-math.pi/2, 4, 'X')        

它正在工作,但为什么导入超出范围 - 我认为通过使用导入我可以访问它?

1 个答案:

答案 0 :(得分:1)

问题是Python import是在运行时完成的。这意味着当您import时,您只需将模块绑定到变量,然后您可以使用该变量。

在函数内部,这只是简单地将模块绑定到该函数中的局部变量(这通常被认为是一个非常糟糕的主意。除非你是,例如,除非用户使用依赖于它的函数,否则试图避免使用库。 ,这是个坏主意。)

在你的例子中:

def write_something:
    var = name_module.somemethod() # returning a var or it could be a property
    import name_module

name_module之后 import之前不存在。

你的第一个例子应该完美 - 这是人们通常会做的事情。