# _author_:wyq
# _date_:2018/7/21
函数
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性: 1.减少重复代码
2.使程序变的可扩展
3.使程序变的易维护
语法定义:
def sayhi(): # 函数名
print("hello, I'm nobody! ")
sayhi() # 调用函数
函数参数:
形参变量:只有在被调用时才分配内存单元,在调用结束时即可释放所分配的内存单元。形参只有在函数内部有效。
实参: 可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使参数获得确定值。
默认参数:
默认参数在调用时如果不指定,就默认是默认参数指定的值;如果在调用时指定了参数,就是指定的值。
def sayhi(name, age, country='CN'):
country='CN'就是默认参数,默认参数需要放在最后。
关键参数:
给函数传参数要按顺序,如果不想按顺序就可以用关键参数,只需要指定参数名即可(指定了参数名的参数,就叫做关键参数)。
关键参数必须放在位置参数之后!(位置参数:以位置顺序确定对应关系的参数)
非固定参数:
如果你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。
def stu_register(name, age, *args): # *args 会把多传入的参数变成一个元组形式
print(name, age, args)
stu_register('alex', 22)
# 输出
# alex 22 () #后面这个()就是args,只是因为没有传值,所以为空
stu_register('seven', 23, 'CN', 'Python')
# 输出
# seven 23 ('CN', 'Python')
还可以有一个**kwargs
def stu_register(name, age, *args, **kwargs): # **kwargs 会把多出入的参数变成一个dict字典形式
print(name, age, args, kwargs)
stu_register("alex", 22)
# 输出
# alex 22 () {} # 后面这个{}就是kwargs,只是因为没有传值,所以为空
stu_register('seven', 23, 'CN', 'Python', sex='Male', provine='Shandong')
# 输出
# seven 23 ('CN', 'Python') {'sex': 'Male', 'provine': 'Shandong'}
返回值:
函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回
def stu_register(name, age, course='PY', country='CN'):
print('----注册学生信息----')
print('姓名:', name)
print('age:', age)
print('国籍:', country)
print('课程:', course)
if age > 22:
return False
else:
return True
stu_status = stu_register('山炮', 22, course='全栈开发')
if stu_status:
print('注册成功!')
else:
print('too old to be a student.')
输出结果:
----注册学生信息----
姓名: 山炮
age: 22
国籍: CN
课程: 全栈开发
注册成功!
注意:
函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so也可以理解为return语句代表着函数的结束。
如果未在函数中指定return,那么这个函数的返回值就是None。
全局与局部变量:
在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
当全局变量和局部变量同名时,在定义局部变量的函数内,局部变量起作用;在其他地方全局变量起作用。
如何在函数里修改全局变量:
name = "Alex Li"
def change_name():
global name
name = "Alex 又名 金角大王,路飞学城讲师"
print("after change", name)
change_name()
print("在外面看看name改了么?", name)
global name的作用就是要在函数里声明全局变量name ,意味着最上面的name = "Alex Li"即使不写,程序最后面的print也可以打印name
匿名函数:
匿名函数就是不需要显示的指定函数名
def calc(x, y):
return x*y
print(calc(2, 3))
换成匿名函数为:
calc = lambda x, y: x*y
print(calc(2, 5))
高阶函数:
变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为 高阶函数。
def add(x, y, f):
return f(x) + f(y)
res = add(2, -7, abs)
print(res)
只需要满足以下任意一个条件,即是高阶函数:
接受一个或多个函数作为输入
return返回另一个函数