On Wed, 14 Mar 2012 08:35:12 +1100, Ben Finney wrote: > r...@panix.com (Roy Smith) writes: > >> Using argparse, if I write: >> >> parser.add_argument('--foo', default=100) >> >> it seems like it should be able to intuit that the type of foo should >> be int (i.e. type(default)) > […] > > -0.5. > > That feels too magical to me. I don't see a need to special-case that > usage. There's not much burden in being explicit for the argument type.
And yet you are programming in Python instead of Java, Pascal or Ada :) It's not magic at all, it's science! Or to be precise, it's a very simple form of type inference, similar to (but much more basic than) that used by languages such as Go, Haskell, Ocaml, and ML. http://en.wikipedia.org/wiki/Type_inference Given the premise that arguments in argparser are typed, if the argument can take the value 100 (the default), it is logical that it can't be a string (because 100 is not a string) or a boolean (because 100 is not a boolean) or a list (because... well, you get the point). What if you want an argument --foo that will accept arbitrary types? Then you would need some way to tell argparse not to infer the type from the default. Python *names* are not typed, but objects are. Python infers the type of the object from its syntax. We write: n = 100 and not: n = int 100 Assuming that argparse arguments are typed, and that there is a way to over-rule the type-inference, there is no need to declare types in the common case. Explicit declarations should be used only for the uncommon cases where type inference cannot cope. -- Steven -- http://mail.python.org/mailman/listinfo/python-list