python基础自学 第七天

变量进阶

0.1变量的引用

  • 变量和数据都是保存在内存中的
  • 在python中函数的参数传递以及返回值都是靠引用传递的

1.1引用的概念

  • 变量和数据是分开储存的
  • 数据保存在内存中的一个位置
  • 变量中保存着数据在内存中的地址
  • 变量中记录数据的地址,就叫做引用
  • 使用 id() 函数可以查看变量中保存书记所在的内存地址

注意:
如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用

1.2函数的参数和返回值的传递

调用函数时,本质上传递的是实参保存数据的引用(实参的内存地址),而不是实参保存的数据
python基础自学 第七天

02.可变和不可变类型

#不可变类型,内存中数据不允许被修改:

数字类型:int, bool , float, complex,long(2.x)
字符串 str
元祖 tuple

#可变类型,内存中的数据可以被修改:

列表
字典

注意:
可变类型通过方法改变数据,内存地址不会改变
如果使用赋值语句改变,内存地址会改变
字典的key只能使用不可变类型的数据

哈希(hash)

接收一个不可变类型的数据作为参数
返回结果是一个整数
哈希就是一种算法,其作用就是提取数据的特征码(独一无二的)
设置字典的键值对时,会首先对 key 进行 hash ,key只能是不可变类型
03.局部变量和全局变量
局部变量:在函数内部定义的变量,只能在函数内使用.
全局变量: 在函数外部定义的变量,所有函数内部都可以使用这个变量

3.1局部变量
局部变量是在函数内部定的变量,只能在函数内部使用
函数执行结束后,函数内部的局部变量,会被系统回收
不同的函数,可以定义相同的名字的局部变量,相互并不会影响

局部变量的生命周期
生命周期就是变量从被创建到被系统回收的过程
局部变量在函数执行时才被创建
函数执行结束后局部变量被系统回收
局部变量在生命周期内,可以用来存储函数内部历史使用到的数据

3.2全区变量
在函数外部定义的变量,所以函数内部都可以使用这个变量
不允许直接修改全局变量的引用,使用赋值语句修改全局变量的值
全局变量定义在其他函数的上方

在函数内部修改全局变量的值
改变全局变量需要使用global声明一下变量即可

补:
代码结构示意图
shebang (用哪个解释器)
import模块
全局变量
函数定义
执行代码

全局变量的命名建议
全局变量名前面应该增加g_或者gl_的前缀

01函数参数和返回值的作用
如果函数内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部
如果希望函数执行完成后,想外界汇报执行结果们就可以增加返回值

返回值
如果函数返回的类型是元祖,同时希望单独的元祖中的元素\
可以使用多个变量,一次接受函数的返回结果\

;注意:
使用多个变量接收结果时,变量的个数应该和元祖中的元素个保持一致\

02函数参数
在函数的内部,针对参数使用赋值语句,不会修改到外部的实参变量

如果传递的参数类型是可变类型,在函数内部使用方法更改了数据的内容,
同样会影响到外部数据

python基础自学 第七天

补:
运算符— +=
列表变量调用 += 本质上是执行extend()方法,函数内部调用也会影响外部代码

缺省参数
缺省参数,需要使用最常见的值作为默认值
如果一个参数的值不能确定,则不应该这是默认值,具体的数值调用函数时,有外界传递.
图解:
python基础自学 第七天

注:
一个带默认值的参数,一定要放在所以参数的最后面
图解:
python基础自学 第七天
如果有多个缺省参数,需要制定参数名
图解:
python基础自学 第七天

多值参数(了解,看懂网路大咖的代码)
一个函数能够处理的参数个数是不确定的,就可以使用多值参数
两种分类:
参数名前增加一个 * 可以接收元祖
参数名前面增加两个 * 可以接收字典

图解:
python基础自学 第七天