一、函数
1、函数的注释
1)如何写注释
"""
函数的注释 -- 说明这个函数的作用,以及参数的诠释"""三个引号之间可以注释例如:'''这是一段注释'''"""这是一段注释"""
2)如何获取注释信息
2、函数的嵌套
函数的嵌套是指在编程中一个函数内部定义或调用另一个函数。这种结构在处理复杂任务时非常有用,因为它允许将大的问题分解成小的、可管理的部分,并保持代码的模块化和可读性。以下是两种常见的函数嵌套形式:1. **函数内部定义另一个函数**:在一个函数内部定义另一个函数是合法的,但内部函数通常只能在外部函数的作用域内被访问。2. **函数内部调用另一个函数**:一个函数可以在其内部调用另一个已经定义的函数。嵌套函数的一些注意事项:- **作用域**:内部函数可以访问外部函数的作用域内的变量,但外部函数不能访问内部函数的局部变量(除非内部函数将其返回或作为参数传递)。- **闭包**:当内部函数访问外部函数的变量时,这种结构称为闭包。闭包在处理异步操作、事件处理、数据封装等方面非常有用。- **递归**:一个函数调用自身也是一种特殊的嵌套,称为递归。递归在处理递归数据结构(如树、图形)或执行分而治之的算法时非常有用。使用嵌套函数可以增加代码的可读性和维护性,但也可能导致性能开销,因为每次调用外部函数时,内部函数都需要重新创建。因此,在设计函数时,需要权衡其带来的好处和潜在的缺点。
1)函数内部调用另一个函数
两个同等级别的函数的调用
2)函数内部定义另一个函数
在函数内部定义函数
内部不调用内部的函数,内部函数就不能执行
在外面调用内部函数,内部函数也不能执行,在外面调用是没有定义的
3、作用域
作用域:我们定义的变量和函数在哪个范围内可以使用{比如:中国的警察只能在中国维护治安,不能在国际上维护治安}变量的作用域:
1.全局变量:在当前文件内定义的变量,可以在文件内的任何地方使用
2.局部变量:在有效的范围内可以使用,一旦出了范围就无法使用注:局部变量可以升级为全局变量 -- 常见的场景:上一个接口的信息如何给下一个接口使用
1)局部变量
局部变量,在作用域之外被调用,会报未被定义
{比如:中国的警察只能在中国维护治安,不能在国际上维护治安,有警察局出警(函数执行),局里的警察(局部变量)才能是上班状态的,才是有意义的}
局部变量,在作用域之内被调用,正常
2)全局变量
要顶着最左边代码行的变量
自己犯的一个错误
使用占位符的时候{}里面没有引用参数,导致报错
3)把局部变量升级为全局变量
3.1)通过global关键字,将局部变量升级为全局变量。
但是这个变量是定义在函数里面的,即使升级为全局变量,也得先调用这个函数才能执行。因为只有在这个函数里,这个变量才存在,执行了这个函数,这个变量才能存在。不执行这个函数,这个变量就不存在。
3.1.1)局部变量所在的那部分代码不执行,这个变量就不存在
在非函数里面也是一样的
不执行,不存在
不执行这个函数,就好报错未被定义这个局部变量
这样先用参数,再调用函数也不行
后用global声明也不行
4)循环里面,会对全局变量进行重定义
如果循环不执行,就不会重定义
4、数学函数
数学函数,了解会用就行
abs() 绝对值
divmod() 返回商和余数
round() 四舍五入[注:银行家算法的问题]
pow() 次方
sum() 求和
min() 最小值
max() 最大值
1)绝对值函数--adb()
2)返回商和余数--divmod()
3)四舍五入--round()
四舍五入[注:银行家算法的问题],规则:奇数-正常的结果;偶数-直接舍弃后面[0~0.5这个范围]的小数
偶数只有小数在0~0.5这个范围的小数会被舍弃,大于0.5的不会被舍弃
4)次方--pow()
5)sum() 求和
只能对数字类型求和
不能对字符串类型进行加和
6)min()最小值
7)max()最大值
5、匿名函数
了解能看懂即可,用的不多
匿名函数:没有名字的函数
lambda 关键字完成
1)派--pi
2)圆的面积
3)普通函数
print(函数名)=打印函数的内存地址
如果是print(函数名)会打印函数内存地址
如果是print(函数)会报错
自己优化一下
4)匿名函数的写法
报错的情况,调用函数时,没传函数必要的位置参数
只调用,不获取返回值是没有结果的
将位置参数,写上
将位置参数及它的值,写上
6、函数的传递(或叫引用)
函数的调用与引用:
小口诀:有小括号,是调用。没有小括号,是引用。引用函数:直接写函数的名称,不加(),就是引用,就是传递函数的本体(所在的内存地址),例如:fun3(fun2)
---------理解成:只要这个人的所在住址调用函数:函数的名称加上(),就是通过函数的本体,然后调用函数,就会去执行函数内部的代码块,,例如:fun3(fun2())
---------理解成:通过这个人的所在住址,叫这个人去做他的工作什么时候需要引用,什么时候需要调用?1.引用是获取封装好的函数的内存地址
2.当我写用例的时候,如果需要用到这个函数里面的操作,就可以通过这个地址,去执行这个函数
3.主动权都在我手上
1)函数的调用
2)函数的内存地址--本体
函数本体+() =调用这个函数
3)函数的引用--传递函数的本体
3.1) 调用函数B时,直接调用传递的函数A
只有调用函数,函数才会执行。只引用函数,而没有调用该函数,引用的函数是不执行的。
3.2) 调用函数B时,通过参数的形式,调用传递的函数A
因为执行fun(aa=fun2)时,是将fun2的本体传递给aa, 本体+()就等于调用这个函数,所以aa()就相当于fun2()。所以相当于,函数2 是函数3的内部代码块的一部分(2被3引用了--aa())