
1 XYxe 2017-06-20 13:13:30 +08:00 一个比较粗略的实现: def not_null(*varnames): def outer(func): def inner(*args, **kwargs): args_name = func.__code__.co_varnames args_cnt = func.__code__.co_argcount # 没用到 flag = True for name in varnames: # 这里还要考虑 varnames 中有 args 中没有的参数 index = args_name.index(name) # 还可以加上考虑 kwargs 参数 flag = flag and (args[index] is not None) if not flag: raise TypeError('something is None') result = func(*args, **kwargs) return result return inner return outer |
2 XYxe 2017-06-20 13:17:37 +08:00 格式乱了,贴个图吧 另外在用的时候要:@not_null('param1', 'param2') |
3 araraloren 2017-06-20 14:42:56 +08:00 @XYxe 返回值也要判断一下,严格的定义肯定实现不了~~ |
4 XYxe 2017-06-20 14:59:18 +08:00 @araraloren #3 哎?判断返回值那检查一下倒数第四行的 result 不就可以了吗? |
5 araraloren 2017-06-20 16:04:41 +08:00 @XYxe 是的,不要在意后面那句话,我看错了 |