show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次我们调试了自己定义的函数sorry
- 调试有这样一些命令
- step 跳入当前行所在函数
- return 跳出当前函数回到调用的位置
- where 告诉我现在执行到了哪里(当前播放头的程序栈位置)
- 有了这样一些命令
- 我们就可以更好地调试python程序了
- 可以完成一些更复杂的套路么?🤔
- 我们下次再说!👋
- 我们身边到处都是套路
- 为什么会有套路?
- 套路是经过前人千百次的错误总结出来的实践经验
- 真的好使
- 套路就是实践验证合理的
- 我们的肌肉和骨骼就是dna编程的结果
- 也是经过35亿年不断修改代码的结果
- 就连我们的走路跑步都是套路
- 刚出生的时候我们还要学习走路
- 逐渐我们就熟悉了目前的套路
- 走路的时候不需要思考和感知了
- 按照套路走就可以了
- 可是套路有套路的问题
- 套路固定僵化
- 容易被针对
- 无脑放战术
- 其实不太走心
- 放弃观察和思考
- 顶级高手都是灵活应对的
- 我们究竟应该怎么办?
- 套路无处不在
- 城市套路深
- 我要回农村
- 农村路也滑
- 套路更复杂
- 农村已整改
- 套路深似海
- 套路用多了
- 就老套了
- 就俗了
- 但是从俗中再产生新的套路
- 就脱俗了
- 情书是我抄的
- 套路我是学的
- 但喜欢你是真心的
- 尝试用左手
- 拿筷子
- 刷牙
- 写字
- 换了一个模式
- 有助于延缓老年痴呆
- 但是还是老套路
- 这世界本没有道
- 道可道
- 也就成了道
- 真正的套路不是一次
- 而是一次又一次
- 社会学家说
- 套路是传统
- 心理学家说
- 套路是习惯的思路
- 基于经验降低风险的思路
- 音乐家说
- 套路是反复重复是最有效
- 是各种音乐流派
- 画家说
- 套路是画风
- 是惯用的笔法
- 手工艺人说
- 套路是经典的款式
- 电子工程师说
- 套路就是反复执行的模块
- 表面上我们是在使用各种各样的模式
- 实际上我们通过模式在控制
- 水位
- 水温
- 速度
- 是否浸泡
- 是否加漂洗
- 等等能够精确到电机、传感器、时间等具体信号上
- 棉麻温度 30 高水位速度 1200 浸泡 加漂洗
- 牛仔温度 60 高水位 速度800 浸泡 加漂洗
- 衬衣温度40 一般水位速度800 浸泡 加漂洗
- 29分钟快洗 高水位 温度常温 速度400 浸泡加漂洗
- 单漂洗 温度常温 速度1200 无浸泡 本身就是漂洗
- 电压力锅也一样
- 电压力锅也是如此的方式
- 电饭煲工作流程(蒸饭)
- 加热到100度
- 正常放气降压
- 保持100度持续25分钟
- 之后进入保温模式
- 保持温度在40度
- 电压力锅工作流程(熬汤)
- 加热到100度
- 不放气继续加压加温
- 保持温度115度
- 内部压力加到70kpa
- 保持(115度,70pa)20分钟
- 慢慢降压
- 我们来试试做一个电压力锅的程序
- 这样我们用户自定义的函数就可以加上参数了
- 调用的时候也要传递给函数参数
- 就像
print("hello")
def cook(mode):
if mode == "rice":
print("========rice mode starts =========")
print("加热到100度")
print("正常放气降压")
print("保持100度持续25分钟")
print("之后进入保温模式")
print("保持温度在40度")
print("========rice mode ends =========")
elif mode == "bone":
print("=======bone mode ends =========")
print("加热到100度")
print("不放气继续加压加温")
print("保持温度115度")
print("内部压力加到70kpa")
print("保持115度,70pa 20分钟")
print("慢慢降压")
print("=======bone mode ends =========")
else:
print("==========\33[41m[error]\33[0mmode is not valid!===")
cook("nothing")
cook("bone")
cook("rice")
- 这是怎么个流程呢?
- 三次调用函数
- 先走了一个错误的使用流程
- 括号里面给的模式是"nothing"
- 然后走一个熬汤的流程
- 括号里面给的模式是"bone"
- 最后走了一个蒸饭的流程
- 括号里面给的模式是"rice"
- 我们这个参数调用的时候
- 不但要有函数名
- 而且还要有参数列表
- 什么是参数列表呢?
- 我们先看函数定义
- 函数cook后面的括号里面有个参数
- 参数的名字叫做mode
- mode具体是什么我们在定义的时候还不知道
- mode只是一个形式上的参数
- 也叫形参parameter
- 函数的形参只是形式上的
- 具体是用什么模式
- 根据的事调用的时候
- 给到函数的实实在在的参数
- 也叫实参(argument)
- 形参和实参是不同的
- 我们来调试一下
- 从第一次调用开始
- 一路n下去
- 就直接结束了
- 没有进入到函数里面
- 如何debug进入到函数里面呢?
- 我们不但可以明确断点放在第几行
- 还可以明确断点放在函数的入口么?
- 再n下去
- 这次n了之后
- 确实可以跳转到函数里面的断点了
- 那我可以看看给过来的参数么?
- 确实可以看到mode的值是
- "nothing"
- 还有什么更快的方法么?
- 查询帮助
- 形参mode
- 目前获得了具体的实参值是"nothing"
- 跳过了第一个分支(2-9)
- 跳过了第二个分支(9-18)
- 进入了第三个分支(19-20)
- 这就是第一次函数调用
- 后两次其实也类似
- 根据不同的实际参数,决定出:
- 蒸饭
- 煲汤
- 什么也不做
- 这种参数调用我们以前也经常用
- print函数
- 接受一个字符串参数
- 这是hello world时候就知道的
- 类似的参数很常见
- 就像原料
- 比如要做一个瓶瓶罐罐
- 有个流程套路之外
- 你得有原料吧?
- 这里要的原料就是黏土
- 不管什么样的黏土
- 反正你得给我黏土
- 白色的黏土
- 返回的是一个白陶罐
- 黄色的黏土
- 返回的是一个红陶罐
- 但是实际给我的参数(原料)必须得是黏土
- 就如同电饭锅需要知道自己的模式
- 蒸饭
- 熬粥
- 蹄髈
- 如果你告诉电饭锅你的模式是牛仔服...
- 这个放不进去
- 也没法闷煮
- 给了正确参数之后
- 流程都是那么一个流程
- 白黏土出白管子
- 黄黏土出黄罐子
- 或者说沏茶
- 沏的是红茶 砌出来 喝到的就是红茶
- 里面放的是绿茶 喝到的就是绿茶
- 里面放的是黑茶 喝到的就是黑茶
- 里面 放的是咖啡 喝到的就是咖啡
- 流程套路一样
- 咖啡可以冲一泡
- 作为参数可以接受
- 至少比牛仔服好多了
- 其实我们用过很多函数
-
f = open("oeasy.txt")
-
open函数就接受一个函数名
-
并且返回一个文件类型的对象
- 可以s(tep into) 到函数open里面
- 看看他的实现细节
- 我们去总结一下
- 对于程序员来说
- 函数就是封装好的一个套路
- 这封装好的套路也可以接收参数
- 就像洗衣机、电饭煲一样可以设定一些模式
- 传递的参数有两部分两种
- 函数定义的时候,给出的是一个形式上的样子,是形参(parameter)
- 函数调用的时候,给出的是具体的实际参数的值,是实参(argument)
- 调用的时候完成一个赋值的过程
- 把实参的值赋给形参
- 这次传递了字符串类的模式作为实参
- 还可以传递具体的整型数字数值作为实参么?🤔
- 我们下次再说!👋