今天有一件奇怪的事发生在我身上。我试图在www.shell.appspot.com上找到一个发动机和Django。
当我进入
dir(django)
我得到的是
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'conf', 'core', 'template', 'utils']
但我还是试过
from django import forms
这让我感到惊讶,虽然在dir()
的o / p上没有出现这种情况。所以出于好奇我再次进入dir(django)
我得到的o / p是
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'conf', 'core', 'forms', 'oldforms', 'template', 'utils']
请注意这里的表单元素。任何人都可以向我解释这些表单的来源吗?
答案 0 :(得分:8)
语句from package import module
加载(如果先前未加载)package/module.py
(首次加载package/__init__.py
后如果之前尚未加载它)并添加'module'
}作为包中的条目(以及当前范围中的变量)。因此dir(package)
会在导入后显示'module'
条目,但不会在之前显示。
一个包可以包含无限数量的模块和子包(递归),所以加载包中的所有东西(只是为了填写它的dir
! - )是非常慢的,直到特定的模块和子包被专门导入 - 所以,后者的加载是“及时”,当它们第一次被导入时(只有那时它们出现在paren包的dir
中)。