python学习笔记(三)函数
一、定义函数
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
在Python中,定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
我们可以自定义一个最简单的函数:
二、使用函数的好处
1、提高代码的复用性
2、让代码更简洁、简化代码
3、代码可扩展
三、函数的参数
1.位置参数:
位置参数,是必填的,调用函数时不传会报错。
我们写一个简单的函数,实现计算乘法的功能。下图中的a和b就是位置参数。
a,b叫做形参,也就是形式参数。调用函数calc时,传的7和8叫实参,也就是实际参数
我们可以看到传参数时,7传给了a,8传给了b。也就是说传参顺序不能错。那么,当参数很多的时候,很难准确的记住各参数位置,就很容易出现错误,可以用 形参名=实参 的方式传参。
比如说上面的那个calc函数也可以使用calc(b=1,a=2)这样来调用,这种调用方式叫做关键字传参。
例,操作数据库的函数。传参没有按顺序,采用了port = '3306'这种方式,很适合多参数的函数。
2.默认参数:
默认参数就是在定义形参的时候,给函数参数默认赋一个值,这样在调用函数的时候就算没有传值也不会报错。
所以,默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义。
例如:写一个函数,实现文件的读写功能。
这里介绍一下return,return有两个作用:(1)调用完函数后,将结果返回;(2)函数里面遇到return就立即结束。
另外,如果只写一个return,后面什么也不加,就返回None;如果不写return,也默认返回None。
小练习:写一个判断密码的函数
3.不固定参数:
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。不固定参数有两种,一种是可变参数,一种是关键字参数。
可变参数:
可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。可变参数也是非必传的。
输出结果如下:
4.关键字参数:
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:
输出结果如下:
使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的。
四、函数的返回值
-
python 函数使用 return 语句返回 "返回值",可以将其赋给其它变量作其它的用处
-
所有函数都有返回值,如果没有 return 语句,会隐式地调用 return None 作为返回值
- 如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了
- 函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元组。
-
1 def cacl(x,y): 2 c=x*y 3 return c,x,y 4 res=cacl(5,6) 5 print(res) 6 7 >>>(30,5,6)
五、全局变量和局部变量
全局变量与局部变量两者的本质区别就是在于作用域。用通俗的话来理解的话,全局变量是在整个py文件中声明,全局范围内都可以访问;局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了。
在程序最前面定义的都是全局变量,全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list、字典和集合的话,则不需要加global关键字,直接就可以修改。
运行结果如下:
六、递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。建议少用递归,因为递归效率不高,而且最多递归999次。由下面的函数能够很直观的看出递归次数上限
递归调用的特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
七、内置函数
内置函数是指python自带的一些函数,直接拿过来能用的
小练习:写一个判断是否为小数的函数。
分析:(1)判断小数点个数;(2)如果是正小数,小数点左边和右边都是纯数字;(3)负小数,左边以‘-’开头,其他部分是数字,右边是数字。