在书中已经有了这个代码示例:
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
我使用它来代替随机导入的 *
它有效!没有例外!
有人可以向我解释为什么第一次抛出异常,为什么不在第二次抛出(对于初学者程序员:))
答案 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)
等