Python——函数的高级用法

一. 将函数绑定到不同的名称

Python 中一切皆对象,我们定义的名称仅仅是与这些对象绑定的标识符。函数也不例外,它们也是对象,同样可以被绑定到不同的名称。

>>> def welcome(info):
...     print(info)
...     return
...
>>>
>>> welcome             # 输出函数 welcome 的内存地址
<function welcome at 0x015D4A98>
>>>
>>> f = welcome         #将 welcome 的内存地址当做值赋值给变量 f
>>>
>>> f                   #  输出 f,其实就是输出 welcome 的内存地址
<function welcome at 0x015D4A98>
>>>
>>> f('Hello')          # 等同于 welcome('Hello')
Hello

welcome 和 f 指的是同一个函数对象。

【注】 函数名在不带小括号(())时,表示的是函数的内存地址。

二. 将函数作为参数(高阶函数)

在 Python 中,将其他函数作为参数的函数称为高阶函数

>>> def addf(x,y):      # 求和
...     return x+y
...
>>>
>>> def  subtract(x,y):         # 求差
...     return x - y
...
>>>
>>>
>>> def operate( func,x,y):     # 高阶函数
...     result = func(x,y)
...     return result
...
>>>
>>> # 调用高阶函数
...
>>> operate(addf, 34,45)
79
>>> operate(subtract, 34,45)
-11

将函数对象 addf 和 subtract 当做 operate() 的参数进行传递。

三. 将函数作为返回值(返回函数)

函数是一个对象,所以可以作为某个函数的返回值。

>>> def outer():                # 封闭函数
...     def inner(n):           # 嵌套函数
...             sum = 0
...             for i in range(1,n+1):
...                     sum += i
...             return sum
...     return inner            # 返回一个函数对象
...
>>>
>>> f1 = outer()
>>> f1
<function outer.<locals>.inner at 0x015D4AE0>
>>> f2 = outer()
>>> f2
<function outer.<locals>.inner at 0x015D4B70>
>>>
>>>
>>> outer( 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: outer() takes 0 positional arguments but 1 was given
>>>
>>>
>>> f1(5)
15
>>> f2(10)
55

f 和 f2 不同,这是因为 inner() 是在执行 outer() 期间被定义的,所以第二次的创建对第一次没有影响。

当调用 f(n) 时,才会真正地计算求和结果。

猜你喜欢

转载自blog.csdn.net/qq_41573234/article/details/81676455