gpt4 book ai didi

Python:有没有办法在函数定义中使用 "unimported"对象?

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:32 27 4
gpt4 key购买 nike

我正在修改一个简单的递归函数来使用海龟绘制龙曲线:

def draw_dragon(t, order, size, L=turtle.left, R=turtle.right):
""" Draw a dragon curve """
if not order:
t.forward(size)
return

size /= 1.41421
t.R(45)
draw_dragon(t, order-1, size, L, R)
t.L(90)
draw_dragon(t, order-1, size, R, L)
t.R(45)

if __name__=="__main__":
import turtle
wn = turtle.Screen()
fred=turtle.Turtle()
draw_dragon(fred,6,200)
wn.exitonclick()

由于我在函数定义时尚未导入turtle,因此解释器给出“NameError:名称'turtle'未定义”

有没有办法在我的draw_dragon函数中仍然使用turtle模块的函数,而不需要先将它们导入函数外部?

最佳答案

在定义函数之前不导入有什么原因吗?
我不确定为什么您需要首先将导入放入主函数中。

我不相信有什么神奇的方法可以让函数知道turtle的模块是什么,除非它们a)在命名空间中,或者b)通过参数传递给函数。您可以将其放入您的主代码中:

if __name__=="__main__":
import turtle
wn = turtle.Screen()
fred=turtle.Turtle()
draw_dragon(fred,6,200,turtle.left, turtle.right)
wn.exitonclick() ^^^ ^^^

然后,将 L 和 R 更改为没有默认参数(它们将通过初始调用分配函数),这样您就不会收到 NameErrors。

您的函数现在应该知道这些方法是什么,因为您通过 main 将它们传递到函数中。

不过,您可能应该将导入调用移至脚本的开头!

编辑:

你的代码仍然有一些奇怪的特性。不要尝试将方法从导入的模块传递到您的函数中,只需使用您创建的海龟对象一部分的函数即可!这段代码应该可以工作,但这绝对不是您想要使用的常见做法......

def draw_dragon(t, order, size, right, left, forward):
""" Draw a dragon curve """
if order <= 0:
forward(size)
return

size /= 1.41421
right(45)
draw_dragon(t, order-1, size, right, left, forward)
left(90)
draw_dragon(t, order-1, size, left, right, forward)
right(45)

if __name__=="__main__":
import turtle
wn = turtle.Screen()
fred=turtle.Turtle()
draw_dragon(fred, 6,200, turtle.left, turtle.right, turtle.forward)
wn.exitonclick()

更好的代码是这样的:

from turtle import Screen, left, right, forward, speed, hideturtle

def draw_dragon(order, size, left, right):
""" Draw a dragon curve """
if order <= 0:
forward(size)
return
size /= 1.41421
right(45)
draw_dragon(order-1, size, right, left)
left(90)
draw_dragon(order-1, size, left, right)
right(45)

if __name__=="__main__":
speed(0)
hideturtle()
wn = Screen()
draw_dragon(8,200, left, right)
wn.exitonclick()

关于Python:有没有办法在函数定义中使用 "unimported"对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com