【发布时间】:2014-01-27 05:43:28
【问题描述】:
我在玩 Python 2.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. in random.randint(1,100)。
现在现代计算机如此强大,自动导入每个模块而不是浪费代码行和时间似乎是合乎逻辑的,因为必须找到您需要的模块,然后在可以轻松实现自动化时手动导入它。 那么,为什么 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()
【问题讨论】:
-
如果你想要 PHP,你知道在哪里可以找到它。享受吧!
-
您宁愿通过放弃大量内存和执行时间来节省一两行代码?
-
趋势是删除内置,而不是添加更多。为什么要用大量垃圾污染全局命名空间?
-
做一个小实验:编写一个导入标准库中所有内容的程序应该相当简单。构建一个并计时,看看它有多重要
-
sys.builtin_module_names是内置于解释器中的模块的名称,而不是单独的 Python 或 C 模块。这意味着导入它们几乎是免费的。所以你还没有真正测试过任何东西。 (此外,您会注意到 Python 3.x 中的列表比 2.x 中的短得多,在 3.3+ 中甚至比 3.0-3.2 中的更短。)
标签: python python-2.7 module python-import