- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我无法理解 partial
在 functools
中的工作原理。我有来自 here 的以下代码:
>>> sum = lambda x, y : x + y
>>> sum(1, 2)
3
>>> incr = lambda y : sum(1, y)
>>> incr(2)
3
>>> def sum2(x, y):
return x + y
>>> incr2 = functools.partial(sum2, 1)
>>> incr2(4)
5
现在排队
incr = lambda y : sum(1, y)
我知道我传递给 incr
的任何参数都将作为 y
传递给 lambda
这将返回 sum(1 , y)
即 1 + y
.
我明白这一点。但是我没看懂这个incr2(4)
。
4
如何在偏函数中作为 x
传递?对我来说,4
应该取代 sum2
。 x
和4
是什么关系?
最佳答案
大致来说,partial
会做这样的事情(除了关键字参数支持等):
def partial(func, *part_args):
def wrapper(*extra_args):
args = list(part_args)
args.extend(extra_args)
return func(*args)
return wrapper
因此,通过调用 partial(sum2, 4)
,您可以创建一个行为类似于 sum2
的新函数(准确地说是可调用函数),但有一个位置参数较少的。缺少的参数总是由 4
代替,因此 partial(sum2, 4)(2) == sum2(4, 2)
至于为什么需要它,有多种情况。仅举一个例子,假设您必须在预期有 2 个参数的地方传递一个函数:
class EventNotifier(object):
def __init__(self):
self._listeners = []
def add_listener(self, callback):
''' callback should accept two positional arguments, event and params '''
self._listeners.append(callback)
# ...
def notify(self, event, *params):
for f in self._listeners:
f(event, params)
但是您已经拥有的函数需要访问第三个 context
对象才能完成其工作:
def log_event(context, event, params):
context.log_event("Something happened %s, %s", event, params)
所以,有几种解决方案:
自定义对象:
class Listener(object):
def __init__(self, context):
self._context = context
def __call__(self, event, params):
self._context.log_event("Something happened %s, %s", event, params)
notifier.add_listener(Listener(context))
lambda :
log_listener = lambda event, params: log_event(context, event, params)
notifier.add_listener(log_listener)
有部分:
context = get_context() # whatever
notifier.add_listener(partial(log_event, context))
在这三个中,partial
是最短和最快的。(对于更复杂的情况,您可能需要自定义对象)。
关于python - functools partial 是如何做到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15331726/
我的 node.js 应用程序中有一个 Handlebars / mustache 布局文件,如下所示: {{> header}} {{> navbar}} {{{body}}} {{> footer
我的 node.js 应用程序中有一个 Handlebars / mustache 布局文件,如下所示: {{> header}} {{> navbar}} {{{body}}} {{> footer
我有一个主文件,home.html.erb在里面我渲染了大约 15 个部分。这些部分非常小,我想知道是否可以将它们全部放在一个文件中,然后部分地呈现部分部分。 例如,我会制作 _big_partial
在下面的 TypeScript 代码片段中,我需要从一个对象分配给另一个对象,其中它们都是 Partial .在这里,我的直觉是 typescript 应该能够理解正在发生的事情,因为在第 (B) 行
在我的应用程序中,用户通过 AJAX 呈现 _show.html.erb 部分。我现在想要的是在该部分中有一个按钮,单击时将其关闭。 我遇到的问题:如果我将按钮放在部分之外,一切都会正常 - 我可以
我有人造 curry Programming Clojure书。 user=> (defn faux-curry [& args] (apply partial partial args)) #'us
我在尝试实现 AJAX 时遇到了一些困难,其中“link_to” View 被渲染,并且在该 View 中我有另一个 AJAX 调用。 我有菜单侧边栏,其中有这样的内容: "> 在applicatio
我是 asp.net MVC 的新手,请告诉我应该在何处使用局部 View 以及在何处渲染局部 View 。提前致谢 最佳答案 This link might help. Html.RenderPar
我在下拉菜单的 Onchange 事件上更新 DIV 元素。而我正在使用partial 来替换DIV 中的内容。这是我的 ajax 调用: var cach_this = this;
我正在使用 UI-Router AngularJS 的框架,以呈现嵌套的部分。我在渲染父部分及其子部分时遇到问题。这是我的代码: window.app.config(['$stateProvider'
是否存在包含可从Partial中访问的Partial名称的变量?。在_foo.haml中:
我有/views/layouts/_navigation.html.erb,其中生成了部分用户配置文件:
我有一组我想用部分渲染的项目: @items = ['a','b','c'] @items, :partial => 'item' %> 我想用升序对元素进行编号。所以输出应该是: 3: a 2:
尝试使用 .Netcore 制作 Web 应用程序 当我运行该应用程序时,出现此错误。帮我 这不是错误而是警告。但帮我解决 我在下面添加了我的代码 @ViewBag.Title
标题有点令人困惑。 我正在尝试实现一些类似 reddit 的评论系统。这样您就可以查看 Post 并向其添加多态的 Comment 。或者,评论另一条评论。 我的观点是这样的: Post:
我需要编写一个算法来引导机器人穿过“迷宫”(一个有起点、目标、空白区域和不可穿越的空间或“墙壁”的矩形网格)。它可以在任何基本方向(N、NW、W、SW、S、SE、E、NE)上移动,每次移动的成本不变。
?sort指出partial参数可以是NULL或用于部分排序的索引向量。 我试过了: x <- c(1,3,5,2,4,6,7,9,8,10) sort(x) ## [1] 1 2 3 4
MVC4,单击下拉项时,JavaScript 函数在 View 的“脚本”部分中调用。函数对 Controller Action 进行ajax调用,返回Json数据。我需要将一些返回值传递给 Html
我正在使用 Automapper 将数据从 objectA 传输到 objectB classe ObjectA { string Title; string Summary; } cla
我想使用 TortoiseSVN 提交文件的一部分,有什么方法可以做到这一点吗? 我将举一个例子来更清楚地说明我为什么要这样做。 我有一个文件,其中包含一些在构建过程中被替换的定义,如下所示: #de
我是一名优秀的程序员,十分优秀!