✳:
函数是由一组代码组成,完成某个特定的功能。
1.创建和使用
①:创建函数
语法:
def 函数名(参数):
代码块(函数的实现/函数体)
②:调用函数
语法:
函数名(参数)
2.函数的运行机制
1. 从函数调用开始执行
2. 通过函数名字找到函数定义的位置(创建函数的位置)
3. 执行函数体
4. 执行完毕之后,返回到函数的调用处
3.函数的使用
例:用函数对古诗《登鹳雀楼》进行逐行打印,并对每一行下面增加由多个相同符号组成的分割线。
def fun2(a, n):
print(a * n)
# 打印古诗
print("白日依山尽")
fun2("+", 5)
print("黄河入海流")
fun2("-", 10)
print("欲穷千里目")
fun2("*", 15)
print("更上一层楼")
fun2("/", 20)
执行结果:
白日依山尽
+++++
黄河入海流
----------
欲穷千里目
***************
更上一层楼
4.函数的特点
1. 避免了代码的冗余
2. 提高了代码的可维护性
3. 提高了代码的可重用性
4. 提高了代码的灵活性
5.函数的参数
1. 形式参数:形参
在定义函数的时候传递的参数
2. 实际参数:实参
在调用函数时传递的参数
3. 无参
没有任何参数
位置参数: 实参的位置和形参一一对应,不能多也不能少。
关键字参数:
用形参的名字作为关键字来指定具体传递的值,则在函数调用时,前后顺序将不受影响。
位置参数和关键字参数混用:
当位置参数和关键字参数混用时,位置参数在前
默认参数:
给了默认值的参数--形参
如果传递了新的值,那么默认值就被覆盖了
可变成参数: def 函数名(*a) 本质上封装成了元组
可变成参数:
def 函数名(**kwargs)
将参数封装成了字典
可变成参数和位置参数混用的时候:可变参数优先
6.函数的文档
函数名.__doc__
除此之外,还可以用 help(函数名) 的方式进行函数文档的查看,例如:
7.函数的返回值
关键字:return
返回值谁调用就返回给谁
1. 任何函数都有返回值
2. 如果不写return ,也会默认加一个return None
3. 如果写return ,不写返回值 也会默认加一个None
4. 可以返回任何数据类型
5. return后面的代码不在执行,代表着函数的结束
8.函数的变量的作用域
①:局部变量
局部变量定义在函数内部的变量,先赋值在使用,从定义开始到包含他的代码结束,在外部无法访问。
②:全局变量
定义在源文件的开头,作用范围:整个文件,局部变量和全局变量发生命名冲突时,以局部变量优先。
nonlocal 声明的是局部变量
9.内嵌函数
定义在函数内部的函数叫做内嵌函数(或者叫内部函数),内部函数的作用范围:从定义开始到包含给他的代码块结束在内部函数中不能进行a+=1,a=a+1这样的操作,解决方案是nonlocal 和global。
例如:
10.闭包
闭包是函数式编程的重要语法结构。
编程范式:一种编程范式,对代码进行提炼和抽象概括,使得重用性更高
如果内部函数调用了外部函数的局部变量,并外部函数返回内部函数的函数对象(函数名)。
例如:
这就形成了闭包,闭包的作用是可以传递更少的形参,可以传递更多的实参—更加安全,间接性的访问内部函数。
例如:
闭包是有条件:
1. 必须是一个内嵌函数
2. 外部函数必须返回内部函数的函数对象
3. 内部函数必须使用外部函数的局部变量
11. lambda表达式
1. 匿名函数
没有名字的函数
2. 使用时机:
只使用一次的时候
3. 语法:
关键字: lambda
lambda 参数1,参数2:返回值
4. lambda的书写形式更加的简洁,优雅
l = lambda x:x
print(l(100))
5. lambda的优先级最低