Python工厂函数

2024-06-06 05:11:00 发布

您现在位置:Python中文网/ 问答频道 /正文

同一本书中的相同示例:Python deep nesting factory functions

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

我理解它背后的概念,我认为它真的很简洁,但我似乎无法想象什么时候我可以使用这种方法。在

我可以通过让maker()同时使用N和X作为参数来轻松实现上述功能。在

有没有人用过这种工厂函数,并向我解释为什么你采用这种方法,而不是只接受多个参数?在

这仅仅是用户偏好吗?在


Tags: 方法功能概念示例参数returnfactorydef
2条回答
squarer = maker(2)

print(squarer(2)) # outputs 4
print(squarer(4)) # outputs 16
print(squarer(8)) # outputs 64

本质上,这意味着您只需输入N值一次,以后就不能更改它了。在

我认为这主要是编程风格,因为做同一件事有多种方法。但是,这样您只能输入一次N值,这样您就可以添加代码来测试它是否为有效值,而不是每次调用函数时都进行检查。在

编辑 只是想一个可能的例子(虽然通常是通过使用类来处理):

^{pr2}$

“maker”方法将连接到该地址一次,然后为每次调用writer()维护该值。但正如我所说,这样的类通常是__init__存储值的类。在

在某种程度上,您也可以看到一些operator函数。在

例如,operator.itemgetter()是这样工作的:

import operator
get1 = operator.itemgetter(1) # creates a function which gets the item #1 of the given object
get1([5,4,3,2,1]) # gives 4

这通常被用作排序函数等的key=函数。在

类似的,更专用的用例很容易想象,如果你有一个具体的问题,你可以用它来解决。在

在同一个联盟中,你有这些“装饰创造者”:

^{pr2}$

在这里,外部函数也是一个工厂函数,它创建“真正的装饰”函数。反过来,这甚至会产生另一个oner来代替原来给定的oner。在

相关问题 更多 >