局部变量

  • 局部变量,就是在函数内部定义的变量
  • 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
  • 因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量(打个比方,把你、我是当做成函数,把局部变量理解为每个人手里的手机,你可有个iPhone8,我当然也可以有个iPhone8了, 互不相关)
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
  • 当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了


全局变量

如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量
打个比方:有2个兄弟 各自都有手机,各自有自己的小秘密在手机里,不让另外一方使用(可以理解为局部变量);但是家里的电话是2个兄弟都可以随便使用的(可以理解为全局变量)
image.png

函数的返回值

image.png

  1. # encoding: utf-8
  2. def test(a,b):
  3. x = a // b
  4. y = a % b
  5. # 一般情况下, 一个函数最多只会执行一个return 语句
  6. # 特殊情况下(finally语句)下,一个函数可能会执行多个return语句
  7. # return 语句表示一个函数的结束
  8. return x,y # 返回的本质就是一个元组
  9. result = test(13,5)
  10. print('商是{},余数是{}'.format(result[0],result[1]))
  11. shang , yu = test(8,3)
  12. print('商是{},余数是{}'.format(shang,yu))

一个函数中可以有多个return语句,但是只要有一个return语句被执行到,那么这个函数就会结束了,因此后面的return没有什么用处

return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据。
如果return后面有多个数据,那么默认是元组。

对返回的数据直接拆包

  1. def get_my_info():
  2. high = 178
  3. weight = 100
  4. age = 18
  5. return high, weight, age # 函数返回三个数据,会自动打包为元组
  6. # result = get_my_info() # result 接收到一个元组
  7. # print(result)
  8. my_high, my_weight, my_age = get_my_info() # 直接把元组拆分为三个变量来使用,更加方便
  9. print(my_high)
  10. print(my_weight)
  11. print(my_age)
  • 拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
  • 除了对元组拆包之外,还可以对列表、字典等拆包

可变类型和不可变类型

  • 可变类型(修改数据,内存地址不会发生变化)有: 列表、字典、集合
  • 不可变类型(修改数据,内存地址必定发生变化)有: 数字、字符串、元组

image.png

image.png
image.png
image.png