2024-06-06 05:11:00 发布
网友
同一本书中的相同示例:Python deep nesting factory functions
def maker(N): def action(X): return X ** N return action
我理解它背后的概念,我认为它真的很简洁,但我似乎无法想象什么时候我可以使用这种方法。在
我可以通过让maker()同时使用N和X作为参数来轻松实现上述功能。在
maker()
有没有人用过这种工厂函数,并向我解释为什么你采用这种方法,而不是只接受多个参数?在
这仅仅是用户偏好吗?在
squarer = maker(2) print(squarer(2)) # outputs 4 print(squarer(4)) # outputs 16 print(squarer(8)) # outputs 64
本质上,这意味着您只需输入N值一次,以后就不能更改它了。在
N
我认为这主要是编程风格,因为做同一件事有多种方法。但是,这样您只能输入一次N值,这样您就可以添加代码来测试它是否为有效值,而不是每次调用函数时都进行检查。在
编辑 只是想一个可能的例子(虽然通常是通过使用类来处理):
“maker”方法将连接到该地址一次,然后为每次调用writer()维护该值。但正如我所说,这样的类通常是__init__存储值的类。在
writer()
__init__
在某种程度上,您也可以看到一些operator函数。在
operator
例如,operator.itemgetter()是这样工作的:
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=函数。在
key=
类似的,更专用的用例很容易想象,如果你有一个具体的问题,你可以用它来解决。在
在同一个联盟中,你有这些“装饰创造者”:
在这里,外部函数也是一个工厂函数,它创建“真正的装饰”函数。反过来,这甚至会产生另一个oner来代替原来给定的oner。在
本质上,这意味着您只需输入
N
值一次,以后就不能更改它了。在我认为这主要是编程风格,因为做同一件事有多种方法。但是,这样您只能输入一次
N
值,这样您就可以添加代码来测试它是否为有效值,而不是每次调用函数时都进行检查。在编辑 只是想一个可能的例子(虽然通常是通过使用类来处理):
^{pr2}$“maker”方法将连接到该地址一次,然后为每次调用
writer()
维护该值。但正如我所说,这样的类通常是__init__
存储值的类。在在某种程度上,您也可以看到一些
operator
函数。在例如,
operator.itemgetter()
是这样工作的:这通常被用作排序函数等的
key=
函数。在类似的,更专用的用例很容易想象,如果你有一个具体的问题,你可以用它来解决。在
在同一个联盟中,你有这些“装饰创造者”:
^{pr2}$在这里,外部函数也是一个工厂函数,它创建“真正的装饰”函数。反过来,这甚至会产生另一个oner来代替原来给定的oner。在
相关问题 更多 >
编程相关推荐