在Codewars.com上,我遇到了以下任务:
创建一个函数
add
,该函数在连续调用时将数字加在一起。所以add(1)
应该返回1
,add(1)(2)
应该返回1+2
,…
虽然我熟悉Python的基础知识,但从未遇到过可以连续调用的函数f(x)
,即可以称为的函数f(x)(y)(z)...
。到目前为止,我什至不确定如何解释这种表示法。
作为一个数学家,我怀疑f(x)(y)
是分配到每个功能x
的函数g_{x}
,然后返回g_{x}(y)
,同样也f(x)(y)(z)
。
如果这种解释是正确的,Python将允许我动态创建对我来说非常有趣的函数。我在过去一个小时内一直在网上搜索,但找不到正确方向的线索。但是,由于我不知道如何调用此编程概念,所以这可能并不奇怪。
您如何称呼这个概念?在哪里可以阅读更多有关它的信息?
我不知道 函数 链接和 可调用 链接是否一样多,但是,由于函数 是 可调用的,所以我猜没有什么坏处。无论哪种方式,我都可以通过两种方式来考虑:
int
和定义__call__
:第一种方法是使用一个定义了int
子类的自定义子类,__call__
该子类返回具有更新后值的自身新实例:
class CustomInt(int):
def __call__(self, v):
return CustomInt(self + v)
add
现在可以定义函数以返回CustomInt
实例,该实例作为可返回自身的更新值的可调用对象,可以依次调用:
>>> def add(v):
... return CustomInt(v)
>>> add(1)
1
>>> add(1)(2)
3
>>> add(1)(2)(3)(44) # and so on..
50
另外,作为int
子类,返回值保留的__repr__
和__str__
行为int
。 但是,对于更复杂的操作,应适当定义其他标记 。
正如@Caridorc在评论中指出的,add
也可以简单地写成:
add = CustomInt
将类重命名为add
代替CustomInt
也可以类似地工作。
我能想到的唯一其他方法涉及一个嵌套函数,该函数需要一个额外的空参数调用才能返回结果。我 没有
使用nonlocal
并选择将属性附加到函数对象,以使其在Python之间可移植:
def add(v):
def _inner_adder(val=None):
"""
if val is None we return _inner_adder.v
else we increment and return ourselves
"""
if val is None:
return _inner_adder.v
_inner_adder.v += val
return _inner_adder
_inner_adder.v = v # save value
return _inner_adder
这将连续返回自身(_inner_adder
),如果val
提供了a,则将其递增(_inner_adder += val
),否则,将按原样返回值。就像我提到的,它需要额外的()
调用才能返回增加的值:
>>> add(1)(2)()
3
>>> add(1)(2)(3)() # and so on..
6
我是C语言的新手,正在尝试使用双链表创建一个电话簿应用程序。但是,我无法确定如何删除联系人,即此人的名字、姓氏和号码,并将上一个节点链接到下一个节点。我已经附上下面的代码。 任何帮助都将不胜感激。谢谢
本文向大家介绍什么是JavaScript中的函数链接?,包括了什么是JavaScript中的函数链接?的使用技巧和注意事项,需要的朋友参考一下 功能链 函数链接不过是使用点表示法将函数分组在一行中而已。这种类型的链接使代码非常简洁,并提高了性能。在这里,我们将学习使用常规对象进行函数链接。 a)没有功能链 在以下示例中的对象“OBJ”被创建并在该对象中的公共属性 称为“I”是使用关键字创建“这个
问题内容: 功能是什么?是用户界面吗?我们什么时候使用它? 问题答案: 它提出了一个提示给用户(可选的),从用户获得输入,并通过在一个字符串的用户返回数据的输入。请参阅有关的文档。 例: 这与 后者的不同之处在于后者试图解释用户给出的输入。通常最好避免并坚持使用自定义的解析/转换代码。 注意:这适用于Python 2.x
函数是具有某种特定功能的代码块,可以重复使用。在前面的学习中你已经认识到了很多 Python 的内置函数。这节课我们就来创建我们自己的函数: 1. 重复性的代码 1.1 什么是重复性的代码 在处理功能相似的逻辑时,会出现结构雷同的代码,例如:有两个列表,编写程序分别打印这两个列表,代码如下: 案例演示 预览 复制 复制成功! a = [1, 2, 3] b = [10, 20, 30] # 打印
有没有可能创建一个函数,它将lambda函数作为参数(每个lambda函数使用参数),然后返回一个具有单个参数的新函数,并返回所有lambda函数的乘积? 以下是我的非工作示例: 所以本质上,你有一个函数,它需要4个lambda函数,每个函数使用参数。例如,的参数可以类似于。 然后返回一个名为的新函数,该函数的输出是所有lambda函数的乘积,并且有一个参数,该参数传递到的每个lambda函数的参
给定一个字符串,返回子字符串长度2在该字符串中出现的次数计数,并作为该字符串的最后2个字符,因此“hixxxhi”产生1(我们不计算结束子字符串)。 我在其中一个网站上发现了这个问题(https://codingbat.com/prob/p145834). 网站上对上述问题的回答如下: 我对下面提到的代码行有疑问 现在,我知道这段代码正在提取字符串“str”的最后两个字母。我感到困惑的是变量名。正