Python函数:
一个具有独立功能的代码块,重复使用时,那么往往就需要使用函数把这块代码封装成一个整体。
一、定义函数:
def 函数名():
函数代码
定义一个函数,函数不会执行,要执行需要调用函数
二、调用函数:
函数名()
函数定义一次,可以多次被调用
demo:
def printHelp():
print('='*30)
print(' 学生管理系统')
print('1.添加学生信息')
print('2.删除学生信息')
print('3.修改学生信息')
print('4.查询学生信息')
print('5.显示学生信息')
print('0.退出系统')
print('='*30)
printHelp()
三、返回值:
一个函数执行完成以后,把一个结果拿给调用者 ,只能返回一个值
return : 1.可以把一个结果返回给调用者
2.结束一个函数
注意:如果一个函数中编写了多个return,程序不会出现语法错误,
只要第一个return执行了,这个函数就结束了
四、全局变量与局部变量
全局变量:
在函数外面定义的变量就是全局变量
全局变量一般不能直接在函数内部被更改
如果要更改,可以用:global + 变量名
局部变量:
在函数里面定义的变量就是局部变量
形参是局部变量
五、不定长参数
demo:
#不带名字的参数将作为一个元素传给*args,形成一个元组
#带名字的参数将作为一个元素传给**kwargs,形成一个字典
def test(a,b,*args,**kwargs):
print(a)
print(b)
print(args)
print(kwargs)
test(11,22,33,44,55,66,77,88,mm = 11,nn =33)
print('-' * 50)
#当列表/元组在当做实参传递的时候,如果前面有一个*,表示对其进行解包
#意思是:[111,222,333] ---> 111,222,333
#当字典当做一个实参进行传递的时候,如果前面有两个*,表示对其进行解包
#意思是:{’aa':100,'bb':200} ---> a = 100,b = 200
A = [11,22,33]
B = {'aa':100,'bb':200}
test (11,22,*A,**B)#等价于(11,22,11,22,33,aa = 100,bb = 200)
print('-' * 50)
test(11,22,A,new = B)
六、递归:
#demo 1 阶乘递归
def test(num):
if num > 1:
return num * test(num-1)
else:
return 1
i = int(input('请输入一个数字:'))
print(test(i))
#demo 2 汉诺塔
#有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,
要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子
上方,请问至少需要多少次移动?
def move(n,a,b,c):
if n == 1:
print(a,'----->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(4,'A','B','C')
七、匿名函数
def sum(a,b):
return a + b
#等价于
sum = lambda a,b: a + b
八、内建函数
1.map(函数,可迭代对象)#进行对应操作
例如:map(lambda x : x * x,[1,2,3])
2.filter(函数,可迭代对象)#过滤,函数返回布尔值
例如:filter(lambda x: x%2,[1,2,3,4])
3.reduce(函数,可迭代对象)#累计值
例如:reduce(lambda x,y: x+y,[1,2,3,4])
reduce(lambda x,y:x+y,['aa','bb','cc'],'dd')
#结果为’ddaabbcc'
4.sorted(可迭代对象)#排序,倒序加reverse = True