问题是您已将程序命名为“turtle.py”。
所以当Python看到这个语句时
from turtle import *
第一个匹配的模块名为turtle
它发现的是your程序“turtle.py”。
换句话说,您的程序基本上是在导入自身并且not海龟图形模块。
这是一些代码来演示这个问题。
海龟.py
#! /usr/bin/env python
''' Mock Turtle
Demonstrate what happens when you give your program the same name
as a module you want to import.
See http://stackoverflow.com/q/32180949/4014959
Written by PM 2Ring 2015.08.24
'''
import turtle
foo = 42
print(turtle.foo)
help(turtle)
我想我应该展示该代码实际打印的内容......
当运行为turtle.py
它打印以下“帮助”信息:
Help on module turtle:
NAME
turtle - Mock Turtle
FILE
/mnt/sda4/PM2Ring/Documents/python/turtle.py
DESCRIPTION
Demonstrate what happens when you give your program the same name
as a module you want to import.
See http://stackoverflow.com/q/32180949/4014959
Written by PM 2Ring 2015.08.24
DATA
foo = 42
(END)
当你击中Q
要退出帮助,将再次显示帮助信息。当你击中Q
第二次,然后
42
42
被打印。
为什么“help”消息和 42 打印两次?这是因为所有代码都在turtle.py
导入时执行,遇到时再次执行after the import
陈述。请注意,Python 不会尝试导入它已经导入的模块(除非明确告诉这样做)reload
)。如果Pythondid重新导入,那么上面的代码就会陷入导入的无限循环中。
当运行为mockturtle.py
它打印:
Traceback (most recent call last):
File "./mock_turtle.py", line 16, in <module>
print(turtle.foo)
AttributeError: 'module' object has no attribute 'foo'
当然这是因为标准turtle
模块实际上没有foo
属性。