Skip to content

Latest commit

 

History

History
392 lines (284 loc) · 9.44 KB

218-543327-理解嵌套调用.sy.md

File metadata and controls

392 lines (284 loc) · 9.44 KB
show version enable_checker
step
1.0
true

理解嵌套

回忆

  • 上次完成了画松树工作
    • 通过一层层的工作的细分
    • 定义了五个函数
    • 然后使用函数调用完成工作
  • 每个函数都有自己的代码段
    • 负责各自的任务
  • 如何理解这个职业分工各司其职呢?

复杂任务

  • 南北大菜
  • 满汉全席
    • 蒸羊羔,蒸熊掌,蒸鹿尾儿, 烧花鸭,烧雏鸡儿,烧子鹅 ,卤煮咸鸭,酱鸡,腊肉,松花,小肚儿 ,晾肉,香肠...

图片描述

  • 不是一个人做出来的
    • 一个人 累死了
    • 菜早就凉了

职业分工

  • 后厨职位很多
    • 各有各的岗位职责
    • 比如说水台
  • 水台
    • 入门职业,很苦也累,工资最低
    • 主要负责宰杀各类动物
    • 对水产品进行打鳞等初步加工

图片描述

  • 水台线的头
    • 水爷

红案

图片描述

  • 红案就是热菜
    • 以炉灶和火为基本手段
    • 红红火火

菜杂

图片描述

  • 备菜提供下一步的实参
  • 下一步是墩子

图片描述

墩子

  • 头墩
    • 墩子的头
    • 既要有很强的刀工技术
    • 还要熟悉原料性能、价格及配比知识
    • 同时承担高档菜肴的半成品搭配、制作
    • 有时还要负责编制筵席菜单
    • 量化配料

图片描述

  • 二墩
    • 负责切、配工作
  • 三墩
    • 负责统货原料
  • 冷墩
    • 负责冷盘菜的烧卤、拌炝
  • 熟墩
    • 切配装盘
  • 墩子接收菜杂的实参
  • 得到的返回值是备好的菜
  • 准备交给下一个师傅
    • 炉子

炉子

  • 主厨(红锅、掌勺、掌灶)
    • 炉子上用第一火眼或第一面灶(体现地位)
    • 经验多、技术高
    • 负责烹制筵席菜肴或难度大的高档菜肴
    • 后厨核心
  • 以上就是红案了

图片描述

  • 除了红案还有白案

白案

  • 白案负责糕团、面点制作
    • 白指的是米、面
    • 案指的是案板

图片描述

  • 大案(主案)
    • 负责大宗面点制作
    • 包括手工面条
    • 馄饨皮擀制及各种包子、馒头、花卷、水饺等制作
    • 大案的助手是面二
  • 小案
    • 负责筵席点心的制作
    • 制作各种点心
  • 面锅
    • 负责下面条

图片描述

  • 这就是职业分工
  • 为什么要有分工呢?🤔

职业分工

  • 为了提高效率和质量

图片描述

  • 从打猎时代就有分工了
    • 有的近战抗伤害
    • 有的远程输出
    • 有的做武器
    • 有的布置陷阱
    • 有的负责喊叫
  • 如果现在要包饺子怎么个调用过程呢?

包饺子

  • 任务分析

图片描述

  • 要做饺子
    • 就得有面
    • 还得有馅
    • 还得煮
  • 我们先看面

  • 面函数(function)
    • 找(call)大案
    • 大案找(call)面二和面擀皮
  • 面二开始准备饺子皮流程(function)
    • 需要实际2个形式参数(parameter)
      • 麦芯粉

图片描述

  • 经过相应流程
    • 返回饺子皮
  • 然后是饺子馅

  • 找(call)头墩制馅函数(function)
    • 头墩找(call)三墩备菜函数
    • 头墩找(call)二墩剁馅函数

图片描述

  • 是不是很像画松树函数
    • 调用画树冠
    • 调用画树干

三墩备菜函数

  • 三墩也不是从零开始
    • 韭菜不是三墩种的
    • 韭菜是作为实参给到三墩的
    • 三墩洗菜、摘菜
    • 把根切掉
    • 把烂的扔掉

图片描述

黑箱

  • 三墩备菜函数对外界是个黑箱
    • 韭菜洗了几次
    • 什么样的扔什么样的不扔
    • 这些都是三墩备菜函数来负责的

图片描述

  • 外面只看见韭菜进来
    • 洗好的韭菜作为返回值出去
    • 交给二墩

二墩剁馅函数

  • 二墩剁馅函数接收到三墩切馅函数的返回值作为实参(arguement)
  • 开始切馅儿流程

