![](/img/trans.png)
[英]Fail to Import View from main Django project folder into app views.py
[英]Django: is importing a view from a module slower than including it in the main views.py file?
這可能更像是一個關於Python本身如何導入方法的問題,雖然我在表面層面上理解,但我並沒有真正深入理解。
一個極其簡化的例子可能會讓事情更加清晰。 在下面兩個例子中,執行速度會有明顯的差異嗎?
例1
# views.py
from app_name.models import *
def add_item(request, name, category):
item = Item(name=name, category=category)
item.save()
return HttpResponseRedirect('/')
例2
# views.py
from app_name.models import *
from app_name.items import add_new_item
def add_item(request, name, category):
item = add_new_item(request, name, category)
return HttpResponseRedirect('/')
# items.py
def add_new_item(request, name, category):
item = Item(name=name, category=category)
item.save()
return item
我應該再次補充說,這是一個極其簡化的例子,並不反映實際的現實世界決定。 我只是想了解Python的工作原理,以及示例2是否會明顯變慢,如果是這樣,在什么情況下。
謝謝。
你不會看到速度上的任何差異。 導入模塊后,它將保留在內存中,因此無需再次加載。 您可以檢查已加載的內容,如下所示:
import sys
print sys.modules
# {'cStringIO': <module 'cStringIO' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cStringIO.so'>, 'copy_reg': <mo........
導入某些東西的行為會“降低”應用程序的速度。 但是,我們討論的是從文件系統讀取文件並將其編譯一次所需的時間 - 毫秒。 所以,是的,導入視圖與視圖只是存在較慢,但實際上,沒有區別。
正如其他人已經指出的那樣,你的例子不會有任何區別,因為導入只會發生一次 。 更重要的是,你應該確保不做例如。 函數內部的任何導入,如果它是可以避免的,因為每次執行函數時都會重做這些導入!
如果你想擁有清晰且可維護的代碼,那么處理你的導入結構就更為重要了,像from app_name.models import *
這樣的通配符導入是非常邪惡的,你應該避免它! 另見例如。 這篇文章 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.