这是代码
import random
print("Hello", end="")
print("twice")
以及代码的截图
当我执行此代码时,由于某种原因它运行了两次。问题似乎来自 import random 语句,因为如果我删除该语句或导入其他模块,它可以正常工作。
这可能是什么原因,我应该在我的系统上重新安装Python。
答案 0 :(得分:14)
python没什么问题。
原因很简单:
您的模块正在导入自身(因为它也被命名为random
) - 这与python的查找机制有关。在导入pythonpath模块之前,python将首先尝试从根文件夹导入。
来自docs:
当导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果未找到,则会在变量sys.path给出的目录列表中搜索名为spam.py的文件。 sys.path从这些位置初始化:
- 包含输入脚本(或当前目录)的目录 没有指定文件时。)
- PYTHONPATH(目录名列表,语法与shell变量PATH相同)。
- 依赖于安装的默认值。
答案 1 :(得分:2)
由于您的文件(模块)被称为random.py
,import random
将导入此文件。
现在,"导入"意思?
语句import something
将使Python从当前目录开始查找名称something
。
因此,import random
将导致导入此文件,因为其名称将影响内置random
。
此外,如果要导入的名称已在命名空间中,则忽略import
语句。
找到要导入的模块后,将执行其代码。
因此,您的脚本流程如下:
random.py
名称random
添加到命名空间random.py
中包含的代码
random
名称,因此忽略import random
语句答案 2 :(得分:1)
原因是您已将脚本命名为random.py
,并在其中导入random
。
random
将不导入内置random
模块,而是导入您创建的random
模块。这会导致脚本执行相同的语句两次(如果您尝试从random
导入某些内容,也会导致其他丑陋的错误,例如from random import randrange
。)
重命名脚本会导致正常行为。
答案 3 :(得分:0)
因为您的脚本名为random.py,所以当您import random
执行脚本时也是如此。请注意正确命名您的脚本。
答案 4 :(得分:0)
你的python脚本被命名为random.py
所以当你导入随机它导入自己时,在导入模块的python中它将运行它。