一.为什么要使用函数
1.避面代码重用
2.提升可读性
3.使程序变得易维护
二.函数的定义与调用
def helloword(): #函数定义,括号中可加参数
print("get out!")
helloword() #调用函数
三.函数参数与局部变量
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
def calc(x,y): #其中x,y就是形参
print(x+y)
calc(a,b) #a,b为实参
1.默认参数:
def cout(name,sex,country = "CN"):
print(name,sex,country)
cout("yungexing","f")
2.关键参数
cout(sex="f",name""feilie) #关键参数要在默认参数之后
3.非固定参数
def user_info(name,age,*args):
print(name,age,args)
user_info("link",1000,"pig","GoodGame")
>>>link 1000 (‘pig‘, ‘GoodGame‘)
另一种非固定参数
def user_info(name,age,**kwargs):
print(name,age,kwargs)
user_info("link",1000,pet= "pig",total = "GoodGame")
>>>link 1000 {‘pet‘: ‘pig‘, ‘total‘: ‘GoodGame‘}
args和kwargs在调用函数时都可以不填
4.局部变量
name = "link"
def cout_name():
print("before change",name)
name = "zelda"
print("after change",name)
cout_name(name)
print(name)
>>>
before change linkafter
change zelda
link
在函数内改变全局变量,方法如下
name = "link"
def cout_name():
global name
print("before change",name)
name = "zelda"
print("after change",name)
cout_name()
print(name)
>>>
before change link
after change zelda
zelda
三.嵌套函数
def func1():
def func2():
print("the first")
func2()
print("the second")
func1()
print("the last")
>>>
the first
the second
the last
不可以在最外层调用func2,否则会报错。因为函数只有被调用时才会执行
四.递归
在一个函数内调用自身本身就是递归函数
def calc(n):
print(n)
if int(n/2) == 0:
return
else:
return calc(int(n/2))
calc(10)
>>>
10
5
2
1
五.高阶函数
高阶函数就是将函数名作为参数传入另一个函数之中,或者返回值之中有函数名,例子如下
def func1(name,fun2): fun2(name)
def func2(eg):
print(eg)
func1("Fate",func2)
>>>Fate
六.匿名函数
匿名函数就是不需要显示的指定函数
res = map(lambda x:x*x,[1,3,5,7,9])
for i in res:
print(i)
>>>
1
9
25
49
81