python如何给内部函数赋值

2024-03-28 21:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下python是如何将下面的值赋给y的吗。我理解函数是如何工作的,但是我不理解函数调用a(10)是如何分配它的值y。你知道吗

def outside(x):
    def inside(y):
        return x ** y
    return inside

a = outside(2)

a(10) 

Tags: 函数returndef函数调用insideoutside
2条回答

会发生什么,一步一步:

  1. 您正在用x = 2调用outside函数。你知道吗
  2. outside返回在x2的上下文中定义的函数inside。你知道吗
  3. 所以现在,a包含函数:def inside(y): return 2 ** y
  4. 您正在调用a(10),也就是说,回想步骤3,inside(10)。你知道吗

这个特性被称为Functions as First-Class Objects——它基本上意味着函数就像类实例一样,可以保存状态,可以在变量和参数中传递,就像其他任何东西一样。请注意以下示例:

>>> def x():
...     pass
...
>>> x
<function x at 0x02F91A30>  # <  function's address
>>> type(x)
<type 'function'>
>>>
>>> y = x
>>> type(y)
<type 'function'>
>>> y
<function x at 0x02F91A30>  # <  the same address
>>>

在这段代码中,a()实际上是inside()的别名,x的值固定在2。你知道吗

因此a(10)本质上是inside(10),即y的值是10。你知道吗

因为x2y10a(10)返回2 ** 10(1024)。你知道吗

这种类型的构造在Python装饰器中广泛使用。我推荐Understanding Python Decorators in 12 Easy Steps!作为一个很好的介绍。除此之外,它还解释了Python函数是如何成为一级对象的,并且可以赋值给变量,作为参数传递给其他函数等等

相关问题 更多 >