python-functools
-
functools-partial
import functools print(dir(functools)) #partial函数(偏函数) #把一个函数的某些参数设置默认值,反回一个新的函数,调用这个新函数会更简单 def showarg(*args,**kwargs): print(args) print(kwargs) p1 = functools.partial(showarg,1,2,3) #这句话是p1指向了一个新的函数 只不过这个函数调用showarg 并传1,2,3 p1() p1(4,5,6) p1(a='python',b='itcast') print("==================================") p2 = functools.partial(showarg,a=3,b='linux') p2() p2(1,2) p2(a='python',b='itcast') # 运行结果 ['MappingProxyType', 'RLock', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES', 'WeakKeyDictionary', '_CacheInfo', '_HashedSeq', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_c3_merge', '_c3_mro', '_compose_mro', '_convert', '_find_impl', '_ge_from_gt', '_ge_from_le', '_ge_from_lt', '_gt_from_ge', '_gt_from_le', '_gt_from_lt', '_le_from_ge', '_le_from_gt', '_le_from_lt', '_lru_cache_wrapper', '_lt_from_ge', '_lt_from_gt', '_lt_from_le', '_make_key', 'cmp_to_key', 'get_cache_token', 'lru_cache', 'namedtuple', 'partial', 'partialmethod', 'reduce', 'singledispatch', 'total_ordering', 'update_wrapper', 'wraps'] (1, 2, 3) {} (1, 2, 3, 4, 5, 6) {} (1, 2, 3) {'b': 'itcast', 'a': 'python'} ================================== () {'b': 'linux', 'a': 3} (1, 2) {'b': 'linux', 'a': 3} () {'b': 'itcast', 'a': 'python'}
-
functools-wraps
import functools def note(func): '''note function''' @functools.wraps(func) #别人查看帮助文档的时候还是test的文档1 def wrapper(): '''wrapper function''' print('note something') return func() return wrapper @note #@note 等价于 test = note(test) def test(): '''test function''' print("I am test") print(help(test)) # 运行结果 Help on function test in module __main__: test() test function (END)