在Python中,不可变的数据类型有三种,分别是整型、字符串和元组
函数的概念
函数的基本使用
函数的参数
单个参数
多个参数
方式一
方式二
不定长参数
方式一
方式二
拆包
缺省参数
参数注意
在Python中,只有引用传递(地址传递),没有值传递
如果数据类型是可变类型,则可以改变原件
如果数据类型是不可变类型,则不可以改变原件
函数的返回值
函数的使用描述
偏函数
高阶函数
函数本身,也可以作为数据,传递给另外一个变量
高阶函数使用场景
返回函数
一个函数内部,返回的数据是另外一个函数;把这样的操作称为返回函数
匿名函数
lambda函数,指没有名字的函数
lambda 参数1,参数2... :表达式
闭包
在函数嵌套的前提下,内层函数引用了外层函数的变量(包括参数),外层函数又把内层函数当作返回值进行返回,这个内层函数+所引用的外层变量,称为“闭包”
案例:根据配置信息,生成不同的分割线函数
注意事项
1.闭包中,如果要修改引用的外层变量,需要使用nonlocal变量声明,否则当作是闭包内,新定义的变量
2. 当函数被调用的时候,才会真正确定对应的值到底是什么,之前都是以普通的变量标识名称而存在
装饰器
在函数名以及函数体不改变的前提下,给一个函数附加一些额外代码
在写代码时应将功能函数部分和业务逻辑代码分开
只要写了@符号,装饰器的执行时间是立即执行
语法糖写法
装饰器叠加
对有参函数进行装饰
有一个参数
有两个参数
对有返回值的函数进行装饰
无论什么场景,保证函数返回值一致
带有参数的装饰器
通过@装饰器(参数)的方式调用这个函数并传递参数;并把返回值再次当作装饰器进行使用
先计算@后面的内容,把这个内容当作是装饰器
生成器
是一个特殊的迭代器(迭代器的抽象层级更高)
所以拥有迭代器的特性:惰性计算数据,节省内存;能够记录状态,并通过next()函数,访问下一个状态;具备可迭代特性
但是,如果打造一个自己的迭代器,比较复杂,需要实现很多方法,所以就有一个更加优雅的方式“生成器”
创建方式
生成器表达式:把列表推导式的[ ]修改成( )
生成器函数:函数中包含yield语句,这个函数的执行结果就是“生成器”
send()方法
send方法有一个参数,指定的是上一次被挂起的yield语句的返回值
相比于.__next__(),可以额外的给yield语句传值
注意第一次调用,t.send(None)
关闭生成器
g.close()
后续如果继续调用,会抛出StopIteration异常提示
注意
如果碰到return,会直接终止,抛出StopIteration异常提示
生成器只会遍历一次
递归函数
体现
函数A内部,继续调用函数A
传递:从后往前问就是传递的过程
回归:从前往后传递结果的过程称为回归
递归函数一定是有传递有回归
函数作用域
基本概念
Python中没有块级作用域
基于命名空间的常见变量类型
查看局部变量
查看全局变量