导图社区 python第六章--函数
这是一篇关于python第六章--函数的思维导图,主要内容有函数的定义、函数的定义和调用、函数参数的传递、函数的返回值、变量的作用域等。
编辑于2022-12-25 12:30:29 四川省函数
函数的定义
定义:函数是组织好的,实现单一功能或相关联功能的代码段,例如:input(),print()
函数的定义和调用
定义函数
def定义函数
def 函数名(参数列表): 函数体 [return语句](返回函数处理结果给调用方)
调用函数
函数在定义完成后不会立刻执行,直到程序被调用时才执行
函数名([参数列表])
函数参数的传递
位置参数的传递 函数在被调用时会将实参按照相应的位置依次传递给形参
通常将定义函数时设置的参数称为形式参数,将调用时传入的参数称为实际参数
关键字参数的传递
若函数的参数数量较多,开发者很难记住每个参数的作用,此时可以使用关键字参数的方式传入参数
def connect(ip,port): print(f'设备{ip}:{port}连接!') connect(ip='127.0.0.1',port=8080)
默认参数的传递 函数在定义时可以指定形参的默认值,故在被调用时可以选择是否给带有默认值的形参传值,若没有给带有默认值的形参传值,则直接使用该形参的默认值
函数的返回值
定义:函数中的return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行
def move(x,y,step): nx=x+step ny=y-step return nx,ny result = move(100,100,60) print(result) 结果:(160,40)
变量的作用域
全局变量
全局变量在整个程序的范围内起作用,它不会受函数范围的影响
number=10 def test_one(): print(number) test_one() print(number) 结果:10 10
局部变量
局部变量是在函数内部定义的变量,它只能在函数内部被使用,函数结束后局部变量会被释放,此时无法进行访问
def test_one(): number=10 print(number) test_one() print(number) 结果:10 报错
global关键字
使用global关键字可以将局部变量声明为全局变量 使用方法:global 变量
number=10 def test_one(): global number#使用global声明变量number为全局变量 number += 1 print(number) test_one() print(number) 结果:11 11
nonlocal关键字
使用nonlocal关键字可以在局部变量中修改嵌套作用域中声明的变量 使用方法:nonlocal 变量
def test(): number=10 def test_in(): nonlocal number number=20 test_in() print(number) test() 结果:20
特殊形式的函数
递归函数
定义:函数在定义时可以直接或间接的调用其他函数,若函数内部调用了自身,则这个函数被称为递归函数,递归函数需要满足两个条件:一个是递归公式,另一个是边界条件
递归函数的定义格式: def 函数名(参数列表): if 边界条件: return 结果 else: return 递归公式
编写代码实现n!的求解: def func(num): if num==1: return 1 else: return num*func(num-1) num=int(input('请输入一个整数')) result=func(num) print(f'{num} !=%d' % result) 结果:请输入一个整数 5 5!=120
匿名函数
定义:匿名函数是一类无须定义标识符的函数,它与普通函数一样可以在程序的任何位置使用
匿名函数语法格式: lamba <形参列表>:<表达式>
匿名函数与普通函数的区别: 1:普通函数在定义时有名称,匿名函数没有 2:普通函数的函数体包含多条语句,匿名函数只能是一个表达式 3:普通函数可实现比较复杂的功能,匿名函数实现的功能较简单 4:普通函数能被其他程序使用,匿名函数不能
参数的打包与解包
打包:如果函数在定义时无法确定需要接受多少个数据,那么可以在定义函数时为形参添加*或**
*:代表接收以元组形式打包的多个值 **:代表接收以字典形式打包的多个值
def test(*args): print(args) 调用:test(11,22,33) 结果:(11,22,33)
解包:如果函数在调用时接收的是元组类型的数据,那么可以使用*将元组拆分为多个值,并且每个值按照位置参数传递的方式赋值给形参,如果函数在调用时接收的实参是字典类型的数据,那么可以使用**将字典拆分为多个键值对
定义:def test(a,b,c,d): print(a,b,c,d) 调用:num = (11,22,33) test(*num) 结果:11 22 33
混合传递
定义:def test(a,b,c=33,*args,**kwargs): print(a,b,c,args,kwargs) 调用:test(1,2) test(1,2,3) test(1,2,3,4) test(1,2,3,4,e=5) 结果:1 2 33 () {} 1 2 3 () {} 1 2 3 (4,) {} 1 2 3 (4,) {'e':5}