我是Python的新手。我写了一个小脚本来生成十个随机浮点值,但它仍然失败。这是脚本:
import random
for i in range(10):
x = random.random()
print x
这是错误信息:
TypeError: 'module' object is not callable'.
我看不出问题所在。 我很确定随机存在!
我的版本是Python 2.7.6。
答案 0 :(得分:1)
如果将以下代码保存到random.py
:
import random
print(__name__)
print(random)
print(random.random)
然后运行它,然后输出类似:
的内容random
<module 'random' from '/.../python/import/name-shadowing/random.py'>
<module 'random' from '/.../python/import/name-shadowing/random.py'>
__main__
<module 'random' from '/.../python/import/name-shadowing/random.py'>
<module 'random' from '/.../python/import/name-shadowing/random.py'>
即,random
和random.random
都指向同一个模块 - 您的本地random.py
,它会从标准库中隐藏random
模块。
也许它的工作原理如下:
python -mrandom
在当前目录中找到random.py
,将其导入为random
,然后开始将其作为__main__
运行。import random
并导入缓存的模块。print(random)
将模块对象的表示打印到stdout。print(random.random)
在random
模块中查找random
个名称。它找到它(名称指的是模块本身。它打印出来。解决方案是避免遮蔽名称。避免为了可读性而隐藏标准名称。如果您可以在代码中使用它们,请避免隐藏第三方名称。
如果当前目录不在sys.path
中,则导入stdlib模块:
import sys
sys.path.pop(0) # assume the script directory is the first in the Python path
import random
print(__name__)
print(random)
print(random.random)
__main__
<module 'random' from '/usr/lib/python3.4/random.py'>
<built-in method random of Random object at 0x1aaf7f8>
注意:它仅用于说明。避免修改脚本中的sys.path
。