python函数编程的优点
1、保持代码的可重用性(意思就是你不需要在不同的场合下写重复的代码)
2、保持代码的可拓展性(意思就是在哪个地方需要修改一下,你只需要修改函数里面的内容,而不需要修改每个使用到它的地方)
3、保持代码的一致性(意思就是函数某个地方改变了,其它用到它的地方都变了)
函数返回值
当没有返回值的时候就是一个过程,返回None
当返回值是一个具体的数时,返回的是一个object(对象)
当返回的值不止一个时,返回的是一个元组(tuple)
关键字参数和位置参数
关键字参数与形参顺序无关
位置参数与形参顺序一一对应
当关键字参数与顺序参数混合的时候,按位置参数的顺序来,所以不能将关键字放在顺序参数前面。举例说明如下:
def test(x,y):
print(x)
print(y)
#test(x=2,1)#关键字参数不能放在位置参数前面
test(2,y=1)
def test(x,y,z):
print(x)
print(y)
print(z)
#test(1,y=2,z=3)#正确
test(1,z=3,y=2)#正确
#test(x=1,2,z=3)#报错,因为不知道中间的2到底是应该给谁
传递的参数不固定,使用参数组
可以通过以下这种方式:
*args:把N个位置参数转换成元组
def test(*args):
print(args)
test(1,2,3,4,5)#当传递不固定的参数,使用这种方式可以把不固定的参数构成一个元组
test(*[1,2,3,5,5])# *args=*[1,2,3,5,5],即args=[1,2,3,5,5]
def test(x,*args)
print(x)
print(*args)
test(1,2,4,5,6,7,8)#第一个数始终是1,后面就都是args
**kwargs:把N个关键字参数转换成字典的方式
def test(**kwargs):
print(kwargs)#打印的字典方式
print(kwargs['name'])#以字典的形式进行打印
print(kwargs['age'])
print(kwargs['sex'])
test(name="Jorocco",sex="man",age="23")
test(**{'name':'Jorocco','age':'23'})#这种调用方式也可以
结果:
位置参数和参数组的结合
def test2(name,**kwargs):
print(name)
print(kwargs)
test2('Jorocco',sex="man",age="23")
结果:
位置参数,默认参数,关键字参数的结合
def test3(name,**kwargs,age=19)#这种写法错误,参数组只能放在最后,不然的话判断不了参数组用哪几个参数
def test3(name,age=19,**kwargs):
print(name)
print(age)
print(kwargs)
test3('Jorocco',sex='m',hobby='basketball')
test('Jorocco',sex='m',hobby='basketball',age=23)#这种也行
test('Jorocco',3,sex='m',hobby='basketball')#这种也行
test('Jorocco',3,sex='m',hobby='basketball',age=23)#这种就不行
修改全局变量
全局变量的字符串和整数在函数里面需要显示声明(global)全局变量才能被被修改,列表、字典、集合、类则不需要
name1="Jorocco"#全局变量,在整个程序中都有效
def change_name(name):
global name1#要修改全局变量需要先声明
print("before change",name)
name1="Morocco"
print("after change",name1)
change_name(name1)
print(name1)#全局变量被修改
修改全局变量的列表:
names=["Jorocco","Rain","Jack"]
def change_name():
names[0]="Morocco"
print("inside fun",names)
change_name()
print("outside fun",names)
高阶函数
高阶函数就是把函数名当做实参传给函数且返回值中包含函数名
def add(x,y,f):
return f(x)+f(y)
res=add(3,-6,abs)
print(res)
匿名函数
匿名函数的作用:一般用在只需要调用一次就释放的只有三元运算的场景,当有for循环等逻辑运算的时候,匿名函数就不能实现。
举例说明:
cal=lambda x:x+2
print(cal(3))
python的内存回收机制:
函数即“变量”,意思是函数名是变量,相当于门牌号,和x、y一样,都是变量,当我们定义一个变量或函数时,内存会开辟一个内存空间将具体的数字和函数体存入内存中,并将x、y或函数体名称作为该内存的门牌号,而对于匿名函数而言也是同样的,当门牌号没有了,该内存就会被回收,即1和函数体都被销毁。python的内存回收机制最关键的是:依门牌号而定,门牌号有则内存中的内容在,无,则内存被销毁回收。