函数本质就是功能代码的集合
就是将完成某一功能的代码放在一起,取一个名字,等其他人【包括我】
要实现这个功能时,我们就可以直接调用这个函数,而不用再次实现
本地变量|局部变量(local variable)和全局变量(global varable):
之前我们写的块级作用域的变量,本质也类似局部变量
本地变量|局部变量(local variable):
定义在函数内部的变量
局部变量只能在函数内部有效!!,外界是无法访问到的
形参也是局部变量!!!
注意:在python中,函数内部可以正常访问全局变量,但是不允许修改全局变量!!!!!
why?基于安全考虑,python禁止函数内部修改全局变量!!!
如果我们有需求呢?需要在函数内部修改全局变量呢?怎么办?
如果一定要修改全局变量,可以提前声明
在函数内部,使用global关键字进行声明
global 全局变量 [,全局变量……]
函数调用的本质
函数定义及调用的内存分析
函数在执行时,首先会被加载到执行栈中(push),等函数执行完成后,会立刻
弹出栈,保证执行栈中没有内存的消耗和内存的浪费
引用传递和值传递:
值传递:在函数调用的时候,传递是值,函数内部的修改,不会影响外界的值,也就是实参
引用传递:函数调用时,传递是内存地址(C语言指针),因此函数内部得到函数同一个对象
函数的参数:
def fn_ame([args......]):
pass
默认值参数:
对于函数中一些参数,如果调用时,参数大多数情况是一个固定值的时候,我们可以设置这个固定值方便了调用
注意:函数中,普通参数(位置参数),-定要在默认值参数之前!!
可变参数:
表示一批参数,可以使用*变量名称来表示,简化多个参数的传递
*args
函数会自动将这些参数包装为一个元组对象
关键字参数【命名参数】:
将参数以键值对的形式传递过来,会被函数自动包装成字典对象
注意:如果函数将来有可能需要扩展功能,建议添加可变参数和关键字参数 可以配合装饰器实现函数功能的扩展
python3.8之后,提供过了类型声明功能
可以不使用,但是一定要认识
建议使用
类型声明功能如 -->turple
函数本质是对象,所以可以当做参数,传递到函数中
在python,只要是对象就可以作为函数的参数!!!
python中,函数也是对象
这也是弱数据类型编程语言的特点和特征
匿名函数:
没有名称的函数!!!
因为python是通过缩进来表示函数体的,所以早期python是没有匿名函数的
lambda表达式:
本质就是简化函数的一种写法,在python中,如果函数题较少,我们完成使用一行代码定义这个函数
lambda [参数]:函数