随机导入*和随机导入有什么区别?(random()和randrange())

2024-09-20 23:02:52 发布

您现在位置:Python中文网/ 问答频道 /正文

书中有这样一个代码示例:

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

这在书中也有结果。

但是当我在Netbeans中运行它时。出现以下情况:

*

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

我用这个代替了随机导入的

而且成功了!不例外!

有人能给我解释一下为什么第一次抛出异常,为什么第二次不抛出异常(对于初学者来说:)


Tags: 代码infromimport示例mostfor情况
3条回答

当您from random import *时,random中的所有定义都将成为当前名称空间的一部分。这意味着您不必在任何东西前面加上random.前缀,但这也意味着您可能会在不知道名称的情况下发生名称冲突。

首选方法是import random

由于这些令人惊讶的副作用,不鼓励从模块中导入所有内容:模块random包含一个函数random,因此import * from random执行以下操作:

from random import randrange
from random import random
...

现在,当您访问random时,您访问的是函数,而不是模块。您可以使用randrange(不带前缀random.),但是import random和显式说明函数来自哪个模块是更好的主意。

如果使用“from moduleName import….”,则会获取在导入后指定的所有类、函数和变量,如果指定*,则会获取所有类、函数和变量: 从随机导入* 对于范围(15)内的i:
打印randrange(3,13,3)

但是请注意,这不是很好地导入所有,最好只导入所需的类、函数和变量,因此如果您只需要使用randrange:

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

如果您使用的是import random,这意味着您要导入模块,因此需要指定moduleName。如果您想使用它:

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

相关问题 更多 >

    热门问题