2024-03-28 21:31:46 发布
网友
有人能解释一下python是如何将下面的值赋给y的吗。我理解函数是如何工作的,但是我不理解函数调用a(10)是如何分配它的值y。你知道吗
y
a(10)
def outside(x): def inside(y): return x ** y return inside a = outside(2) a(10)
会发生什么,一步一步:
x = 2
outside
x
2
inside
a
def inside(y): return 2 ** y
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()
inside()
因此a(10)本质上是inside(10),即y的值是10。你知道吗
10
因为x是2,y是10,a(10)返回2 ** 10(1024)。你知道吗
2 ** 10
这种类型的构造在Python装饰器中广泛使用。我推荐Understanding Python Decorators in 12 Easy Steps!作为一个很好的介绍。除此之外,它还解释了Python函数是如何成为一级对象的,并且可以赋值给变量,作为参数传递给其他函数等等
会发生什么,一步一步:
x = 2
调用outside
函数。你知道吗outside
返回在x
为2
的上下文中定义的函数inside
。你知道吗a
包含函数:def inside(y): return 2 ** y
a(10)
,也就是说,回想步骤3,inside(10)
。你知道吗这个特性被称为Functions as First-Class Objects——它基本上意味着函数就像类实例一样,可以保存状态,可以在变量和参数中传递,就像其他任何东西一样。请注意以下示例:
在这段代码中,
a()
实际上是inside()
的别名,x
的值固定在2
。你知道吗因此
a(10)
本质上是inside(10)
,即y
的值是10
。你知道吗因为
x
是2
,y
是10
,a(10)
返回2 ** 10
(1024)。你知道吗这种类型的构造在Python装饰器中广泛使用。我推荐Understanding Python Decorators in 12 Easy Steps!作为一个很好的介绍。除此之外,它还解释了Python函数是如何成为一级对象的,并且可以赋值给变量,作为参数传递给其他函数等等
相关问题 更多 >
编程相关推荐