Python: is there a way to use "unimported" objects in function definitions? -


i'm modifying simple recursive function draw dragon curve using turtle:

def draw_dragon(t, order, size, l=turtle.left, r=turtle.right):     """ draw 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() 

since haven't yet imported turtle @ time of function definition, interpreter gives me "nameerror: name 'turtle' not defined".

is there way still use turtle module's functions in draw_dragon function, without first importing them outside function?

is there reason aren't importing before function defined?
i'm not sure why need put import in main function begin with.

i don't believe there's magical way function know turtle's modules unless they're either a) in namespace, or b) passed function through arguments. put in main code:

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

then, change l , r not have default arguments (they'll assigned functions through initial call), won't nameerrors.

your function should know methods are, since passed them function through main.

you should move import call start of script, though!

edit:

your code still has weird idiosyncracies. rather trying pass methods imported modules functions, use functions part of turtle object created! code should work, not common practice want use...

def draw_dragon(t, order, size, right, left, forward):     """ draw 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() 

better code this:

from turtle import screen, left, right, forward, speed, hideturtle  def draw_dragon(order, size, left, right):     """ draw 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() 

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -