为什么这段 python 代码运行了两次

新手上路,请多包涵

这是代码

import random

print("Hello", end="")
print("twice")

和代码的屏幕截图

在此处输入图像描述

当我执行这段代码时,它出于某种原因运行了两次。问题似乎来自 import random 语句,因为如果我删除该语句或导入其他一些模块,它就可以正常工作。

这可能是什么原因,我应该在我的系统上重新安装 Python。

原文由 Knight 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 706
2 个回答

python没什么问题。

原因很简单:

您的模块正在导入自身(因为它也被命名为 random )——这与 python 的查找机制有关。 python 将首先尝试从您的根文件夹导入,然后再导入来自 pythonpath 的模块。

文档

当导入名为 spam 的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,它会在变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。 sys.path 从这些位置初始化:

  • 包含输入脚本的目录(或未指定文件时的当前目录)。
  • PYTHONPATH(目录名称列表,语法与 shell 变量 PATH 相同)。
  • 安装相关的默认值。

原文由 Mike Scotty 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于您的文件(模块)被称为 random.pyimport random 将导入这个文件。

现在,“导入”是什么意思?语句 import something 将导致 Python 查找名称 something 从当前目录开始。因此, import random 将导致导入这个文件,因为它的名称将 random 。此外,如果要导入的名称已经在命名空间中,那么 import 语句将被忽略。

一旦找到要导入的模块,就会执行其代码。

因此,您的脚本流程如下:

  • 查找 random.py 名称
  • 添加 random 到命名空间
  • 执行包含在 random.py 中的代码
    • random 名称已经存在于命名空间中,所以忽略 import random 语句
    • 打印文本
  • 打印文本

原文由 Right leg 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题