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

时间:2011-07-14 15:29:51

标签: python import

在书中已经有了这个代码示例:

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

它已经得到了本书的结果。

但是当我在Netbeans中运行它时。出现了以下扼杀:

*

  

Traceback(最近一次调用最后一次):文件   “C:\用户\ Lacces \文件\的NetBeansProjects \ Python_GS_Tanuljunk_meg_programozni \ SRC \ Adatszerkezetek \ Lista.py”,   第11行,在       print random.randrange(3,13,3)#3-tól13-ig,3értékelválasztásalNameError:'builtin_function_or_method'对象有   没有属性'randrange'

*

我打电话来帮助谷歌,我发现这是为了导入:

import random

我使用它来代替随机导入的 *

它有效!没有例外!

有人可以向我解释为什么第一次抛出异常,为什么不在第二次抛出(对于初学者程序员:))

4 个答案:

答案 0 :(得分:7)

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

首选方式是import random

答案 1 :(得分:3)

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

from random import randrange
from random import random
...

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

答案 2 :(得分:2)

如果您使用'from moduleName import ....',那么您将获得导入后指定的所有类,函数和变量,或者如果指定*,则获取所有类:函数和变量:     来自随机进口*     对于范围内的i(15):
        print randrange(3,13,3)

但请注意,导入all并不是很好,最好只导入必需的类,函数和变量,这样只要你只需要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)

答案 3 :(得分:2)

from random import *从名为random的模块导入所有函数,但不导入random本身。

您可以在此处直接调用函数,如下所示:randrange(3,13,3)

import random随机输入名称,稍后您可以从中调用函数,如下所示:random.randrange(3,13,3)