Python 中的重载函数

python 中的重载函数

函数重载是指定义多个具有相同名称但不同签名的函数的能力,这意味着它们具有不同数量或类型的参数。编译器或解释器会根据函数调用期间传递的参数数量和类型自动选择函数的正确版本。

java 和 c++++ 等语言本身就支持此功能。

虽然 python 本身不支持函数重载,因为它是一种动态类型语言,但可以使用各种模块和实用程序来实现相同的功能。

这是我的重载实现。

立即学习“Python免费学习笔记(深入)”;

执行

from __future__ import annotationsimport inspectimport typingbin: dict[str, overloadnamespace] = {}class overloadnamespace:    overloads: dict[tuple[type, ...], typing.callable[..., typing.any]]    fallback: typing.callable[..., typing.any]    def __init__(self, name: str) -> none:        self.overloads = {}        self.fallback = self._fallback        bin[name] = self    def __call__(self, *args: typing.any, **kwds: typing.any) -> typing.any:        types = [type(arg) for arg in args]        types.extend([type(kwrg) for kwrg in kwds])        try:            return self.overloads[tuple(types)](*args, **kwds)        except keyerror:            return self.fallback(*args, **kwds)    @staticmethod    def _fallback(*_, **__) -> none:        raise notimplementederror

登录后复制

overloadnamespace 类是一个可调用类,充当函数名称和调用签名之间的媒介。参数被传递到 __call__ dunder 方法中,该方法将提供的数据类型与存储在重载字典中的类型元组进行匹配。返回匹配的签名,并使用提供的 args/kwargs 进行调用。如果没有找到匹配的签名,则调用后备函数。

使用 overloadnamespace 类

此类不适合手动使用,它由装饰器使用,修饰器修改函数并使用与函数提供的名称相同的名称返回 overloadnamespace 类的实例。

def overload(*args) -> typing.callable[..., overloadnamespace] | overloadnamespace:    """decorator used to create overloads of functions with same name. returns a [overloadnamespace]"""    if len(args) == 1 and inspect.isfunction(args[0]):        return overload_using_types(args[0])    def inner(func: typing.callable[..., typing.any]) -> overloadnamespace:        sig = inspect.signature(func)        assert len(args) == len(            sig.parameters        ), "number of types and args in function is not same."        namespace = (            bin[func.__name__]            if bin.get(func.__name__)            else overloadnamespace(func.__name__)        )        namespace.overloads[tuple(args)] = func        return namespace    return innerdef overload_using_types(func: typing.callable[..., typing.any]) -> overloadnamespace:    args = inspect.signature(func).parameters    types = tuple(arg.annotation for arg in args.values())    namespace = (        bin[func.__name__]        if bin.get(func.__name__)        else overloadnamespace(func.__name__)    )    namespace.overloads[types] = func    return namespace

登录后复制

重载装饰器使用装饰器值或类型提示检查参数类型并返回命名空间类。

使用示例

# types in decorator@overload(int, int)def sum(a, b):    return a+b# or as typehints@overload def sum(a: float, b: float):    return int(a+b)+1sum(1,2) # 3sum(1.23, 2.0) # 4

登录后复制

这只是一个基本想法,适用于非联合固定类型。

倒退

后备函数用作当没有参数模式与调用模式匹配时要调用的函数。

def fallback(    func: typing.Callable[..., typing.Any],) -> OverloadNamespace:    """Fallback function to be called if no overloads match to the provided arguments."""    namespace = (        bin[func.__name__]        if bin.get(func.__name__)        else OverloadNamespace(func.__name__)    )    namespace.fallback = func    return namespace@fallback def sum(*args):    return sum(args)sum(1,2,3,4) # 10

登录后复制

以上就是Python 中的重载函数的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2193039.html

(0)
上一篇 2025年2月25日 19:50:16
下一篇 2025年2月25日 17:30:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 具有依赖注入的 FastAPI 身份验证

    fastapi 是一个用于在 python 中构建 api 的现代 web 框架。它是我个人最喜欢的 web 框架之一,因为它内置了对 openapi 规范的支持(这意味着您可以编写后端代码并从中生成所有内容),并且它支持依赖注入。 在这篇…

    2025年2月25日
    200
  • python抢火车票票源代码

    利用 Python 脚本可自动化抢火车票流程,提升抢票概率:安装 schedule 和 selenium 库。准备浏览器驱动。编写抢票脚本。模拟浏览器操作,包括打开网站、输入信息。定位车次列表。筛选车次,选择目标车次。提交订单,填写信息并付…

    2025年2月25日
    200
  • python12306抢票教程

    本教程提供使用 Python 抢购 12306 火车票的详细步骤:安装 Python 和相关库。获取 12306 网站的 cookie。登录 12306 网站。查询车次信息。解析车次信息,筛选出有余票的车次。打印有余票的车次信息。根据需要自…

    2025年2月25日
    200
  • python抢车票教程

    使用 Python 抢车票包含以下步骤:安装 requests、BeautifulSoup 和 webdriver 库。查找车次信息,包括车次、发车时间和购票链接。使用 Python 代码设置浏览器选项、创建浏览器实例并持续刷新购票页面。找…

    2025年2月25日
    200
  • python抢东西脚本

    Python 抢东西脚本是一种利用 Python 编程语言编写的自动化工具,用于快速抢购限量或稀缺商品。它通过模拟浏览器行为、解析网站 HTML、在商品可购买时自动提交订单来工作。 Python 抢东西脚本的好处包括极快的速度、自动化和提高…

    2025年2月25日
    200
  • python抢票属于什么类型

    Python 抢票属于自动化脚本类型,其特点包括:自动化、快速、高效和可定制,主要用于抢购热门火车票或特定日期的火车票。 Python 抢票属于什么类型 Python 抢票属于自动化脚本类型。 详细解释 自动化脚本是一种使用编程语言编写的计…

    2025年2月25日
    300
  • python模拟电脑操作

    Python可模拟电脑操作,包括:鼠标移动:使用pyautogui库的moveTo和click方法。键盘输入:使用keyboard库的write、press和release方法。文件管理:使用os模块的exists、listdir、mkdi…

    2025年2月25日
    200
  • python能抢票还能做什么

    Python 不仅用于抢票,还拥有广泛的应用,包括:数据分析与可视化网页爬取机器学习自动化任务Web 开发DevOps 和基础设施管理科学计算游戏开发 Python 的应用:从抢票到更多 Python 因其强大的抓取、自动化和数据处理功能而…

    2025年2月25日
    200
  • 如何用Python抢火车票

    使用 Python 抢火车票分以下步骤:安装依赖项并导入库。创建浏览器实例并加载火车票预订网站。填写预订信息并提交。循环查找车次,找到符合条件的车次并点击预订按钮。填写乘客信息并确认订单。支付车票并关闭浏览器实例。 如何使用 Python …

    2025年2月25日
    200
  • python怎么制作抢票软件

    如何使用 Python 制作抢票软件:安装 requests、BeautifulSoup4、lxml 软件包。向抢票网站发送 HTTP GET 请求,获取页面 HTML。解析 HTML,提取票务信息。设置定时器定期检查票务状态。检测到有票时…

    2025年2月25日
    200

发表回复

登录后才能评论