You can implement a decorator to force output type, e.g.
from functools import wraps def retain_type(f): @wraps(f) def wrapper(inp): res = f(inp) if type(res) == type(inp): return res elif isinstance(res, str): return res.encode('utf-8') elif isinstance(res, bytes): return res.decode('utf-8') else: raise TypeError("Output type shoud be either bytes or str.") return wrapper
@retain_type def inc(num): if isinstance(num, bytes): num = num.decode('utf-8') return type(num)(float(num)+1)