I have the following decorator with parameters:
from functools import wraps
def pdecor(p):
def decorator(fn):
@wraps(fn)
def wrapper(*arg
Because you assign to p
inside wrapper
, Python treats the p
inside wrapper
as local to wrapper
. In Python 3 you can use nonlocal p
to mark p
as referenced from an outer scope. In Python 2 there is no way to assign to the intermediate p, although you can get a reference to the same value by passing it into the nested functions as a keyword argument (e.g., def decorator(fn, p=p)
).
However, it's not clear what you're getting at with this anyway. p
is already only local to pdecor
. No code outside pdecor
can access p
, so decrementing it won't have any effect on any code elsewhere. So whether you can decrement p
or not, it won't really accomplish anything.