图片描述

  • 二墩对外也是个黑箱
    • 韭菜是怎么切的
    • 鸡蛋韭菜 多少比例
    • 加了多少葱
    • 怎么加的香油
    • 只有二墩知道
  • 二墩只要韭菜和鸡蛋
    • 是乌鸡蛋、走地鸡 还是白羽鸡
    • 都可以
    • 这都不重要
  • 重要的是返回馅儿给头墩
  • 作为包饺子函数的馅形式参数(formal parameter)的实际参数(actual parameter)

头墩包饺子函数

  • 包饺子函数(function)
    • 面和馅这两个实参(arguement)传进来
    • 定义的形参(parameter)是馅这种形式
      • 肉馅
      • 茴香馅
      • 韭菜馅都行
      • 肉片不行

图片描述

  • 对两个两个实参进行处理
  • 返回值为饺子元组

形参与实参

  • 形参(parameter)是一些在函数定义时出现的名字
  • 实参(argument)是参数调用时具体传递给函数的值
  • 形参(parameter)定义函数可以接受的参数形式
  • 实参(argument)满足形参(parameter)要求
    • 才能完成参数赋值的过程

图片描述

  • 包饺子函数要的是馅儿这种形式的
  • 实际上传给包饺子函数的参数必须得是这种形式的(形式参数)
    • 韭菜鸡蛋
    • 牛肉大葱
    • 茴香鸡蛋都可以
    • 但必须是实实在在的馅儿(实际参数)
  • 包的过程对外也是一个黑盒子
    • 挤饺子
    • 捏饺子都行
    • 只要最终是饺子就行
  • 返回饺子元组
  • 然后呢?

煮饺子

图片描述

  • 接收上一个包饺子函数返回的饺子元组实参
  • 进行煮这个操作

图片描述

  • 煮饺子函数对外也是黑箱
    • 点水三次
    • 出锅
  • 返回煮熟的饺子元组
    • 最终完成!
  • 这个过程模拟厨师完成的饺子工业化
  • 饺子是不是最终的返回值呢?

锅贴

  • 煮好的饺子饺子可能也是中间状态
  • 是前面流程总的返回值
  • 却是下面流程函数的参数

图片描述

  • 实际上的大型饺子工厂不是这样的@_@

大型饺子工厂

  • 真正的饺子工厂不用人包饺子
  • 都是机器自动包的

图片描述

  • 人来检查一下
    • 别露馅了

图片描述

  • 1小时5万个饺子
    • 效率简直太高了
  • 有很多问题需要注意
    • 食材安全与保鲜
    • 机器运行、维护、清洗时间
    • 饺子的冷藏等等
  • 饺子还是家里包的好吃

包饺子

  • 实际上家里包饺子一般都是一专多能

图片描述

  • 什么职业都能干
  • 而且各职业之间是可以传递消息的

传递消息

  • 早年间职业之间是有交流的
    • 馅儿是咸了还是淡了
    • 面是软了还是硬了

图片描述

  • 甚至可以对于流程进行创新

自创饺子

  • 而且非程式化的手工艺流程往往可以有更多创意
    • 有更多乐趣
    • 虽然失去了效率

图片描述

  • 不可否认工业化的大生产效率高很多
  • 工业的千篇一律确实保证了质量和标准
  • 不过我们应该在劳动中创造快乐和作品
  • 大过年的不是追求效率的时候
  • 对比一下我们的画松树流程

画松树流程

def draw_pine(n=5):
    draw_pine_head(n)
    draw_pine_body(n)

def draw_pine_head(n):
    draw_pine_triangle(n)
    draw_pine_triangle(n)

def draw_pine_triangle(n):
    for i in range(n):
        for j in range(n+1-i):
            print(" ",end="",sep="")
        for k in range(2*i+1):
            print("*",end="",sep="")
        print()


def draw_pine_body(n):
    for i in range(n):
        for j in range(n):
            print(" ",end="",sep="")
        for k in range(3):
            print("*",end="",sep="")
        print()
    for i in range(n+1):
        for j in range(n+1-i):
            print(" ",end="",sep=",")

if __name__ =='__main__':
    draw_pine(5)
  • 确实是层层调用

总结

  • 我们这次通过包饺子理解了
    • 层层嵌套的工业化思路
    • 形式参数与实际参数
    • 以及对于工业化的反思

图片描述

  • 如果想要在原来画松树的基础上
    • 给松树树冠上颜色
    • 应该怎么做呢?🤔
  • 我们下次再说👋