首页 > 其他分享 >[CS61A-Fall-2020]学习记录四 Lecture4中有意思的点

[CS61A-Fall-2020]学习记录四 Lecture4中有意思的点

时间:2024-02-29 21:34:52浏览次数:30  
标签:square return 函数 Lecture4 CS61A 2020 adder def lambda

首先,本文不是总结归纳,只是记录一些有趣的知识点罢了

assert

课堂中在讲授函数,如

from math import pi

def area_circle(r):
    return r * r * pi

但老师提出,当r为-10时,函数不会报错,于是引入assert来检测参数

from math import pi

def area_circle(r):
    # 参数应为正数
    assert r > 0, 'A length must be positive'
    return r * r * pi

assert r > 0

也就是当r大于0时,无事发生;否则发生错误并提示后面的语句

 

Higher-Order Functions

一开始读题并不懂,什么是高等级的函数呢?课上有个例子大致如下

def make_adder(k):
    def adder(n):
        return n + k
    return adder

make_adder函数内又定义了个adder函数

此时,如果调用make_adder(1),会返回一个k为1的adder函数

而如果调用make_adder(1)(2),则相当于调用adder(2),此时k=2

像这样的方式可以十分方便地减少重复代码,分离函数功能,更接近DRY(Don't Repeat Yourself)

 

Lambda

square = lambda x: x * x

lambda表达式使得简单函数无需用def定义后再调用

在python中,与def相比,lambda定义出的函数有一个特点,那就是没有内在自己的名字

直接输入上式, square,会发现在内存中,square对应的函数其实是lambda,不叫square

老师表示该功能在python中不常用,但其他有的地方会很重要,故学习并记录

下面是一个稍微有些难度的例子,与lambda本身关系不大

# 寻找到f值为True的正数x
def search(f): x = 0 while True: if f(x): return x x += 1 def square(x): return x * x
# 可以求出y对应的x满足f(x) == y def inverse(f): return lambda y: search(lambda x, f(x) == y)

这里的inverse函数在初次看的时候有些令人费解,但一点点看

首先从输出结果

>>> sqrt = inverse(square)
>>> square(8)
64
>>> sqrt(64)
8

可见sqrt通过inverse承担了解平方的功能

inverse中f对应的是square,而在search函数中的f对应的是lambda x, f(x) == y

sqrt(64)的64则是赋给了y,然后再在search中寻找让f(x) == y成立的正数x并返回

 

If的另一种表达

直接举栗子比较清晰

x = 0
x = 1 if x > 0 else x = -1

x > 0是条件,满足该条件时执行if前,否则执行else后

当作拓展知识吧

 

标签:square,return,函数,Lecture4,CS61A,2020,adder,def,lambda
From: https://www.cnblogs.com/luyaoqi/p/18045283

相关文章

  • noip2020
    NOIp2020游记第一次打NOIp,有点小紧张/kel8:30开考,8:15进考场顺便带了一大包巧克力进场,想着考试的时候吃开考打开文件夹一看string就大窘了,字符串算法刚好没学啊/fadT1一看第一反应网络流,大喜,前两天刚复习兴致勃勃准备开始打dinic,然后发现这题和网络流一点关系没有随便打......
  • P6646 [CCO2020] Shopping Plans 题解
    好好玩的题。思路对于前\(K\)小方案问题。我们可以考虑当前方案对下一个方案的转移。重点在于转移的最优化与不重不漏。只有一种种类假设没有\(l,r\)的限制怎么做。我们不妨把所有价格排序。发现一种状态转移到另一种状态,无异与将其中已选择的一个物品不选,选择他后面......
  • [BJDCTF2020]Easy MD5
    打开题目后就是一个没有任何回显的查询页面 查看源码无果,在f12中的网络功能中发现了其中一个数据包中的响应头中有提示 提示为:hint:select*from'admin'wherepassword=md5($pass,true)可见这里最主要的是要绕过sql语句中的password=md5($pass,true),这里的话就需要绕过M......
  • cs61a回顾
    从1月25开始到2.20,完成第一个项目hog。总结让自己进度慢的主观因素:妄图一次阅读掌握所有知识:违反了《为什么学生不喜欢上学》中大脑不是用来思考的,它的真正作用在于使你避免思考的前提,避免让自己学习新知识感到有阻碍是最重要的。cs61a的课本难度还是有的啊!非母语阅读的困......
  • P7167 [eJOI2020 Day1] Fountain-st表
    这个题目,可以看出每一个盘里的水往下流出的路径会是一样的,而且没有修改操作,所以我们可以预处理出每个盘里往下的路径,已经要下去所需要的水。那么首先需要寻找每个盘往下的第一个盘是那个。对于盘i来说,第一个盘j应满足$j>i&&D_j>D_i$,所以就可以想到用单调栈处理每个盘下第一......
  • [MRCTF2020]Easy_RSA
    [MRCTF2020]Easy_RSA首先,RSA计算的5个基本公式n=pqφ(n)=(p-1)(q-1)求φ(n)e*dmodφ(n)=1求ed其中之一c=m^emodn加密m=c^dmodn解密题目:importsympyfromgmpy2importgcd,invertfromrandomimportrandintfromCrypto.Util.numberimportgetPrime,is......
  • 2020年全年回顾
    19年10月被领导安排参与松湖会战,详细经历见2019年全年回顾,参与HMSCoreMLKit业务的交付工作。在19年12月份,在会战部门的领导安排下,作为主要责任人承接语音识别业务的交付工作。在20年7月,部门组织结构调整,一部分同事承接了新的业务,切换到了新部门。在20年10月,部门业务调整,HMSC......
  • P8725 [蓝桥杯 2020 省 AB3] 画中漂流
    原题链接题解1.总共有t秒,每一秒不是上升就是下降2.要在救援队赶来之前把体力全部花光code#include<bits/stdc++.h>usingnamespacestd;intdp[3005][1505]={0};//代表第i秒使用j点体力的方案数intmain(){intd,t,m;cin>>d>>t>>m;dp[0][0]=1;for(i......
  • P8732 [蓝桥杯 2020 国 ABC] 答疑
    原题链接题解存在某种问问题顺序使得答案最小,可是我们不知道排序的规律,遂试探给定一种排序,交换任意相邻同学问问题顺序,对答案的改变如下:code#include<bits/stdc++.h>usingnamespacestd;structunit{ints,a,e,sum;}stu[1005];boolcmp(unita,unitb){ret......
  • [BJDCTF2020]Cookie is so stable
    [BJDCTF2020]Cookieissostable打开环境,在页面源代码中发现提示查看cookiescookie里的user的值会显示到页面中在user处尝试注入{{7*'7'}}回显7777777==>Jinja2{{7*'7'}}回显49==>Twig回显49所以是Twigpayload:{{_self.env.registerUndefinedFilterCallback("e......