2012-11-22 34 views
-2

在搅拌机的Python,我有以下问题:搅拌机Python的进口超出范围在DEF

导入时:

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')   

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

+2

第一个例子会*不*给出该错误。你能分享你的真实代码吗? –

+0

在其当前形状中,由于缺少括号,代码会在'def'行失败,请张贴您的实际代码。 – bereal

回答

1

问题是Python的import s的在运行时完成的。这意味着当您将import简单地绑定到一个变量,您可以使用它。

在函数里,这只是结合模块在该函数的局部变量(这通常被认为是一个非常糟糕的主意。除非你是,例如,试图避免需要一个库,除非用户使用的功能取决于它,这是一个坏主意)。

在您的例子:

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

name_module不存在,直到后你import它。

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

+0

感谢您的回答,但事实并非如此。我刚刚更改了代码,我发现我在函数中错误地导入了导入。我仍然得到错误,并且我补充说我正在运行Blender Python。 –