簡體   English   中英

為什么這個python代碼運行兩次

[英]Why is this python code running twice

這是代碼

import random

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

以及代碼的屏幕截圖

在此輸入圖像描述

當我執行此代碼時,它出於某種原因運行了兩次。 問題似乎來自import random語句,因為如果我刪除該語句或導入其他模塊,它可以正常工作。

可能是什么原因,我應該在我的系統上重新安裝Python。

python沒什么問題。

原因很簡單:

你的模塊正在導入自己(因為它也被命名為random ) - 這與python的查找機制有關。 在導入pythonpath模塊之前,python將首先嘗試從根文件夾導入。

來自文檔

導入名為spam的模塊時,解釋器首先搜索具有該名稱的內置模塊。 如果未找到,則會在變量sys.path給出的目錄列表中搜索名為spam.py的文件。 sys.path從這些位置初始化:

  • 包含輸入腳本的目錄(或未指定文件時的當前目錄)。
  • PYTHONPATH(目錄名列表,語法與shell變量PATH相同)。
  • 依賴於安裝的默認值。

由於您的文件(模塊)名為random.py ,因此import random將導入此文件。

現在,“導入”是什么意思? 聲明import something會導致Python來查找名稱something ,從當前目錄。 因此, import random將導致導入此文件,因為其名稱將random內置。 此外,如果要導入的名稱已在命名空間中,則忽略import語句。

找到要導入的模塊后,將執行其代碼。

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

  • 查找random.py名稱
  • random添加到命名空間
  • 執行random.py包含的代碼
    • random名稱已存在於名稱空間中,因此將忽略import random語句
    • 打印文本
  • 打印文本

這樣做的原因是你已經將腳本命名為random.py並在其中random導入。

random 不會導入內置random模塊,而是導入您創建的random模塊。 這導致腳本執行相同的語句兩次(如果您嘗試從random導入某些內容,也會導致其他丑陋的錯誤,例如from random import randrange 。)

重命名腳本會導致正常行為。

因為你的腳本叫做random.py,所以當你import random你也會執行你的腳本。 注意正確命名您的腳本。

你的python腳本名為random.py所以當你導入隨機它導入自己,在python導入模塊時它會運行它。

因此,你得到兩次打印。 重命名腳本或刪除導入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM