sicp Lecture 3 Control 第三讲的课,实际如下内容属于function(函数)
Why does this do (And why)
def id(x):
return x
print(id(id)(id(13)))
这里print并没有函数副作用,输出值是13
主要是id(x)== (id)(x) 所有(id)(id(13))==(id)(13)
代码论证
➜ ~ python
Python 2.7.16 (default, Mar 25 2021, 18:52:10)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def id(x):
... return x
...
>>> print id(id)
<function id at 0x10187cd70>
>>> print id((id))
<function id at 0x10187cd70>
>>>
变量、变量值与环境
变量只是一个名称 变量值是数据本身 ,数据包括各种数据类型还有函数 环境跟定义和运行有关,比如每次定义一个函数和变量,这些都处于global全局环境中,全局帧 然后如果函数递归调用或嵌套调用就会派生出局部帧,这些局部帧会有链式关系,指明自已的父亲是谁,同样也有可能派生出新的局部帧(儿子或孙子),也有新的值,会指向函数。
什么是闭包
闭包就是函数里A又定义一个子函数B,最终返回值是子函数B,你可以继续调用子函数B 代码示例
def double(x):
def f(x):
return x+x
return f
g = double(5)
g(5) #返回的是f
函数调用和函数引用的区别
如上面return f是函数引用,f(x)是函数的调用 函数引用是返回整个f名称对应的函数体,跟上面的g一个意思
关于变量
变量可以用来存储值,值可以用来传入函数使用,也可以用来运算 那么变量同时可以存储函数,函数一样可以用来被当成值return或当成函数形参传递