python中的工厂函数

工厂函数:一个能够记住嵌套作用域的变量值的函数,尽管那个作用域已经不存在了。

>>> def maker(N):
    def action(X):
        return X**N
    return action

这定义了一个外部函数,这个函数简单地生成并且返回了一个嵌套的函数,却并不调用这个内嵌函数。如果调用外部函数就得到一个生成的内嵌函数的一个引用。这个内嵌函数是通过运行内嵌def而创建的。如果再调用外部得到的那个函数:

>>> f = maker(2)
>>> f(3)                    # 3的平方
9
>>> f(4)                    # 4的平方
16
>>> 

它将调用内嵌函数,也就是说,maker函数内部的名为action的函数。这一部分最不平凡的就是,内嵌的函数记住了2,即maker含函数内部的变量N的值,尽管在调用执行f时maker已经返回了值并且退出。实际上,在本地作用域的N被作为执行的状态信息保留了下来,我们返回其参数的平方运算。
如果再调用外层函数,将得到一个新的有不同状态信息的嵌套函数,得到了一个参数的三次方而不是平方,但是最初的仍像往常一样是平方。

>>> g = maker(3)
>>> g(3)             # 3的3次方
27
>>> f(3)             # 3的2次方
9
>>> 

这能奏效,是因为像这样对一个工厂函数的每次调用,都得到了自己的状态信息集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值