A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-list/2001-April/084781.html below:

def <dynamic function name> () syntax ?

def <dynamic function name> () syntax ?Alex Martelli aleaxit at yahoo.com
Thu Apr 5 04:32:56 EDT 2001
"Andrew Kuchling" <akuchlin at mems-exchange.org> wrote in message
news:3ditkkv9oo.fsf at ute.cnri.reston.va.us...
> "Bruce Edge" <bedge at troikanetworks.com> writes:
> > Can the follwoing be accomplished in Python?
> >
> > I want to create a func named "abc":
>
> Just bind the name to 'abc'.
> def dummy_name ():
>     ...
>
> abc = dummy_name
>
> Or: exec '%s = dummy_name' % name

Sure, but this has a flaw...:

>>> def dummy_name():
...     pass
...
>>> abc = dummy_name
>>> abc.func_name
'dummy_name'
>>>

i.e., the function internally retains the "dummy name".

One can work around this using module new, e.g.:

>>> import new
>>> if dummy_name.func_defaults is None:
...     abc = new.function(dummy_name.func_code, dummy_name.func_globals,
'abc')
... else:
...     abc = new.function(dummy_name.func_code, dummy_name.func_globals,
'abc',
...         dummy_name.func_defaults)
...
>>>


> But such dynamic creation of functions usually strikes me as a flawed
> design.  An informal rule of mine is that 'exec' or 'eval' should only
> be needed when you're expecting arbitrary expressions, perhaps in a
> config file, but exec'ing a single statement or applying eval() to a
> single name is usually a sign of programming in some non-Pythonic
> style.

Absolutely true!!!  And I suspect that 90%+ of the time this
also extends to usages of module new...


Alex




More information about the Python-list mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4