On 19 Mar, 2013, at 10:24, Larry Hastings <la...@hastings.org> wrote: > > >>> We'd want one more mild hack: the DSL will support positional >>> parameters, and inspect.Signature supports positional parameters, so >>> it'd be nice to render that information. But we can't represent that in >>> Python syntax (or at least not yet!), so we can't let ast.parse see it. >>> My suggestion: run it through ast.parse, and if it throws a SyntaxError >>> see if the problem was a slash. If it was, remove the slash, reprocess >>> through ast.parse, and remember that all parameters are positional-only >>> (and barf if there are kwonly, args, or kwargs). >> >> It will be simpler to use some one-character separator which shouldn't be >> used unquoted in the signature. I.e. LF. > > I had trouble understanding what you're suggesting. What I think you're > saying is, "normally these generated strings won't have LF in them. So let's > use LF as a harmless extra character that means 'this is a positional-only > signature'." > > At one point Guido suggested / as syntax for exactly this case. And while > the LF approach is simpler programmatically, removing the slash and reparsing > isn't terribly complicated; this part will be in Python, after all. > Meanwhile, I suggest that for human readability the slash is way more > obvious--having a LF in the string mean this is awfully subtle.
You could also add the slash to the start of the signature, for example "/(arg1, arg2)", that way the positional only can be detected without trying to parse it first and removing a slash at the start is easier than removing it somewhere along a signature with arbitrary default values, such as "(arg1='/', arg2=4 /) -> 'arg1/arg2'". The disadvantage is that you can't specify that only some of the arguments are positional-only, but that's not supported by PyArg_Parse... anyway. Ronald _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com