[英]Why is this python code running twice
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.