我在使用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()
发布于 2014-01-09 06:28:15
您导入的每个模块都需要时间来导入。在许多重要的场景中,在频繁启动新的Python解释器的情况下,每次启动Python时导入每个内置模块都会降低性能。
https://stackoverflow.com/questions/21007255
复制相似问题