高阶函数,递归函数,迭代器,生成器,装饰器,特殊函数的应用。
高阶函数:
函数名,也是一个变量名,指向函数对象内存空间的地址。
也可以进行赋值,作为一个函数的参数,还可以作为函数的返回值
def f(n): #函数f() return n**2 def f2(a,b,function): #函数f2() return f(a)+f(b) s = f2(2,3,f) #将函数名字f作为一个参数传给函数f2调用 print(s)
>> 13
----------------------------------------------------------------------------
def func(): def inner(): x = 7 return x return inner #返回一个函数名字 a = func() print('a的类型:%s'%type(a)) print('a的值:%s'%a) #a此时指向inner函数内存空间地址 print(a()) #a()就相当于直接调用func函数中的inner()函数效果
>> a的类型:<class 'function'> >> a的值:<function func.<locals>.inner at 0x000002455816B9D8> >> 7
filter()方法过滤器
def f3(s): # 定义需要过滤掉得内容函数 if s!= 'a': return s s1 = [1,2,'a','b','c'] s2 = filter(f3,s1) #filter()方法中传入函数f3 print("通过f3函数过滤掉得到s2内存空间地址:>",s2) print(list(s2)) #使用list方法进行强转为list
>> 通过f3函数过滤掉得到s2内存空间地址:> <filter object at 0x00000133B804F0B8> >> [1, 2, 'b', 'c']
map()方法
def f4(s): return s+ "admin" s1 = ['x','y','z','u','v','w'] s3 = map(f4,s1) print(s3) print(list(s3))
>> <map object at 0x000001CCABA596D8> >> ['xadmin', 'yadmin', 'zadmin', 'uadmin', 'vadmin', 'wadmin']
reduce()函数
from functools import reduce
reduce方法实现1-100累加
from functools import reduce def add(x,y): return x+y sum = reduce(add,range(1,101)) print(sum) #reduce的结果就是一个值
>> 5050
reduce()方法实现阶乘
from functools import reduce def factorial(x,y): return x*y factorial_num = reduce(factorial,range(1,6)) #reduce()方法求5!结果 print(factorial_num)
>> 120
lambda 匿名函数(函数式编程)
from functools import reduce factorial = lambda x,y:x*y #使用lambda匿名函数 factorial_num = reduce(factorial,range(1,6)) print(factorial_num) #合成一句代码 factorial_num2 = reduce(lambda x,y:x*y,range(1,6)) #5!值 print(factorial_num2)
>> 120
>> 120
递归函数:
特性:
1.自己调用自己
2.有一个结束条件
凡是用递归能做的,用循环都可以解决。对于数据处理量较大时,递归函数的效率比循环要低,递归层次过多会导致栈溢出,递归函数在递归调用时会先将返回的值存在内存中,,最后再将所有的值取出进行计算。
使用递归函数求阶乘
def f(n): if n == 1: #递归函数需要有一个结束条件,求阶乘时当n=1时就结束了 return 1 else: sum = n* f(n-1) #自己调用自己 return sum print(f(5)) # 5!=120 函数调用过程实现阶乘 5*f(4) 4*f(3) 3*f(2) 2*f(1) 1
递归函数 求斐波那契数列
#斐波那契数列: 0,1,1,2,3,5,8,13,21,34,55... def f(n): #定义函数求得斐波那契数列第n个数的是多少: if n ==1: return 0 if n == 2: return 1 fibo_n =f(n-2)+f(n-1) #自己调用自己 return fibo_n n= int(input(">>:")) #循环输出斐波那契数列 for i in range(1,n+1): print(f(i),end='\t')