在这样的情况下:
# views.py
def myView(request):
import something
import other
something.doStuff()
other.doOtherStuff()
return render(request, 'page.html', context)
def myOtherView(request):
import something
import other
something.doThings()
other.doOtherThings()
return render(request, 'page2.html', context)
在视图级别导入内容是一种不好的做法吗?会影响性能吗?
# views.py
import something
import other
def myView(request):
something.doStuff()
other.doOtherStuff()
return render(request, 'page.html', context)
def myOtherView(request):
something.doThings()
other.doOtherThings()
return render(request, 'page2.html', context)
第二个版本更好/更快吗?
会影响性能吗?
不会有太大区别。
import
语句将查看是否已加载模块,并将模块添加到范围中。鉴于模块已经被加载(例如在启动时,或者当您触发加载模块的视图时),它只会使其慢几分之一毫秒,因为它只是意识到它已经加载了模块,然后将项目移至范围内。
有时甚至需要本地导入,因为这会导致导入周期:其中一个模块A导入模块B,然后B触发导入A,而A仍在加载中过程。在这种情况下,我们可以通过仅在触发函数时触发加载模块B来打破循环,因此至少在加载B之前先完成加载模块A。
但是本地导入还有另一个缺点:它更容易出现错误:如果您导入一个不存在的模块,或者稍后将该模块移动到其他地方,则导入语句的目标可能是加载一个模块(不再)存在,但很难找出导入中断的位置:它需要触发所有视图,而加载文件顶部的项目将主动加载模块,从而引发错误。这使得更容易发现错误。