2011-07-14 122 views
4

在這本書一直是這個codesample:FROM random隨機導入*和導入隨機有什麼區別? (隨機()和randrange())

from random import* 
for i in range(15):      
     print random.randrange(3,13,3) 

而且它已經在書中得到的結果。

但是,當我在Netbeans中運行它。以下excaption arosed:

*

Traceback (most recent call last): File "C:\Users\Lacces\Documents\NetBeansProjects\Python_GS_Tanuljunk_meg_programozni\src\Adatszerkezetek\Lista.py", line 11, in print random.randrange(3,13,3) #3-tól 13-ig, 3 érték elválasztásal AttributeError: 'builtin_function_or_method' object has no attribute 'randrange'

*

我有打電話來幫助谷歌,我發現這爲進口:

import random 

有了,我用這而不是從隨機進口的 *

它的工作!沒有例外!

有人能向我解釋爲什麼拋出異常在第一時間,爲什麼沒有在第二時間(對於初學編程的:))

回答

7

當你​​,全部來自random定義成爲了當前的一部分名字空間。這意味着你不必在random.前添加任何前綴,但這也意味着你甚至可能不知道名稱衝突。

首選的方法是import random

3

導入了從一個模塊氣餒只是因爲這些奇怪的副作用:該模塊random包含功能隨機的,所以import * from random執行以下操作:

from random import randrange 
from random import random 
... 

現在,當你訪問random ,您正在訪問函數而不是模塊。您可以使用randrange(不帶前綴random.),但使用import random並明確指出函數來自哪個模塊是更好的主意。

2

如果您使用'from moduleName import ....',那麼您將獲得您在導入後指定的所有類,函數和變量,或者如果您指定*: ,則從隨機導入* ):
print randrange(3,13,3)

但是請注意,這不是很好導入所有,最好只導入所需的類,函數和變量,以防萬一你只需要randrange你需要使用:

from random import randrange 
for i in range(15):      
    print randrange(3,13,3) 

如果您使用的是impo rt隨機這意味着你導入模塊,所以你需要指定moduleName。當你想使用它,以便:

import random 
for i in range(15):      
    print random.randrange(3,13,3) 
2

​​進口的所有功能,從一個所謂的隨機模塊,但不random本身。

在這裏,您可以直接調用函數隨機如下:randrange(3,13,3)

import random進口名隨機的,從中你可以再打功能如下:random.randrange(3,13,3)