Statespressions? (Re: Draft Pep (was: Re: Let's Talk About Lambda Functions!))
Michael Hudson
mwh at python.net
Thu Aug 8 05:32:48 EDT 2002
Duncan Booth <duncan at NOSPAMrcp.co.uk> writes:
> You can probably build a new code object using new.code(), but with 14
> arguments to be passed in I can't be bothered showing an example.
I have this useful function lying around:
def copy_code_with_changes(codeobject,
argcount=None,
nlocals=None,
stacksize=None,
flags=None,
code=None,
consts=None,
names=None,
varnames=None,
filename=None,
name=None,
firstlineno=None,
lnotab=None):
if argcount is None: argcount = codeobject.co_argcount
if nlocals is None: nlocals = codeobject.co_nlocals
if stacksize is None: stacksize = codeobject.co_stacksize
if flags is None: flags = codeobject.co_flags
if code is None: code = codeobject.co_code
if consts is None: consts = codeobject.co_consts
if names is None: names = codeobject.co_names
if varnames is None: varnames = codeobject.co_varnames
if filename is None: filename = codeobject.co_filename
if name is None: name = codeobject.co_name
if firstlineno is None: firstlineno = codeobject.co_firstlineno
if lnotab is None: lnotab = codeobject.co_lnotab
return new.code(argcount,
nlocals,
stacksize,
flags,
code,
consts,
names,
varnames,
filename,
name,
firstlineno,
lnotab)
So you can go
new_code = copy_code_with_changes(old_code, name="case a")
pychecker complains that it has too many arguments...
Cheers,
M.
--
This makes it possible to pass complex object hierarchies to
a C coder who thinks computer science has made no worthwhile
advancements since the invention of the pointer.
-- Gordon McMillan, 30 Jul 1998
More information about the Python-list
mailing list