FROM random IMPORT*和IMPORT random有什么区别? (random()和randrange())
在书里有一段代码示例:
from random import*
for i in range(15):
print random.randrange(3,13,3)
书中给出了运行结果。
但是当我在Netbeans中运行这段代码时,出现了以下错误:
*
追踪记录(最近的调用在最前面): 文件 "C:\Users\Lacces\Documents\NetBeansProjects\Python_GS_Tanuljunk_meg_programozni\src\Adatszerkezetek\Lista.py", 第11行,在 print random.randrange(3,13,3) # 从3到13,步长为3 AttributeError: 'builtin_function_or_method'对象没有属性'randrange'
*
我去谷歌上查了查,找到了这个导入的方法:
import random
于是我用这个替代了 from random import*
结果成功了!没有错误出现!
能不能有人给我解释一下,为什么第一次会出现错误,而第二次却没有(对于一个初学编程的人来说)
4 个回答
from random import *
这行代码是从一个叫做 random 的模块中导入所有的函数,但并没有导入这个模块本身。
这样你可以直接使用 random 模块里的函数,比如可以这样调用:randrange(3,13,3)
,等等。
而如果你使用 import random
,这行代码就会导入 random 这个模块的名字,以后你就需要这样来调用里面的函数:random.randrange(3,13,3)
,等等。
从一个模块里导入所有内容并不是个好主意,因为这样可能会引发一些意想不到的问题。比如,模块 random
里面有一个叫做 function 的函数,所以当你使用 import * from random
时,会发生以下情况:
from random import randrange
from random import random
...
这时候,当你想用 random
时,其实你是在调用那个 function,而不是整个 module。你可以直接用 randrange
(不加 random.
前缀),但其实用 import random
并明确说明函数来自哪个模块,这样做更好。
当你使用 from random import *
这行代码时,random
这个模块里的所有内容都会直接加入到你当前的命名空间里。简单来说,你可以直接使用这些内容,而不需要在前面加上 random.
。不过,这样做也有个问题,就是你可能会不小心和其他名字冲突,导致错误。
更好的做法是使用 import random
。