Импорт Blender Python вне области действия в def

В 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 ответ

Проблема в том, что Python imports сделаны во время выполнения. Это значит, когда ты import вы просто привязываете модуль к переменной, которую затем можете использовать.

Внутри функции это просто связывает модуль с локальной переменной в этой функции (что обычно считается действительно плохой идеей. Если, например, вы не пытаетесь избежать необходимости в библиотеке, если пользователь не использует функции, зависящие от нее, это плохая идея).

В вашем примере:

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

name_module не существует, пока после вас import Это.

Ваш первый пример должен работать отлично - это то, что обычно делают.

Другие вопросы по тегам