3 ms·
Now also add back lambda tuple unpacking. I wish Guido et al would totally get over the cringe aversion to functional programming concepts.
by foxes 5y ago
Now also add back lambda tuple unpacking. I wish Guido et al would totally get over the cringe aversion to functional programming concepts.
- canjobear 5y agoSeriously. I think Python 3 was a big improvement but removing tuple unpacking in function arguments (while adding it elsewhere!) was a huge regression.
- aix1 5y agoI wonder what the rationale was for the removal?
- the_mitsuhiko 5y agoI think to simplify `__signature__`.
- pansa2 5y agohttps://www.python.org/dev/peps/pep-3113/#why-they-should-go https://www.python.org/dev/peps/pep-3113/#why-they-should-go
- sambe 5y agohttps://www.python.org/dev/peps/pep-3113/ https://www.python.org/dev/peps/pep-3113/ "In order to get all of the details about the tuple from the function one must analyse the bytecode of the function. This is because the first bytecode in the function literally translates into the tuple argument being unpacked. Assuming the tuple parameter is named .1 and is expected to unpack to variables spam and monty (meaning it is the tuple (spam, monty)), the first bytecode in the function will be for the statement spam, monty = .1. This means that to know all of the details of the tuple parameter one must look at the initial bytecode of the function to detect tuple unpacking for parameters formatted as \.\d+ and deduce any and all information about the expected argument. Bytecode analysis is how the inspect.getargspec function is able to provide information on tuple parameters. This is not easy to do and is burdensome on introspection tools as they must know how Python bytecode works (an otherwise unneeded burden as all other types of parameters do not require knowledge of Python bytecode). The difficulty of analysing bytecode not withstanding, there is another issue with the dependency on using Python bytecode. IronPython [3] does not use Python's bytecode. Because it is based on the .NET framework it instead stores MSIL [4] in func_code.co_code attribute of the function. This fact prevents the inspect.getargspec function from working when run under IronPython. It is unknown whether other Python implementations are affected but is reasonable to assume if the implementation is not just a re-implementation of the Python virtual machine." I'm not very convinced without further information - it sounds like it was already solved in CPython, and bug in IronPython? The whole PEP reads as if it's looking for excuses for removal. I find this especially annoying for lambdas.