Python 函数的高级用法

作者: 一去、二三里
个人微信号: iwaleon
微信公众号: 高效程序员

在 Python 中,函数是一个一等公民(first-class citizen)。这意味着,函数与任何其他对象(例如:整数、字符串、列表)一致,既可以动态地创建或销毁,也可以传递给其他函数,或作为值进行返回。

将函数绑定到不同的名称

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

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

可以看出,greet 和 f 指的是同一个函数对象。

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

将函数作为参数

在 Python 中,将其他函数作为参数的函数称为高阶函数。如果使用过 map()、filter() 和 reduce() 之类的函数,那么肯定知道这一点。

下面,我们定义三个函数:add() - 求和,subtract() - 求差,operate() - 作为高阶函数。

>>> def add(x, y):  # 求和
...     return x + y
... 
>>> 
>>> def subtract(x, y):  # 求差
...     return x - y
... 
>>> 
>>> def operate(func, x, y):  # 高阶函数 - 将函数作为参数
...     result = func(x, y)
...     return result
... 
>>> 

函数调用很简单:

>>> operate(add, 5, 3)
8
>>> 
>>> operate(subtract, 5, 3)
2

这样,就可以将函数对象 add 和 subtract 当做 operate() 的参数进行传递了,使用起来非常方便。

将函数作为返回值

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

这里涉及到一个概念 - Python 嵌套函数

来看一个简单的求和函数,对数字 1- n 相加:

>>> def outer():  # 封闭函数
...     def inner(n):  # 嵌套函数
...         sum = 0
...         for i in range(1, n):
...             sum += i
...         return sum
...     return inner  # 返回一个函数对象
... 
>>> 

当每次调用封闭函数时,都会创建一个嵌套函数的新实例:

>>> f = outer()
>>> f
<function outer.<locals>.inner at 0x7f38327ab9d8>
>>> 
>>> f2 = outer()
>>> f2
<function outer.<locals>.inner at 0x7f38327ab950>

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

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

>>> f(5)
10
>>> 
>>> f2(10)
45
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一去丶二三里

有收获,再打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值