Python 有没有办法缩短我的代码,这样我就不会';“我不必写”;海龟;每次我使用海龟模块的函数?

Python 有没有办法缩短我的代码,这样我就不会';“我不必写”;海龟;每次我使用海龟模块的函数?,python,turtle-graphics,Python,Turtle Graphics,我试图用python中的turtle绘制正方形,每次我想命令它做某事时,我都必须编写turtle import turtle turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.back(100) turtle.right(90) tur

我试图用python中的
turtle
绘制正方形,每次我想命令它做某事时,我都必须编写
turtle

import turtle


turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.back(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.back(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.back(200)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.back(100)



turtle.exitonclick()

我希望编写代码而不必每次都编写
turtle

您可以使用通配符导入:

from turtle import * 

但是最好使用带前缀的导入来保持名称空间干净。看

您可以通过编写

from turtle import *  # this is a wildcard import
但是,您应该只
将海龟作为t导入(或您想要的任何其他内容),如下所示:

import turtle as t  # you can replace t with any valid variable name
因为通配符导入倾向于创建函数定义冲突

相反,您只能从模块中导入所需的类(或方法)<代码>海龟
是必要的导入:

from turtle import Turtle
现在,我们必须实例化它:

t = Turtle()
现在我们可以使用它:

t.do_something()  # methods that act on the turtle, like forward and backward
但是,这不会导入
屏幕
模块,因此您将无法使用
exitonclick()
,除非您也导入
屏幕

from turtle import Turtle, Screen
s = Screen()
s.exitonclick()
正如@cdlane所指出的,循环实际上可能是减少必须编写的代码量的最佳选择。此代码:

for _ in range(x):
    turtle.forward(100)
    turtle.right(90)

将海龟向前移动
然后向右移动
x次。

免责声明:这个答案适用于像我这样懒惰的人:)

已经有很好的答案向您展示了如何解决问题,并警告您有关通配符导入的问题

如果你只想玩海龟模块,你可以让你的生活变得轻松,也就是说,不要写
turtle.forward(90)
最好只写
forward(90)
,但是如果你只写
f(90)

同样,它会影响代码的可读性,但它值得一试

现在您的代码看起来像

编辑:按照@chepner的建议,在一行中修改导入内容,使其更为懒惰

from turtle import forward as f, back as b, right as r, left as l, exitonclick

# to draw one square
f(100)
r(90)
f(100)
r(90)
f(100)
r(90)
f(100)

exitonclick()

你知道有多少评论说“不要使用通配符导入”来回应人们按照人们的建议从turtle import*
中执行
?我将进一步论证,不要将turtle作为t导入,因为它向turtle公开了函数接口。海龟模块是面向对象的,您只需要公开该接口。如果您厌倦了键入这么多内容,请了解循环:

from turtle import Screen, Turtle

t = Turtle()

for _ in range(4):
    t.forward(100)
    t.right(90)

for _ in range(4):
    t.backward(100)
    t.left(90)

t.backward(100)

for _ in range(3):
    t.backward(100)
    t.left(90)

s = Screen()

s.exitonclick()

诚然,我并不介意为简短的turtle&tkinter示例以及Zelle图形程序导入通配符。但是这一切都不是胡说八道,而是前进!庆祝成为一只乌龟,不要躲在你的壳里

如果您只导入turtle,这是一个很好的解决方案,但是对于更大的项目,我建议不要使用通配符导入如果您作为x导入,那么您就不必担心名称空间冲突,也不必在使用新的非标准库函数时追加导入。不过,这都是个人喜好。@user1529891:我不知道,很多人最终都陷入了堆栈溢出,因为他们没有意识到其中一个通配符导入引入了错误的
open
函数,或者他们的
from numpy import*
隐藏了内置的
any
all
。通配符导入会导致很多问题。您还不够懒:)
从turtle导入前进为f,后退为b,右为r,左为l,退出单击。这突出了turtle为什么是哑巴。只是一堆重复的动作。我喜欢这个解决方案,因为它使这些重复的操作变得不那么麻烦。@alec_a,你是对的,它违背了编程语言的目的,也就是自动化那些无聊的东西:)