函数的引入
- 提高代码复用率
- 提高开发效率 容易排错
- 函数一般用于对一个功能的封装
- 函数不要有输入输出 (input)(print)
- 函数名分隔用下划线
- 定义函数要知道函数实现什么功能
- 需要知道是否需要外界传参数
命名规则
- 数字,字母,下划线,不能以数字开头,
- 不能是关键字
- 区分大小写
风格
- 见名知意
- 不要和系统函数重名
- 多个单词用小驼峰大驼峰
- 函数体必须缩进否则报错
形参
- 定义函数时后括号里的就叫形参
- 定义者和调用者的一个约定,调用者必须按照形参要求传参
- 带默认值的形参必须在所有不带默认值参数的右边,但是要在**kwargs 左边 不然会被他吃掉传参。
实参
- 函数调用后小括号中的参数
函数的调用
函数在调用时 实参向形参赋值然后形参和实参无关联在程序运行的过程中,对象值不可变实参为不可变对象
def (num1,num2):
return num1+num2
函数中return 有两个作用,1将计算的结果返回,2终止函数运行下面语句不执行
lambda匿名函数
- lambda是一种简化函数
- 没有函数名
- 函数体就是表达式
- 匿名函数返回表达式的值
语法格式为 可以无参数
lambda 参数1,参数2……:表达式 可以直接 调用
c = lambda a,b:a+b if a>b else a-b
print(c(1,3)) 结果为4
filter(类)
- 在python2中他是一个函数方法
- 在python3中他是一个类
filter 一半用于过滤数据
1
filter(func,iterable)
ages = [1,2,3,4,5]
res = filter(lambda x:x>3,ages)
# 匿名函数一般用这种地方
2
map类
- python2 map是一个内置方法
- python3 map是一个内置类
- map用于重复动作
ages = [1,2,3,4,5]
print("0x%X"%id(ages))
res = []
for x in ages:
x*=2
res.append(x)
print(res)
代码功能一样
下面效率更高
#两个参数 第一个函数 第二个可迭代对象
res = map(lambda x:x*2,ages)
print("0x%X"%id(res))
print(res)
print(list(res))
reduce
- python2 reduce 是一个内置函数
- python3 reduce整合到了functools模块
- 所有内置函数 内置类 都在buitins.py
- 指定的环境里面有一个functools.py文件
1
reduce用于压缩运算
reduce(func,iterate,inits) 第三参数表示初始值
from functools import reduce
案例一
agges = [100,27,39,14,95]
print(reduce(lambda x,y:x+y,agges))
案例二
students = [
{'name': 'zhangsan', 'age': 18, 'score': 92},
{'name': 'lisi', 'age': 20, 'score': 90},
{'name': 'wangwu', 'age': 19, 'score': 95},
{'name': 'jerry', 'age': 21, 'score': 98},
{'name': 'chris', 'age': 17, 'score': 100},
]
print(reduce(lambda x,y:x+y["score"],students,0))
any
用于判断字符串中有没有出现某字符 返回bool值
print(any(["hello","o"]))
dir
用于提示可以对指定对象的操作方法
print((dir([1,2])))操作列表的方法
print(dir("")) 提示操作字符串的方法
divmod
x 是商 y是余数 divmod()
x,y = divmod(15,2)
print(x,y)
高阶函数
- function 也是一个数据类型
- 一个函数可以作为另一个函数的参数哈可以作为另一个函数的返回值
- 一个函数内部可以再定义一个函数
def test(x,y,func):
z = func(x,y)
return z
def add(a,b):
return a+b
#将方法add作为参数传入 test 在test中调用add实现功能
print(test(10,20,add))
这是一种闭包结构 外部函数返回内部函数的函数名
内部函数调用外部函数接受的方法
def outer():
x=100
def inner():
y = 50
print("我是inner")
print("我是outer")
return inner
第一个小括号代表执行outer方法 在outer中打印了outer 但是不会打印内部函数inner
但是外部函数把内部函数的函数名作为返回值暴露出去
于是第二个括号可以
outer()()
sorted排序
list1 = [
{"name":"zhangsan","age":18},
{"name": "zn", "age": 21},
{"name": "zsan", "age": 33},
{"name": "zhan", "age": 40},
]
list2 = sorted(list1,key=lambda x:x["age"],reverse=True)
将字典里面元素从大到小排序
sort排序
arr = ["a","c","f","e","b","c","e"]
arrs = list(set(arr))
#按照索引值排序 不会改变原来的顺序
arrs.sort(key=arr.index)
print(arrs)