I'm unclear on how scoping is handled in Python scripts. ===== ## parameters = name print "Hello %s" % name return printed ===== works as a script but: ===== ## parameters = name print function() print "Hello %s" % name return printed def function(): return "Goodbye" ===== does not -- because 'function' is not found. However: ===== ## parameters = name def function(): return "Goodbye" # Main print function() print "Hello %s" % name return printed ===== is OK, as 'function' is defined above the main stuff. However I can't get 'function' to see another function e.g.: ===== ## parameters = name def add2(a): return a+2 def function(): n = add2(3) return "Goodbye" # Main print function() print "Hello %s" % name return printed ===== 'add2' won't be found, I guess because it's "two levels deep" (??). However, it'll work if I make 'add2' internal to 'function'... ===== ## parameters = name def function(): def add2(a): return a+2 n = add2(3) return "Goodbye" # Main print function() print "Hello %s" % name return printed ===== So what are the rules here? I'm used to Python modules with one shared scope for all top-level function defs, no matter what level they're called from. Why can't 'add2' be defined at the same level as 'function' (above), or is there syntax to make this work (I've been trying stuff like script.add2(3) or context.add2(3) but that doesn't help). Help? Kirby