python模块出现在没有的地方

Bun*_*bit 3 python google-app-engine

今天有一件奇怪的事发生在我身上.当我进入dir(django) o/pi 时,我试图在www.shell.appspot.com上获得一些appengine和Django.

['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'conf', 'core', 'template', 'utils']
Run Code Online (Sandbox Code Playgroud)

但我还是试过

from django import forms
Run Code Online (Sandbox Code Playgroud)

而且令我惊讶的是,虽然没有恍惚状态,但是dir()出于好奇,我再次进入dir(django) 并且o/pi得到了

['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__path__', 'conf', 'core', 'forms', 'oldforms', 'template', 'utils']
Run Code Online (Sandbox Code Playgroud)

请注意这里的表格元素.任何人都可以向我解释这些表格的来源吗?

Ale*_*lli 8

语句from package import module加载(如果它以前没有加载过)package/module.py(package/__init__.py如果先前没有加载它,则在第一次加载之后)并'module'作为包中的条目(以及当前范围中的变量)添加.所以在导入后dir(package)会显示一个'module'条目,但不会在之前显示.

一个包可以包含无限数量的模块和子包(递归),所以加载包中的所有内容(只是为了填写它dir! - )非常慢,直到特定的模块和子包被专门导入 - 所以,加载后者是"及时",当他们第一次进口时(只有那时他们出现在paren包中dir).