回答
在你表达function([1, 2, 3, 4])(10)
有两种calls,一个带参数[1, 2, 3, 4]
和其他与参数10
。为此,function
必须是可调用的,返回可调用的。 Python很大程度上依赖于具有定义其行为的类型的对象,并且可调用性是这些行为之一,通过具有__call__
方法(这是可调用类型)的对象递归定义。由于这种动态行为,我们无法从表达式中看出function
是什么类型。
尽管如此,我们可以提供使表达式有效的示例。例如:
function = lambda x: x.__contains__
这将使用lambda表达式创建一个匿名函数,该函数是可调用的。该函数返回一个绑定方法(假设它的参数具有__contains__
方法),该方法又可以调用,并且表达式将计算为False
。
class function:
def __init__(self,a):
"Method called during object initialization"
# Note that the return value doesn't come from this method.
# self is created before it is called and returned after.
def __call__(self,b):
"Method called when the object is called"
return "Well, the first one wasn't quite a function."
这使名为function
类和类是可调用的,这是我们如何实例化它们。所以第一次调用变成了对象实例化,第二次调用调用了一个对象。在这个例子中,我们实际上并没有函数,但我们确实有两个方法在两个调用中被调用。
AChampion的示例使用了两个正常的函数定义,其中一个发生在另一个函数内,在该调用的a
值上创建闭包。这是一个比较传统的方法,虽然我们可以使用可变值还是懵懵懂懂的水域:
def function(a):
def inner(b):
return sum(a) == b
return inner
>>> l = [1,2,3,4]
>>> eq = function(l)
>>> eq(10)
True
>>> eq(15)
False
>>> l.append(5)
>>> eq(15)
True
>>> eq(10)
False
我们在这里看到,这是不是在数学意义上的纯函数,它的值由比其他国家的影响其论据。我们经常尝试避免这种副作用,或者至少通过突出显示状态容器来暴露它们,例如在方法调用中。
最后,这取决于上下文中,表达可以通过多种方式实现,包括NameError
如果function
根本没有被定义,或者如果TypeError
其中一个呼叫尝试的非可调用对象上失败。它仍然是句法正确的Python,并且这两个例外都可以处理,尽管这样做可能有点颠倒。一个例子可能是一个电子表格程序,其中单元格公式是Python表达式;你会用特定的命名空间(全局变量)evaluate,并捕获任何错误来解释输入错误的公式。
我假设基于你在你的问题提供的信息有限了很多。
但它看起来像你试图了解功能封闭。这里是一个完全人为的例子:
def function(a):
def inner(b):
return sum(a) == b
return inner
>>> function([1,2,3,4])(10)
True
>>> eq = function([1,2,3,4])
>>> eq(10)
True
>>> eq(11)
False
- 1. 有人可以解释这些javascript的概念吗?
- 2. 有人可以解释'&'在这种情况下的工作原理吗?
- 3. 有人可以在混淆中解释DashO概念吗?
- 4. 在这种情况下可以从库扩展功能吗?
- 5. 有没有人可以向我解释可插拔适配器的概念吗?
- 6. 有人可以解释这个.htaccess RewriteRule的功能吗?
- 7. 有人可以给我一个这个功能的解释吗?
- 8. python元组,有人可以解释这种行为吗?
- 9. 在这种情况下,有人可以解释“参考”和“指针”之间的区别吗?
- 10. 有人可以向我解释这个功能吗?
- 11. 有人可以解释这些JavaScript cookie功能吗?
- 12. 任何人都可以解释这个python静态类变量的情况吗?
- 13. 有人可以解释AlarmManeger的这种奇怪的行为吗?
- 14. 有人可以解释一下这段Python代码吗?
- 15. 有人可以解释System.nanoTime()的这种描述吗?
- 16. 有人可以解释我这种多态性的输出吗?
- 17. 有人可以解释这种奇怪的toString行为吗?
- 18. 有人可以解释这种递归的工作原理吗?
- 19. cin是在这种情况下使用的正确功能吗?
- 20. 有人可以在javascript中解释这种行为吗?
- 21. 有人可以在C#中解释这种语法吗?
- 22. 这怎么可能?有人可以解释这个吗?
- 23. 在这种情况下,我有可能提到钥匙吗?
- 24. 我可以在没有Python解释器的情况下构建LLVM吗?
- 25. 有人可以解释这一点吗?
- 26. 有人可以解释这个宏吗?
- 27. 你能解释一下Service-builder的概念吗?
- 28. 你能解释一下RESTful的Web概念吗?
- 29. 有人可以解释一下吗?
- 30. 在这种简单的情况下可能发生死锁吗?
这不是访问第10个元素。 'function'函数返回一个函数,然后用单个参数'10'调用函数。 –
'function'究竟是什么? –