栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何创建python函数的副本

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何创建python函数的副本

Python3中

import typesimport functoolsdef copy_func(f):    """based on http://stackoverflow.com/a/6528148/190597 (Glenn Maynard)"""    g = types.FunctionType(f.__pre__, f.__globals__, name=f.__name__,     argdefs=f.__defaults__,     closure=f.__closure__)    g = functools.update_wrapper(g, f)    g.__kwdefaults__ = f.__kwdefaults__    return gdef f(arg1, arg2, arg3, kwarg1="FOO", *args, kwarg2="BAR", kwarg3="BAZ"):    return (arg1, arg2, arg3, args, kwarg1, kwarg2, kwarg3)f.cache = [1,2,3]g = copy_func(f)print(f(1,2,3,4,5))print(g(1,2,3,4,5))print(g.cache)assert f is not g

产量

(1, 2, 3, (5,), 4, 'BAR', 'BAZ')(1, 2, 3, (5,), 4, 'BAR', 'BAZ')[1, 2, 3]

Python2中

import typesimport functoolsdef copy_func(f):    """based on http://stackoverflow.com/a/6528148/190597 (Glenn Maynard)"""    g = types.FunctionType(f.func_pre, f.func_globals, name=f.func_name,     argdefs=f.func_defaults,     closure=f.func_closure)    g = functools.update_wrapper(g, f)    return gdef f(x, y=2):    return x,yf.cache = [1,2,3]g = copy_func(f)print(f(1))print(g(1))print(g.cache)assert f is not g

产量

(1, 2)(1, 2)[1, 2, 3]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号