函数的进阶

使用命名元祖存放excel数据
直接使用生成器推导式存放excel数据

1.递归函数
在函数中调用函数自身,我们把这样的函数叫做递归函数

递归边界:
退出递归的终止条件,即不再调用自身函数的条件

斐波那契数列:第一个数是1,后面的数等于前两个数相加的结果


2.纯函数

简单来说,一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用
,我们就把这个函数叫做纯函数

纯函数的三个原则:
1.变量都只在函数作用域内获取,作为函数的参数传入
2.不会产生副作用,不会改变被传入的数据或者其他数据(全局变量)
3.相同的输入保证相同的输出

副作用:
副作用是指函数被调用,完成了函数既定的计算任务,但是同时因为
访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度地改变
了系统环境
4.内置函数也是纯函数的一种 str() 比较特别,但是py把他归纳为一个函数
其实是一个函数

map函数: 会根据提供的函数对指定序列做反射

map(目标函数名,可迭代对象)
酱可迭代对象中的数据迭代出来,一个个传到函数中去调用,将返回的结果
放到新对象中

filter函数:函数用于过滤序列 有两个参数,一个函数名跟一个可迭代对象
例子:
def fun(n):
return n > 5

list1 = [1, 2, 3, 4, 5, 6, 7, 8]
f = filter(fun,list1) # filter
print(list(f))

filter():根据传入的函数,判断序列里面的值是否符合函数的要求,如果为
true 就把返回值放到一个新对象中
传入的函数也可以是一个lambda函数
r = filter(lambda a:a>4,li)

zip函数:函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖
zip(参数是一个可迭代对象)
打包成一个个元祖,只取可迭代对象的最短长度

3.匿名数

匿名函数的使用场景:简单的函数定义(只有一个表达式)
lambda 函数
lambda 参数:表达式
res = lambda a, b: a + b
print(res(1,2))

三木运算符
# 三目运算符 只能做一些简单的判断
a = 99
print("条件成立") if a>100 else print("条件不成立")

4.偏函数
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数
这个函数可以固定住原函数的部分参数,从而在调用时更简单。
Python内置模块 functools 其中一个就是偏函数 partial
partial() 这个偏函数
第一个参数必须是要固定参数的函数名。后面接要固定的参数,参数可以是多个
例子:
from functools import partial
li = [1, 2, 54, 7, 7, 88]
p =partial(filter,lambda x:x>5)
aa = p(li)
print(list(aa))

posted @ 2019-05-12 04:16  帅瓶子  阅读(84)  评论(0编辑  收藏  举报