python能否支持函数重载的问题
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
参数组
- 我们还可以将一个元组或者字典, 作为参数组, 来传给函数. 这样就可以帮助我们实现 "可变长参数"
- 通过将参数名前加一个
*
号, *** 之后的内容表示是一个元组.**
def log(*msg): #msg是一个元组
for m in msg:
print(m,end = ' ') #以空格分隔打印的内容
log(10,20,30)
#执行结果
10 20 30
思考: 为啥要用 \t 分割呢?
- 使用 \t 分割的行文本, 可以很方便的和linux上的一些文本处理工具搭配使用. 比如cut, sort, awk等.
- 通过在参数名前加两个星号
**
, 星号后面的部分表示传入的参数是一个字典. 这时候调用函数就可以按照关键字参数的方式传参了
def log(**msg): #msg变成一个字典
for m in msg:
print(m,msg[m])
log(x= 10,y = 20, z= 30)
#执行结果
x 10
y 20
z 30
函数重载?->不支持
- 如果Python中有两个相同名字的函数, 会出现什么样的效果呢?
后一个函数覆盖前一个函数
def Func():
print('1')
def Func():
print('2')
Func()
# 执行结果
2
- 要记得, 函数也是对象. 代码中定义两个相同名字的函数, 这样的操作类似于
a = 1
a = 2
print(a)
相当于是对Func这个变量重新进行了绑定.
为什么不支持
我们知道, C++和Java中都有函数重载, 然而Python中并没有这个语法. 思考为什么?
- 重载归根结底是为了同一个函数, 能够适应几种不同类型的输入数据.
- 重载的关键词有两个: 不同参数类型; 不同参数数目.
- Python的变量类型是在运行时检查的, 同一个函数, 就已经可以处理不同类型的参数了.
- 通过参数组和默认参数, 解决处理不同数目的参数的能力.
- 通过关键字参数, 也极大的加强了传参的灵活性, 而不比像C++那样只能按顺序传参.
综上, Python完全没有任何必要再去支持 "重载" 这样的语法了. 包括后续出现的一系列动态类型语言, 都不再支持重载
重载:
1.参数类型不同,python是动态类型,天然一个函数就可以传入不同类型
2.参数个数不同,python有默认参数和参数组的语法
所以python不需要支持重载 ,python参数规则功能强于重载
函数的返回值
- 通过return关键字返回一个对象.
- 如果没有return语句, 则返回的是None对象.
- 可以同时返回N个对象, 通过
,
分割(本质上是在返回一个元组).
def Hello():
print('hello')
print(Hello()) #如果没有return语句, 则返回的是None对象
# 执行结果
hello
None
函数的内置属性
内建函数dir
函数也是一个对象, 通过内建函数 dir 可以看到一个函数中都有哪些属性.
def Hello():
print("Hello()")
print(dir(Hello))
#执行结果
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
\
转载自:https://juejin.cn/post/7134170939624783909