Skip to content

Latest commit

 

History

History
182 lines (121 loc) · 4.94 KB

188-529697-参数赋值.sy.md

File metadata and controls

182 lines (121 loc) · 4.94 KB
show version enable_checker
step
1.0
true

函数

回忆

  • 上次说到对于程序员来说
    • 函数就是封装好的一个套路
    • 这封装好的套路也可以接收参数
    • 就像洗衣机、电饭煲一样可以设定一些模式
  • 传递的参数有两部分两种
    • 函数定义的时候,给出的是一个形式上的样子,是形参(parameter)
    • 函数调用的时候,给出的是具体的实际参数的值,是实参(argument)

图片描述

  • 调用的时候完成一个赋值的过程
    • 把实参的值赋给形参
  • 形参本质上是空的

  • 只有空才能有活动的空间

图片描述

  • 如果都是死疙瘩
  • 就跑不起来了

图片描述

  • 我们来具体定义个函数
    • 定义一个测量体温的函数

测量体温

  • 根据体温得出结论
    • 不是直接得出结论

图片描述

  • 因为函数不是固定输出的

定义函数

图片描述

  • 我们定义了测试体温的函数
  • 然后如何调用呢?

调用函数

  • test(39)

图片描述

  • test(37)

图片描述

  • 这个参数是37他到底传递的什么呢?

图片描述

观察过程

图片描述

图片描述

  • 函数调用的时候
  • 发生了参数赋值
  • 把实参赋给形参
    • temperture = 37
    • 直接赋值!!!
  • 赋值之后
    • 用37这个值新生成了一个int类的对象
    • 然后用temperature对这个对象进行引用
  • 等等!!
    • int型的变量是一个对象么?

int型

  • int型变量确实是一个对象
  • 变量名是这个对象的引用

图片描述

  • 如果给的实参是一个变量
  • 而不是一个数字
  • 又会如何呢?

传递过程

  • 为了清晰地看到这个传递过程
  • 我们在函数当中添加了一些输出

图片描述

  • 执行结果为

图片描述

理解

  • 在调用test函数的时候
    • test函数的形式参数temperature被赋了一个具体的实际参数(arguement)
    • 这个实参就是my_temp
  • 这个调用过程中
    • 有一个赋值过程
    • 就像下面这个赋值过程一样

图片描述

  • 两个变量名my_temp、temperature指向的是同一个内存中的对象
  • 虽然这是一个整型变量
  • 但是python将他封装成了int型的变量
  • 如果我在函数体里面
  • 把这个变量的值给改了

图片描述

函数

  • 函数执行前先赋值

图片描述

  • 运行结果为

图片描述

  • 这如何理解?

理解

图片描述

  • 第6行:my_temp指向新分配的int型对象,地址9790112
  • 第7行:在主函数中输出my_temp的地址
  • 第8行:函数调用,参数传递进函数
    • temperature = my_temp
    • 两个变量
      • 都是int型
      • 都指向址9790112
  • 第2行:进入函数,输出temperature的id
  • 第3行:temperature指向另一个新分配的int型对象
    • 地址为9790144
  • 第9行:完成函数调用
    • my_temp对象依然指向9790112这个地址
  • 第6行:my_temp指向新分配的int型变量,地址9790112
  • 第7行:在主函数中输出my_temp的地址

图片描述

  • 如果温度是一个浮点型的变量呢?

浮点型

图片描述

  • 修改后结果

图片描述

  • 在函数内部确实被替换为了一个整型数字对象的引用(来自小数字池)
  • 模式没有变
  • 先总结去吧

总结

  • 这次我们分析了函数中参数赋值的过程
    • 在调用参数的时候
    • 完成了一个赋值的过程
    • 是把实参(arguement)赋给形参(parameter)的过程
    • 赋值还是比较麻烦的
  • 如果参数是一个容器又会如何呢?
  • 我们下次再说👋