我用兩種不同的方式導入了numpy
庫。第一次與from numpy.random import mtrand
和第二次後與sys.path
搞亂。Python導入內部差異
然而,這兩個模塊導入的輸出是完全不同的:
>>> from numpy.random import mtrand
>>> dir(mtrand)
['RandomState', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__test__', '_rand', 'beta', 'binomial', 'bytes', 'chisquare', 'dirichlet', 'exponential', 'f', 'gamma', 'geometric', 'get_state', 'gumbel', 'hypergeometric', 'laplace', 'logistic', 'lognormal', 'logseries', 'multinomial', 'multivariate_normal', 'negative_binomial', 'noncentral_chisquare', 'noncentral_f', 'normal', 'np', 'pareto', 'permutation', 'poisson', 'power', 'rand', 'randint', 'randn', 'random_integers', 'random_sample', 'rayleigh', 'seed', 'set_state', 'shuffle', 'standard_cauchy', 'standard_exponential', 'standard_gamma', 'standard_normal', 'standard_t', 'triangular', 'uniform', 'vonmises', 'wald', 'weibull', 'zipf']
,第二個:
>>> sys.path.insert(0, '/usr/lib/pymodules/python2.7/numpy/random')
>>> import mtrand
>>> dir(mtrand)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']
這是怎麼可能的行爲?
編輯:
- 這兩個試驗是在不同的Python進程執行。
- 與系統路徑混淆是愚蠢的,我知道。但這不是一個正常的程序,而是一個自動完成的程序。我當然不想導入整個numpy包。我只是想能夠做一個
dir(mtrand)
這讓我覺得自動補全的方法不對。 ([始終將問題的實際目標從一開始就包括在內。](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem))如果沒有,也不能導入'mtrand'導入NumPy - 對我來說,你的第二種方法也是「有效」,但將所有的NumPy都引入到'sys.modules'中,就像正常導入一樣。 – 2012-04-17 12:54:34
你應該從標準庫[IPython的增強版本](http://docs.python.org/library/rlcompleter.html)看看['rlcompleter'] //ipython.org/ipython-doc/stable/api/generated/IPython.core.completer.html)和[rope's](http://rope.sourceforge.net/)自動完成。後者是最先進的。 – 2012-04-17 12:54:45
rlcompleter和IPython非常簡單。繩是唯一真正的自動完成。但它從來沒有爲我工作 - 所以我決定更好地解決問題(所有其他解決方案都是簡單的 - > python-omnicomplete,或者不是免費的 - > pycharm)。它已經工作得很好,但是內建的仍然是一個問題,因爲它們不能被評估。 – 2012-04-17 19:33:37