函数
1. 什么是函数
在项目的开发中 有一些代码块是反复使用 就会封装起来 封装起来的我们就叫函数
2. 为什么定义函数
- 优点:方便(提高代码的利用率)
- 提高代码的可读性
- 便于调试bug:
3. 函数的分类
- 系统库函数
- 自定义函数
4.自定义函数
- 语法:
def funcName():
函数体
----------------
funcName() //调用函数
基本格式:
1.以def开始
2.自定义函数名
3.小括号()函数的参数写在里边,后跟冒号
4.函数体注意缩进
- 命名:
遵循标识符:
1. 以数字字母下划线组成
2.不能以数字开始
3.不能是系统关键字
func_name funcName
- 函数的调用
在函数定义之前不能调用
可以重复定义函数 后边的覆盖前边的
形参无默认值时不传参会报错
形参有默认值时可以不传参
形参有默认值且有多个参数时默认值在最后
多个参数有默认值的情况 传参率高的房子前边
- 关键字参数
//实参的值可以通过形参的名字来传值
def demo(age,name,height):
print(age,name,height)
demo(name = 'zhang',age = 1,height = 180)
//所有实参传参如果使用了关键字方式,name所有的参数都要指定对应关键字
参数
- 定义函数名后的叫做形参
- 调用函数时后的叫实参
- 参数值是可以改变的 提高代码的重用性
- 形参和实参是一一对应的
- 形参是可以有默认值的 有默认值的形参
返回值
函数里边没有return 返回None
return 后边的值会返回给函数的调用处
想要返回多个值时 可以使用元组 列表 字典等形式
return 返回值可选
return后边只执行依据 其余下边有再多都不执行
def demo(num):
num=30
print(num) //30
print(id(num))
num1 = 20
print(id(num1))
demo(num1) //30
print(num1) //20
- 可变长度参数
1.形参前面的*会把实参当做列表形式传
def goodMan(name,*goodList):
print(goodList)
goodMan('a',['b'])
goodMan('b','c','d',['a','b'])
2.形参前面两个*会把实参当做字典形式传
3.实参前边的*会把 列表 元组转成可变参数
#计算一组数字的平方和
def calc(*nums):
res = 0
for x in nums:
res+=x*x
print(res)
calc(2,3,4,5)
4.实参前面**会把字典变成可变参数
变量的作用域:
- 局部变量:在函数体内定义的变量 函数外部不可用
- 全局变量:在函数体外部定义的变量 叫做全局变量 在函数体内部能够拿到值,但不能修改值 修改的话会在函数体内声明一个全新的变量
若想使用全局变量 声明global 可以修改
global使用整个函数外边的全局变量
nonlocal使用的是外层函数的局部变量
- 递归函数
函数自己调用自己的过程:
执行核心
终止的条件
如果 子项目中能用循环和遍历解决的问题 尽量不要用递归?内存占用
- 匿名函数
不使用def定义函数 而使用==lambda==关键字
func = lambda a,b:a-b
print(func(2,3)) //-1
print((lambda a,b:a-b)(10,20)) //-1
- 闭包函数
函数中嵌套函数 且外层函数的返回值是函数
函数严格区分大小写
- 身份运算符
is
not is
高阶函数
把函数当做参数传进去的函数叫做高阶函数
- map()
第一个参数:函数 第二个参数是 列表
def myMap(x):
return x*2
print(list(map(myMap,[1,2,3,4,5])))
reduce
第一个参数是函数
第二个参数是列表
def mySum(x,y):
return x+y
print(reduce(mySum,[1,2,3,4])) //10filter
参数:函数 列表
一般用户过滤数列
根据参数的函数返回值来判断是否过滤掉
根据True和Falsedef func(num):
if num%2 ==0:
return True
return False