首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python函数

Python函数
EN

Stack Overflow用户
提问于 2013-10-23 17:15:51
回答 2查看 1.6K关注 0票数 3

同一本书中的同一个例子:Python deep nesting factory functions

代码语言:javascript
复制
def maker(N):
    def action(X):
        return X ** N 
    return action

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

通过让maker()同时使用N和X作为参数,我可以很容易地实现上面的内容。

有没有人使用过这种类型的工厂函数,并向我解释了为什么您采用这种方法而不是只使用多个参数?

这仅仅是用户偏好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-23 17:24:11

代码语言:javascript
复制
squarer = maker(2)

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

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

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

编辑只是想到了一个可能的例子(尽管它通常是通过使用类来处理的):

代码语言:javascript
复制
writer = connectmaker("127.0.0.1")
writer("send this text")
writer("send this other text")

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

票数 3
EN

Stack Overflow用户

发布于 2013-10-23 17:22:41

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

例如,operator.itemgetter()的工作方式如下:

代码语言:javascript
复制
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=函数。

如果您有一个可以解决的具体问题,那么更多的专用用例是很容易想象的。

在同一个联盟中,你有这样的“装饰设计师”:

代码语言:javascript
复制
def indirect_deco(outer_param):
    def real_deco(func):
        def wrapper(*a, **k):
            return func(outer_param, *a, **k)
        return wrapper
    return real_deco

@indirect_deco(1)
def function(a, b, c):
    print (((a, b, c))

function(234, 432)

在这里,外部函数也是一个工厂函数,它创建了“真正的装饰”功能。这反过来,甚至创造了另一个人,取代原来的一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19548164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档