函数是可重复使用的,组织好的,用于实现单一或者关联功能的代码块
1.函数的定义:
函数的定义方式为:
def 函数名(参数):
函数体
函数名的命名规则有:
- 函数名由字母数字下划线组成
- 不能以数字开头
- 禁止使用python关键字
- 不能使用中文,拼音
- 区分大小写
- 要有意义
- 使用驼峰命名法或者下划线命名法
2.函数的调用
函数的调用方法为:函数名()
严格来说是函数的内存地址()
函数名的本质:
- 函数名可以赋值
- 函数名可以作为容器类型中的一项
- 函数名可以作为函数的参数
- 函数名可以作为函数的返回值
函数名可以作为一个变量来使用,函数是第一类对象
3.函数的参数
函数的参数分为形参和实参
3.1形式参数(形参)
形式参数需要经过传参过程才有实际的值
形式参数分为位置参数,动态位置参数,默认参数,动态关键字参数
位置参数是按参数的位置来进行传参
动态位置参数也称不定长参数,一般表示为*args,动态位置参数会接收所有多余的位置参数,数据类型为元组
默认参数为有默认值的参数,如果不传递实参,也不会报错,如果传递实参,则使用实参的值
动态关键字参数一般表示为**kwargs,动态关键字参数会接收所有多余的关键字参数,数据类型为字典
3.2实际参数(实参)
实际参数是实际的值,实际的一块内存地址
实参分为位置参数与关键字参数
关键字参数通过形参的参数名来进行传参
3.3传参
将实际参数的值传递给形式参数的过程叫做传参
传参过程中,可能会使用到*与**
*与**的作用为解包,*用于列表等,**用于字典
4.函数的返回值
函数通过return关键字来进行返回值操作
当函数运行到return时,就会进行返回值操作并结束函数
如果函数中无return或者return无值,则默认返回值为None
5.命名空间与作用域
5.1命名空间
命名空间是存放名字与值关系的空间
命名空间包括局部命名空间,全局命名空间和内置命名空间
- 在函数中命名的变量及函数存储在局部命名空间中
- 直接在文件中声明的变量及函数存储在全局命名空间中
- python解释器提供的关键字存储在内置命名空间中
加载顺序为:内置>全局>局部
取值顺序为:局部>全局>内置
先进后出,后进先出
5.2作用域
全局作用域包括内置命名空间和全局命名空间
局部作用域包括局部命名空间
6.函数的嵌套
6.1闭包
内部函数使用了外部函数的变量,内部函数就是一个闭包
主要用途:缓存,装饰器
6.2取值顺序
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内建作用域
按照L>E>G>B的顺序取值
7.匿名函数
使用 lambda 来创建匿名函数。
格式:lambda x,y:x + y
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。