Is there a simpler way to modify all arguments in a function before using the arguments?

Ethan Furman ethan at stoneleaf.us
Fri Nov 16 22:30:34 CET 2012


bruceg113355 at gmail.com wrote:
> On Thursday, November 15, 2012 11:16:08 PM UTC-5, Ethan Furman wrote:
>> Emile van Sebille wrote:
>>
>>
>>>> Using a decorator works when named arguments are not used. When named 
>>>> arguments are used, unexpected keyword error is reported. Is there a 
>>>> simple fix?
>>> Extend def wrapper(*args) to handle *kwargs as well
>>> Emile
>>>> Code:
>>>> -----
>>>> from functools import wraps
>>>> def fix_args(fn):
>>>>     @wraps(fn)
>>>>     def wrapper(*args):
>> so this line ^ becomes
>>
>>         def wrapper(*args, **kwargs):
>>
>>>>         args = (arg.replace('_', '') for arg in args)
>> and add a line
>>
>>             for k, v in kwargs:
>>
>>                 kwargs[k] = v.replace('_', '')
>>
>>>>         return fn(*args)
>> and this line ^ becomes
>>
>>             return fn(*args, **kwargs)
>>
>>>>     return wrapper
>>
>>
>> ~Ethan~
> 
> 
> Ethan,
> 
> I tried you code suggestions but got errors.

Right, my 'for k, v in kwargs' should have been 'for k, v in kwargs.items()'

Glad you were able to make it work!

~Ethan~


More information about the Python-list mailing list