Я играл с 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.
в 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()
lib
на этой машине, я вижу, что там более 5 тысяч файлов в черт знает сколько подкаталогов. Зачем мне просматривать это каждый раз, когда мне нужна функция. Потребуется ли 2 минуты, чтобы найти что-то вродеzip
, потому что оно начинается с буквы z? - person kylieCatt   schedule 09.01.2014random
,urllib
,curses
илиctypes
. Этот список не полный. - person kylieCatt   schedule 09.01.2014sys.builtin_module_names
— это имена модулей, встроенных в интерпретатор, а не отдельных модулей Python или C. Это означает, что их импорт практически бесплатен. Итак, вы на самом деле ничего не протестировали. (Кроме того, вы заметите, что в Python 3.x список намного короче, чем в 2.x, и даже короче в 3.3+, чем в 3.0-3.2.) - person abarnert   schedule 09.01.2014sys.builtin_module_names
. Я также обновил свою программу, чтобы засечь время — я скажу вам результат, когда она проделала это 1 000 000 раз! - person George   schedule 09.01.2014