Jeremy Banks wrote:
Hi. I'm sure there've been debates about this before, but I can't seem
to figure out what to search for to pull them up, so I'm asking here.

It seems to me that a lot of things could be made much easier if you
could use primaries other than basic identifiers for the target of
function definitions. For example, if attribute references were
allowed I'd be able to do:

    def foo.bar():
        return("I'm a method!")

If we wanted to get even more liberal (which I don't see as a bad
thing, but I could see being found more objectionable by some), we
could allow the use of anything that's a valid assignment target. For
example:

    def foo["bar']():
        return("I'm a function referenced in a mapping object!")


In this case I could see there being a problem in that there's nothing
to get the function's __name__ from, but that doesn't apply for the
first example.

Many uses of this may not be Pythonic, but I'm sure there are many
that are. It just feels like an arbitrary restriction, preventing
users from doing something that may be useful.

Any feedback or direction to previous discussion on the subject would
be appreciated. Thanks!

There has been some discussion on py-dev and perhaps python-ideas, but I cannot remember any specifics as to why Guido was unpersuaded/negative.

If one regards

def name(params): body

as syntantic sugar for a (somewhat hypothetical) assignment statement

name = make_func('name', "params", "body")

(there is a function_maker function in the new module, though with a more complicated interface), then generalizing the target would seem reasonable. The function's __name__ does not seem like an issue: "foo.bar" and "foo['bar']" both direct one to the proper definition code.

Counter-argument: class and import are also implied assignments, and they also subject to the same limitation.

Counter-counter-argument: a) doing actual assignments with name = type('name', bases, dict) and name = __import__('name',...) is more feasible, and b) the need for qualified names is less for class and probably for import and c) the restriction *could* also be lifted for those two statements also.

For some, a plus for this proposal is that is directly binds the function to the target without introducing a spurious name into the local scope. It would thus reduce the perceived need for and hence pressure for generalized function expressions. I believe Guido would consider this last point a plus if so stated.

I do not believe this recurring idea has been the subject of a PEP. If not, writing one might be a service, should you choose to do so, even if rejected.

Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to