diff options
Diffstat (limited to 'Lib/turtle.py')
-rw-r--r-- | Lib/turtle.py | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/Lib/turtle.py b/Lib/turtle.py index 0c439f1e3ba..2ff54278e2f 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -109,6 +109,7 @@ import types import math import time import os +import inspect from os.path import isfile, split, join from copy import deepcopy @@ -169,9 +170,8 @@ _CFG = {"width" : 0.5, # Screen def config_dict(filename): """Convert content of config-file into dictionary.""" - f = open(filename, "r") - cfglines = f.readlines() - f.close() + with open(filename, "r") as f: + cfglines = f.readlines() cfgdict = {} for line in cfglines: line = line.strip() @@ -3147,7 +3147,7 @@ class RawTurtle(TPen, TNavigator): if pen is down. All other methodes for turtle movement depend on this one. """ - ## Version mit undo-stuff + ## Version with undo-stuff go_modes = ( self._drawing, self._pencolor, self._pensize, @@ -3893,31 +3893,35 @@ except: def getmethparlist(ob): - "Get strings describing the arguments for the given object" - argText1 = argText2 = "" + """Get strings describing the arguments for the given object + + Returns a pair of strings representing function parameter lists + including parenthesis. The first string is suitable for use in + function definition and the second is suitable for use in function + call. The "self" parameter is not included. + """ + defText = callText = "" # bit of a hack for methods - turn it into a function # but we drop the "self" param. # Try and build one for Python defined functions - argOffset = 1 - counter = ob.__code__.co_argcount - items2 = list(ob.__code__.co_varnames[argOffset:counter]) - realArgs = ob.__code__.co_varnames[argOffset:counter] + args, varargs, varkw = inspect.getargs(ob.__code__) + items2 = args[1:] + realArgs = args[1:] defaults = ob.__defaults__ or [] - defaults = list(map(lambda name: "=%s" % repr(name), defaults)) + defaults = ["=%r" % (value,) for value in defaults] defaults = [""] * (len(realArgs)-len(defaults)) + defaults - items1 = list(map(lambda arg, dflt: arg+dflt, realArgs, defaults)) - if ob.__code__.co_flags & 0x4: - items1.append("*"+ob.__code__.co_varnames[counter]) - items2.append("*"+ob.__code__.co_varnames[counter]) - counter += 1 - if ob.__code__.co_flags & 0x8: - items1.append("**"+ob.__code__.co_varnames[counter]) - items2.append("**"+ob.__code__.co_varnames[counter]) - argText1 = ", ".join(items1) - argText1 = "(%s)" % argText1 - argText2 = ", ".join(items2) - argText2 = "(%s)" % argText2 - return argText1, argText2 + items1 = [arg + dflt for arg, dflt in zip(realArgs, defaults)] + if varargs is not None: + items1.append("*" + varargs) + items2.append("*" + varargs) + if varkw is not None: + items1.append("**" + varkw) + items2.append("**" + varkw) + defText = ", ".join(items1) + defText = "(%s)" % defText + callText = ", ".join(items2) + callText = "(%s)" % callText + return defText, callText def _turtle_docrevise(docstr): """To reduce docstrings from RawTurtle class for functions |