function

      • 函数输入输出的本质
      • 可变类型与不可变类型
      • 局部变量与全局变量
      • 作用域
      • 代码结构
      • 函数的参数/返回值
      • +=
      • 缺省参数
      • 不定长参数(多值参数)
      • 元组和字典的拆包
      • 递归函数

函数输入输出的本质

函数的传参/返回值本质是:传地址值.即变量的引用

可变类型与不可变类型

不可变类型: 不能修改内存中数据的变量(原内容不可修改)
可变类型:可以修改内存中的数据的变量(原内容可修改)
可变类型的数据修改
    修改内存中的数据,不修改引用:通过变使用方法来实现 (通过下标[index]来修改也只是修改内部数据)
    修改引用:变量名  使用赋值符 给一个新的数据.
不可变类型调用方法: 因其内容不能修改,所以是生成一个新的内容
字典的key只能使用不可变类型的数据:
    在字典设置键值对时,会首先对key进行hash来决定如何在内存中保存,可变类型不可以hash,所以key只能是不可变类型


hash:
    相同的内容,hash得到相同的结果
    不同的内容,hash得到不同的结果
可变类型为什么不可以hash: 因为可变类型内存中的内容可以修改,导致内容修改前后的hash结果不一样.

局部变量与全局变量

局部变量:在函数内部定义的变量,只能在函数内部使用(外部,另一个函数都不能使用)
作用: 临时保存  变量需要使用的  数据
生命周期: 函数被调用时创建(诞生),函数执行结束后被系统回收(死亡)
全局变量:在函数外部定义,能被函数内部访问,但是不能被修改
为何不能被修改:限制能力,不能修改变量的应用
查找变量引用的位置: ctrl + 鼠标左键(变量)
全局变量的命名:全局变量名字前应该加:g_  或 gL_

作用域

L_E_G_B:
local  : 本地
enclose :封套(嵌套)
global : 全局
builtin :内置

代码结构

shebang-->import导入-->全局变量-->定义函数-->执行代码

函数的参数/返回值

什么时候需要参数:函数内部处理的数据不确定个数,将外界的数据以参数传入,以免破坏数据
什么时候需要返回值:函数执行完成后,需要向外界汇报执行结果时.
多个返回值:  会默认返回一个元组. 
拆包: 多个变量接收一个元组,进行拆包  应用:a,b = (b,a) -->a,b=b,a   等号右边是一个元组,只是把小括号省略了
不可变和可变的参数:
    赋值语句:只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响的外部变量的引用
    调用方法:不会修改引用; 可变类型会修改内存中的数据,不可变类型则是生成一个新的数据

+=

针对列表变量,+= 本质上是默认调用extend()方法,会改变原列表的内容

缺省参数

定义:定义一个函数时,给某个参数指定一个默认值
什么时候使用缺省:某个值很常用,可以设置为缺省,简化函数调用
定义的位置:在普通参数后面
有多个缺省参数的函数调用: 需要指定参数名(命名参数)

不定长参数(多值参数)

一个函数接收的参数不确定,使用多值参数
分类:
    *: 接收元组   *args
    **:接收字典(带等号的参数)  **kwargs

元组和字典的拆包

函数参数传入字典和元组时,需要使用拆包,简化参数传递
元组变量前:*
字典变量前:**
demo(*gl_nums,**gl_dict)

递归函数

特点:函数内部,自己调用自己
注意点:
    递归出口:传入参数满足一个条件时,函数不在执行
    调用自己
    每次传入的参数要不同!   这样才能抵达递归出口
    考虑每轮要向上一轮返回什么东西

你可能感兴趣的:(python)