首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么python不在启动时自动导入每个模块?

为什么python不在启动时自动导入每个模块?
EN

Stack Overflow用户
提问于 2014-01-09 05:46:57
回答 1查看 3.3K关注 0票数 3

我在使用Python2.7,每个人都知道,在每个程序的开始,你总是必须导入模块。例如:

import random
import time

for x in range(1, 300):
     print random.randint(1,100)
     time.sleep(1)
print "Done!"

无论如何,我在想,为什么我必须手动导入我所有的模块?为什么Python不像这样全部导入它们。

当然,我可以理解为什么它不是这样导入的:

from random import randint
from time import *

for x in range(1, 300):
     print randint(1,100)
     sleep(1)
print "Done!"

因为某些函数名称可能会冲突。但是,如果您必须定义函数在开始时的位置,例如random.randint(1,100)中的random.

现在现代计算机是如此强大,自动导入每个模块似乎是合乎逻辑的,而不是浪费代码行和时间,因为必须找到您需要的模块,然后在可以轻松实现自动化的情况下手动导入。那么,为什么python不在启动时自动导入每个模块呢?

编辑:我制作了一个小程序的新版本,它通过运行以下命令导入我能找到的每个模块:

 import sys
 sys.builtin_module_names

结果如下:

 x = int(1000000)
def test():
    global x
    x -= 1
    print "Iterations Left: ", x
    import __builtin__
    import __main__
    import _ast
    import _bisect
    import _codecs
    import _codecs_cn
    import _codecs_hk
    import _codecs_iso2022
    import _codecs_jp
    import _codecs_kr
    import _codecs_tw
    import _collections
    import _csv
    import _functools
    import _heapq
    import _hotshot
    import _io
    import _json
    import _locale
    import _lsprof
    import _md5
    import _multibytecodec
    import _random
    import _sha
    import _sha256
    import _sha512
    import _sre
    import _struct
    import _subprocess
    import _symtable
    import _warnings
    import _weakref
    import _winreg
    import array
    import audioop
    import binascii
    import cPickle
    import cStringIO
    import cmath
    import datetime
    import errno
    import exceptions
    import future_builtins
    import gc
    import imageop
    import imp
    import itertools
    import marshal
    import math
    import mmap
    import msvcrt
    import nt
    import operator
    import parser
    import signal
    import strop
    import sys
    import thread
    import time
    import xxsubtype
    import zipimport
    import zlib

def start():
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()

start()
EN

回答 1

Stack Overflow用户

发布于 2014-01-09 06:28:15

您导入的每个模块都需要时间来导入。在许多重要的场景中,在频繁启动新的Python解释器的情况下,每次启动Python时导入每个内置模块都会降低性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21007255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档