Skip to content

Latest commit

 

History

History
277 lines (193 loc) · 7.1 KB

187-529666-形参_parameter_与实参_argument.sy.md

File metadata and controls

277 lines (193 loc) · 7.1 KB
show version enable_checker
step
1.0
true

函数参数

回忆

  • 对于程序员来说
    • 函数就是封装好的一个套路
    • 这封装好的套路也可以接收参数
    • 就像洗衣机、电饭煲一样可以设定一些模式

图片描述

  • 我们试一下
    • 电压力锅的模式

代码

图片描述

  • 这样我们用户自定义的函数就可以加上参数了
  • 调用的时候也要传递给函数参数
  • 就像print("hello")

图片描述

三种模式

def cook(mode):
	print("------烹饪过程开始-------------")
    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!===")
	print("------烹饪过程结束-------------")

cook("nothing")
cook("bone")
cook("rice")

图片描述

图片描述

  • 这是怎么个流程呢?

流程理解

  • 三次调用函数

图片描述

  • 先走了一个错误的使用流程
    • 括号里面给的模式是"nothing"
  • 然后走一个熬汤的流程
    • 括号里面给的模式是"bone"
  • 最后走了一个蒸饭的流程
    • 括号里面给的模式是"rice"
  • 我们这个参数调用的时候
    • 不但要有函数名
    • 而且还要有参数列表
  • 什么是参数列表呢?
    • 我们先看函数定义

形式参数parameter

图片描述

  • 函数cook后面的括号里面有个参数
  • 参数的名字叫做mode
  • mode具体是什么我们在定义的时候还不知道
  • mode只是一个形式上的参数
  • 也叫形参parameter

实际参数argument

  • 函数的形参只是形式上的
  • 具体是用什么模式
  • 根据的事调用的时候
  • 给到函数的实实在在的参数
  • 也叫实参(argument)
  • 形参和实参是不同的

图片描述

  • 我们来调试一下

调试

图片描述

  • 从第一次调用开始
  • 一路n下去
  • 就直接结束了
  • 没有进入到函数里面
  • 如何debug进入到函数里面呢?

查询帮助

图片描述

  • 我们不但可以明确断点放在第几行
  • 还可以明确断点放在函数的入口么?

函数入口

图片描述

  • 再n下去

调试

图片描述

  • 这次n了之后
  • 确实可以跳转到函数里面的断点了
  • 那我可以看看给过来的参数么?

参数

图片描述

  • 确实可以看到mode的值是
    • "nothing"
    • 还有什么更快的方法么?
  • 查询帮助

图片描述

观察实际参数(argument)

图片描述

  • 形参mode

跳转

  • 目前获得了具体的实参值是"nothing"
  • 跳过了第一个分支(2-9)
  • 跳过了第二个分支(9-18)
  • 进入了第三个分支(19-20)

图片描述

  • 这就是第一次函数调用
  • 后两次其实也类似
  • 根据不同的实际参数,决定出:
    • 蒸饭
    • 煲汤
    • 什么也不做
  • 这种参数调用我们以前也经常用

print

图片描述

  • print函数
  • 接受一个字符串参数
  • 这是hello world时候就知道的
  • 类似的参数很常见
  • 就像原料

陶土

  • 比如要做一个瓶瓶罐罐

图片描述

  • 有个流程套路之外
  • 你得有原料吧?
  • 这里要的原料就是黏土

图片描述

  • 不管什么样的黏土
  • 反正你得给我黏土

参数不同结果不同

  • 白色的黏土
    • 返回的是一个白陶罐
  • 黄色的黏土
    • 返回的是一个红陶罐
  • 但是实际给我的参数(原料)必须得是黏土

图片描述

  • 就如同电饭锅需要知道自己的模式
    • 蒸饭
    • 熬粥
    • 蹄髈
  • 如果你告诉电饭锅你的模式是牛仔服...
  • 这个放不进去
  • 也没法闷煮

参数

  • 给了正确参数之后
  • 流程都是那么一个流程

图片描述

  • 白黏土出白管子
  • 黄黏土出黄罐子
  • 或者说沏茶

茶叶

  • 沏的是红茶 砌出来 喝到的就是红茶
  • 里面放的是绿茶 喝到的就是绿茶
  • 里面放的是黑茶 喝到的就是黑茶

图片描述

  • 里面 放的是咖啡 喝到的就是咖啡
  • 流程套路一样
  • 咖啡可以冲一泡
  • 作为参数可以接受
  • 至少比牛仔服好多了
  • 其实我们用过很多函数

文件

  • f = open("oeasy.txt")

  • open函数就接受一个函数名

  • 并且返回一个文件类型的对象

图片描述

  • 可以s(tep into) 到函数open里面
  • 看看他的实现细节
  • 我们去总结一下

总结

  • 对于程序员来说
    • 函数就是封装好的一个套路
    • 这封装好的套路也可以接收参数
    • 就像洗衣机、电饭煲一样可以设定一些模式
  • 传递的参数有两部分两种
    • 函数定义的时候,给出的是一个形式上的样子,是形参(parameter)
    • 函数调用的时候,给出的是具体的实际参数的值,是实参(argument)
    • 调用的时候完成一个赋值的过程
      • 把实参的值赋给形参
  • 这次传递了字符串类的模式作为实参
  • 还可以传递具体的整型数字数值作为实参么?🤔
  • 我们下次再说!👋

图片描述