python中的函数(全)
概述:将一段经常使用的函数封装起来,减少重复代码,一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能于python中,定义函数时要用到def语法结构:def 函数名称(参数):函数体return 返回值函数在有返回值的情况下会根据实际情况进行返回,如果函数没有返回值则返回None根据有无参数分类:根据有无返回值分类:根据定义者分类:全局变量:定义在py文件中的变量特点:在代码运行过程中始
函数的定义
概述:将一段经常使用的函数封装起来,减少重复代码,一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能
于python中,定义函数时要用到def
语法结构:
def 函数名称(参数):
函数体
return 返回值
函数在有返回值的情况下会根据实际情况进行返回,如果函数没有返回值则返回None
- 在定义函数时,如果暂时还没想法可以用pass进行跳过
- 函数可以返回多个值,即return后可以跟多个参数,但函数本身返回只有一个值,其值为元组
- 函数名称是指向函数对象的引用,当把一个函数名称赋值给一个变量就是给它起了一个别名
函数的分类
根据有无参数分类:
- 有参函数
- 无参函数
根据有无返回值分类:
- 有返回值函数
- 无返回值函数
根据定义者分类:
- 系统自定义函数
- 第三方函数
全局变量和局部变量
全局变量:定义在py文件中的变量
特点:在代码运行过程中始终有效
局部变量:定义在函数中的变量
特点:函数外部无法访问函数内的变量即局部变量
函数内部可以访问全局变量,但不能修改全局变量,如果需要在函数内部修改全局变量,则要用到global关键字,一般不建议使用
值传递与引用传递
值传递:值传递时,当函数的形参发生变化不会影响实参的值
引用传递:引用传递时,当函数的形参发生变化会影响实参的值
其中的a,b都代表的是内存地址,代表的是函数本身,而a(),b()代表的是函数的返回值,当没有返回值时,则返回None
值传递适合于不可变类型的实参(字符串、数字、元组),引用传递适合于可变类型的实参(列表、字典)
在弱数据语言中,函数是可以作为参数传递到另一个函数中
函数的递归
在python中函数可以调用其他函数,而函数递归就是函数自己本身调用自己
函数递归必须要有终止条件,如果没有终止条件,函数就会陷入死循环,python中会报错
栈溢出问题:递归调用层次过多,递归函数在运行时会进行压栈操作,当压栈次数过多时,会导致堆栈溢出
解决方法:尾递归优化
尾递归:函数自己调节自己,要有终止条件,return语句中不能包含表达式
递归优缺点:
- 逻辑简单清晰
- 过深的递归会造成栈溢出问题
python解释器并没有对尾递归优化,所以在python中任何的递归都会造成栈溢出问题
匿名函数
概念:没有名称的函数,使用lambda关键字来定义
语法结构:lambda 参数 :函数体
由于lambda返回的是函数对象,因此我们需要用一个变量去接收
匿名函数可以无参数、一个参数或多个参数,可以作为一个参数进行传递,也可以作函数的返回值
偏函数
在python中,调用函数时我们想要其中的一个值设置为一个固定值,此时我们就需要用到偏函数
python中的functools模块为我们提供了许多功能,其中一个便是partial
当我们只引入偏函数时需输入:
from functools into partial
其中int()将字符型转换为整型,默认为十进制
其中int()提供了baes参数,可以调节转换进制
当我们需要大量转换2进制时,每次传入int(x,base=2)过于麻烦,此时我们会定义一个函数,传入base默认值=2
from functools import partial
def int2(x,base = 2):
return int(x,base)
print(int2("1000"))
8
全局函数
注意:round() 四舍五入,但是要注意在python中奇数上是标准的四舍五入,在偶数上是以5为分界线
更多推荐
所有评论(0)