FROM random IMPORT*和IMPORT random有什么区别? (random()和randrange())

5 投票
4 回答
28012 浏览
提问于 2025-04-16 21:31

在书里有一段代码示例:

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 个回答

2

from random import * 这行代码是从一个叫做 random 的模块中导入所有的函数,但并没有导入这个模块本身。

这样你可以直接使用 random 模块里的函数,比如可以这样调用:randrange(3,13,3),等等。

而如果你使用 import random,这行代码就会导入 random 这个模块的名字,以后你就需要这样来调用里面的函数:random.randrange(3,13,3),等等。

3

从一个模块里导入所有内容并不是个好主意,因为这样可能会引发一些意想不到的问题。比如,模块 random 里面有一个叫做 function 的函数,所以当你使用 import * from random 时,会发生以下情况:

from random import randrange
from random import random
...

这时候,当你想用 random 时,其实你是在调用那个 function,而不是整个 module。你可以直接用 randrange(不加 random. 前缀),但其实用 import random 并明确说明函数来自哪个模块,这样做更好。

8

当你使用 from random import * 这行代码时,random 这个模块里的所有内容都会直接加入到你当前的命名空间里。简单来说,你可以直接使用这些内容,而不需要在前面加上 random.。不过,这样做也有个问题,就是你可能会不小心和其他名字冲突,导致错误。

更好的做法是使用 import random

撰写回答