目录
一 函数介绍
1 定义
def 函数名():
实现的功能代码
2 调用
通过函数名()来调用
二 函数类型
函数根据有没有参数,有没有返回值,可以相互组合,一共有4种
- 无参数,无返回值:可实现输出打印的功能
- 无参数,有返回值:可实现采集数据的功能
- 有参数,无返回值:可实现 对某些变量设置数据而不需结果 的功能
- 有参数,有返回值:可实现 数据处理并需要结果 的功能
三 局部变量与全局变量
局部变量:函数内部定义的变量,只对当前函数生效
全局变量:函数外部定义的变量,对全部函数生效
修改全局变量:
函数中出现于全局变量同名变量时,相当于新建了一个局部变量;
函数中想要修改全局变量的值,使用 global 变量1,变量2
四 返回值return
一个函数中只要有一个return被执行,函数即结束
return 返回多个数据:
1 只要能存储多个数据的类型如:列表、元组、字典,return就可以一次性返回多个数据,如:列表return[1,2],元组return (1,2),字典return{'key':'value'}
2 return后多个数据,默认为元组,如:return 1,2
五 参数
1 缺省参数
形参:定义函数时小括号中用于接收参数的为形参
实参:调用函数时用于传递给形参的为实参
缺省参数:在形参中默认有值的参数,称之为缺省参数,带有默认值的参数一定要位于参数列表的最后面,如下:
def info(name,age=18):
print('姓名为%s'%name)
print('年龄为%d'%age)
info('zhangsan')
2 不定长参数
一个函数能处理比声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。
语法:
def functionname([formal_args,] *args, **kwargs):
function_suite
return [expression]
加星号(*)的变量args会存放所有未命名的变量参数,args为元组
加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典
def fun(a, b, *args, **kwargs):
print("a = %d" % a)
print("b = %d" % b)
print("args:")
print(args)
print("kwargs: ")
for key, value in kwargs.items():
print("%s=%s" % (key, value))
fun(1, 2, 9, 8, name='zhangsan', age=18)
print('-'*30)
c=(1,2)
d={'name':'zhangsan'}
fun(1,2,*c,**d)
3 参数顺序
缺省参数应在 *args的后面, 如果有**kwargs的话,**kwargs必须在最后,如:
def fun(a, b, *args,name='lisi',age=18, **kwargs):
pass
六 拆包
元组、列表、字典等都可以进行拆包,拆的数据的个数要与变量的个数相同,否则程序会异常
元组拆包:
列表拆包:
字典拆包:
七 递归函数
调用本身的函数即递归函数
应用:阶乘
def CalNum(num):
if num>1:
result = num*CalNum(num-1)
else:
result=1
return result
print(CalNum(5))
八 匿名函数lambda
语法:lambda [变量1,变量2,...,变量n]:表达式
sum = lambda a, b: a + b
print("两数之和为 : %d" % sum(10, 20))
应用:匿名函数作为参数传递
def fun(a, b, c):
print("a = %d" % a)
print("b = %d" % b)
print("result = %d" % c(a, b))
fun(1, 2, lambda x,y:x+y)
九 列表推导式
a=[x for x in range(2)]
b=[x for x in range(1,10,2) if x%2==0] # range(起始,结束,间隔)
c=[(x,y) for x in range(2) for y in range(3)]