cs61A---2020fall‘s recording---Day 1

一、lab00

1.lab00.py---简单的计算:

文档中的题目:

def twenty_twenty():
    """Come up with the most creative expression that evaluates to 2020,
    using only numbers and the +, *, and - operators.

    >>> twenty_twenty()
    2020
    """
    return ------
#任意组合数字之后的答案:

def twenty_twenty():
    """Come up with the most creative expression that evaluates to 2020,
    using only numbers and the +, *, and - operators.

    >>> twenty_twenty()
    2020
    """
    return (1000+10)*2
result=twenty_twenty()
print(result)

2.关于变量、赋值的小问题:

Q: 求最终输出的结果?

>>> f = min

>>> f = max

>>> g,h = min,max

>>> max=g

>>> max(f(2,g(h(1,5),3)),4)

A:

第一句将min赋值给f

第二句将max赋值给f

现在f是max

第三句g是min,h是max

第四句:max指向min的应用

最终变为:

max:求最小值

f:求最大值

g:求最小值

h:求最大值

故式子最终结果为:3

题外:一个很好用的可视化程序网站(Online Python tutor):Python compiler - visualize, debug, get AI help from ChatGPT

3.defining function(定义函数)

3.1基本格式:

<<<def <name>(<formal parameters>):     #parameters:参数

      return<return expression>

3.2understanding:

定义函数的过程是一个高度抽象化的过程,抽象就是将复杂的事情赋予一个简单的意义,封装起来,不考虑其中的细节。因此,函数的定义是简单的也是复杂的。

5106c02c8b0644a092e767693659caf5.png

3.3step:

1. 创建一个带有签名<name>(<形式参数>)的函数

2. 将该函数体设置为第一行之后的所有内容缩进

3. 将<name>绑定到当前框架中的那个函数 

3.4函数在环境的产物

459a8d1fe9044351a5c040eea30fc26a.png

环境是记录名称和值之间对应关系的内存 

目前的环境只有两种:

一种是全局框架(global frame)

一种是局部框架后面跟着全局框架(local frame followed by the global frame)

框架:名称与值之间的绑定。

以下为粗略的示意图:

4a370c6004884948ad8846269e28ae92.jpeg

43fcf666a01b441184e2993fc5289281.png

68fe68808ed149a7a30af07a04b7bc06.png

4.Q&A

4.1什么是frame

x = 12

def f(y):

      x = 3

      print(x)

f(7)

print(x)

frame就是C语言的一对大括号。

4.2global frame 与local frame的关系:

如同上段代码,先执行的是global frame:x=12,接着执行local frame 这是跳脱出global 的一段执行,紧接着回到global frame 执行函数外的代码。

其中:

print内容优先级:local frame>global frame ,global frame起到补充的作用。

运行顺序优先级:global frame>local frame,从整体到局部,从前到后。

可以在online python tutor 中运行如下代码来理解上述含义:

def f(x):
    return g(x + 1) + 2

def g(y):
    return y+3

f(7)

同样的,我们无法直接通过global frame去访问local frame中的某个变量,但是可以创建一个该变量在global frame中的名字, 间接去访问。

4.3内置函数如何定义frame(框架):

为了简化程序的environment,我们一般默认内置函数完成正确,程序的environment只包括我们自身构建的environment。包括:1.我们构建整体的框架 2.我们构建的frame内的程序功能与关系,等等。

这样可以有效降低关系之间的复杂程度,利于计算复杂度以及相关算法。

于是有些时候,我们可以通过改变内置函数从而优化程序。

4.4local frame与current frame 的关系?

任何时刻都会有一个local frame ,我们称它为current frame。

一个函数调用另一个函数会发生什么?

参见4.2的代码部分。

有好几个local frame的情况下,目前正在执行的叫做current frame。

4.5调用函数时是否使用了frame?

4.6print 与内置函数

print无法返回return,因此无法直接使用print的值进行运算,但是内置函数自带return,可以直接参与其它计算。

  • 32
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值