2011-07-14 94 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)