Python 入门 到 精通 (五)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44641053/article/details/101151506

这篇文章是介绍Python 的高阶函数

大家可参照我的另一篇博客,是有关python函数的基本知识介绍:Python 入门 之 函数

在这里插入图片描述

高阶函数简介

高阶函数的概念:

把函数作为参数传入的函数即称之为高阶函数,
高阶函数是函数式编程的体现。

编写高阶函数,就是让函数的参数能够接收别的函数。

变量可以指向函数

内置函数:
ads():对数字求绝对值

			调用该函数:abs(-10)

round():数字的四舍五入

			调用该函数:round(6.66666)

什么是函数?

函数本身也可以赋值给变量,
即:变量可以指向函数,函数名其实就是指向函数的变量

			print(abs(-1))
			print(abs)
			x = abs(-1)
			print x
			f = abs
			print(f)
			print(f(-1))

			# 结果:
			1
			<built-in function abs>
			1
			<built-in function abs>
			1



			print(abs(-1))
			abs = 2
			print(abs(-1))
			
			# 结果:
			1
			TypeError: 'int' object is not callable

什么是高阶函数?

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

			def fun(x, y, f):
			    print(f(x), f(y))
			fun(1, -2, abs)

			# 结果:
			1 2

内置高阶函数

内置高阶函数

  • map 函数

    map(func,lst) 函数接收两个参数,一个是函数,一个是序列

    map 将传入的 函数func 依次作用到 序列lst 的每个元素,并把结果作为新的 列表(Python2)/迭代器(Python3) 返回。

      		def fun(x):
      		     return x * x
      		print(map(fun, range(5)))
      		
      		
      		# 结果:
      		[0, 1, 4, 9, 16]
      		
      		
      		-------------------------------------
      		
      		
      		print(map(str, [1, 2, 3]))
      		
      		
      		# 结果:
      		['1', '2', '3']
    

  • reduce 函数

    reduce(func,lst) 把一个 函数func 作用在一个序列x1, x2, x3…上,这个函数必须接收两个参数,reduce 每次把func计算结果继续和序列的下一个元素做累积计算。

    注意:在使用reduce() 函数之前,必须导入模块 functools

      		def add(x, y):
      		     return x + y
      		print(reduce(add, range(5)))
      		
      		
      		# 结果:
      		10
    

    运行过程为 : add(add(add(add(0+1)+2)+3)+4)=10

    综合编程 : 写出把 str 转换为 int 的函数(eg:’12345’–12345)

      		def fun(N):
      		     return {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9}[N]
      		def fun1(x, y):
      		     return x * 10 + y
      		print(reduce(fun1,map(fun,"12345")))
      		 
      		 
      		# 结果:
      		12345
    

  • filter 函数

filter(func,lst) 也接收一个函数和一个序列,用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,可将其转换成list

和 map( ) 不同的时,filter( ) 把传入的函数依次作用于每个元素,然后根据返回值是 True还是 False 决定保留还是丢弃该元素

在一个 list 中,删掉偶数,只保留奇数:

			def fun(n):
			     return n % 2 == 1
			print(filter(fun,range(5)))


			# 结果:
			[1, 3]

sorted 函数

sorted 函数

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。

通常规定如下:

			x < y, return -1
			x == y, return 0
			x > y, return 1

			----------------------------
			
			print(sorted([3, 1, 2]))
			print(sorted([3, 1, 2], reverse=True))
			 
			# 结果:
			[1, 2, 3]
			[3, 2, 1] 

排序数字字符

			li = ['2', '1', '4', '3']
			print(sorted(li, key=int))
			
			
			# 结果:
			['1', '2', '3', '4']

匿名函数

匿名函数

• 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。

• 关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数。

			print(map(lambda x: x * x, [1, 2, 3, 4]))
			def fun(x):
			     return x * x
			print(map(fun, [1, 2, 3, 4]))
			
			
			# 结果:
			[1, 4, 9, 16]
			[1, 4, 9, 16]

• 匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。

• 因为匿名函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;

			f = lambda x: x * x
			print(f)
			print(f(3))
			
			
			# 结果:
			<function <lambda> at 0x7fde80eb7938>
			9

• 把匿名函数作为返回值返回。

			def fun(x, y):
			     return lambda: x * x + y * y
			print(fun(1, 2))
			f = fun(1, 2)
			print(f())
			
			
			# 结果:
			<function <lambda> at 0x7f5c2942a9b0>
			5

传入多个参数

			f = lambda x,y =1,*args,**kwargs :(x*y,args,kwargs)
			print(f(2,4,5,a=1,b=5))
			
			# 结果:
			(8, (5,), {'a': 1, 'b': 5})

猜你喜欢

转载自blog.csdn.net/qq_44641053/article/details/101151506