python函数教程:在Python中实现函数重载的示例代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python函数教程:在Python中实现函数重载的示例代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2883字,纯文字阅读大概需要5分钟。
内容图文
![python函数教程:在Python中实现函数重载的示例代码](/upload/InfoBanner/zyjiaocheng/640/994dcf30123b4a3e8ea6f13d5ee08ff6.jpg)
这篇文章主要介绍了在Python中实现函数重载的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
假设你有一个函数connect,它有一个参数address,这个参数可能是一个字符串,也可能是一个元组。例如:
connect('123.45.32.18:8080')
connect(('123.45.32.18', 8080))
你想在代码里面兼容这两种写法,于是你可能会这样写代码:
def connect(address):
if isinstance(address, str):
ip, port = address.split(':')
elif isinstance(address, tuple):
ip, port = address
else:
print('地址格式不正确')
这种写法简单直接,但是如果参数的类型更多,那么你就需要写很长的 if-elif-elif-…-else 。代码看起来就非常不美观。
学习过 Java 的同学,应该对函数重载比较熟悉,可以定义几个名字相同的函数,但是他们的参数类型或者数量不同,从而实现不同的代码逻辑。
在 Python 里面,参数的数量不同可以使用默认参数来解决,不需要定义多个函数。那如果参数类型不同就实现不同的逻辑,除了上面的 if-else 外,我们还可以使用 functools 模块里面的 singledispatch 装饰器实现函数重载。
我们来写一段代码:
from functools import singledispatch
@singledispatch
def connect(address):
print(f' 传输参数类型为:{type(address)},不是有效类型')
@connect.register
def _(address: str):
ip, port = address.split(':')
print(f'参数为字符串,IP是:{ip}, 端口是:{port}')
@connect.register
def _(address: tuple):
ip, port = address
print(f'参数为元组,IP是:{ip}, 端口是:{port}')
connect('123.45.32.18:8080')
connect(('123.45.32.18', 8080))
connect(123)
我们运行一下这段代码,大家看看根据参数的不同,有什么样的不同效果:
可以看到,我们调用的函数,始终都是 connect ,但是由于传入参数的类型不同,它运行的结果也不一样。
我们使用 singledispatch 装饰一个函数,那么这个函数就是我们将会调用的函数。
这个函数在传入参数不同时的具体实现,通过下面注册的函数来实现。注册的时候使用 @我们定义的函数名.register 来注册。被注册的函数名叫什么无关紧要,所以这里我都直接使用下划线代替。
被注册的函数的第一个参数,通过类型标注来确定它应该使用什么类型。当我们调用我们定义的函数是,如果参数类型符合某个被注册的函数,那么就会执行这个被注册的函数。如果参数类型不满足任何一个被注册的函数,那么就会执行我们的原函数。
使用类型标注来指定参数类型是从 Python 3.7才引入的新特性。在 Python 3.6或之前的版本,我们需要通过 @我们定义的函数名.register(类型) 来指定类型,例如:
添加链接描述
from functools import singledispatch
@singledispatch
def connect(address):
print(f' 传输参数类型为:{type(address)},不是有效类型')
@connect.register(str)
def _(address):
ip, port = address.split(':')
print(f'参数为字符串,IP是:{ip}, 端口是:{port}')
@connect.register(tuple)
def _(address):
ip, port = address
print(f'参数为元组,IP是:{ip}, 端口是:{port}')
同时,还有一个需要注意的点,就是只有第一个参数的不同类型会被重载。后面的参数的类型变化会被自动忽略
最后给大家推荐一个资源很全的python学习聚集地,[点击进入],这里有我收集以前学习心得,学习笔记,还有一线企业的工作经验,且给大定on零基础到项目实战的资料,大家也可以在下方,留言,把不懂的提出来,大家一起学习进步
内容总结
以上是互联网集市为您收集整理的python函数教程:在Python中实现函数重载的示例代码全部内容,希望文章能够帮你解决python函数教程:在Python中实现函数重载的示例代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。