我遇到了一个重要的循环问题,我唯一能解决的方法是将import语句从模块顶部移到需要这样的位置:
def serialize_message(message):
from chat.serializers import MessageSerializer
serializer = MessageSerializer(
{
'pk': message.id,
'when': message.created_at,
'conversation': message.conversation.id,
'object': message
}
)
return serializer.data
这工作正常,但我想知道这是否安全吗?
答案 0 :(得分:0)
import
statement是常规语句,可在允许使用语句的任何地方使用,包括def
和class
正文。它在全局,函数和类范围内具有相同的行为:如有必要,将加载模块,并且所请求的名称将绑定在当前范围内。
这也意味着在正常情况下,一个模块只能加载一次。重复使用import
语句调用函数不会每次都重新加载模块,而是使用先前加载的模块实例。
唯一的限制是在函数和类范围内不允许动态名称绑定。因此,不允许导入*
。确保在运行代码之前将其拒绝。
仅在模块级别允许使用通配符导入形式
from module import *
。尝试在类或函数定义中使用它会引发SyntaxError
。