Python进阶学习——函数式编程
Posted sapphire77
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python进阶学习——函数式编程相关的知识,希望对你有一定的参考价值。
1.函数式编程
函数:function
函数式:functional,一种编程范式
函数≠函数式
函数式编程的特点:
- 把计算视为函数而非指令。
- 纯函数式编程:不需要变量,没有副作用,测试简单。
- 支持高阶函数,代码简洁。
Python支持的函数式编程:
- 不是纯函数式编程:允许有变量。
- 支持高阶函数:函数key作为变量传入。
- 支持闭包:有了闭包就能返回函数。
- 有限度的支持匿名函数。
2.高阶函数
变量可以指向一个函数。
>>> abs(-10) 10 >>> abs <built-in function abs> >>> f = abs >>> f(-10) 10
函数名其实就是指向函数的变量。
>>> abs = len >>> abs(-10) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type ‘int‘ has no len() >>> abs([1,2,3]) 3
高阶函数:能接收函数做参数的函数。
- 变量可以指向函数
- 函数的参数可以接收变量
- 一个函数可以接收另一个函数作为参数
- 能接收函数做参数的函数就是高阶函数
>>> def add(x,y,f): ... return f(x)+f(y) ... >>> add(-5,9,abs) 14
3.map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9],如果希望把list的每个元素都作平方,就可以用map()函数:
def f(x): return x*x print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
注意:
- map()函数不改变原有的 list,而是返回一个新的 list。
- 利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。
- 由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。
任务:假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:
提示:
- upper() 方法将字符串中的小写字母转为大写字母。
- lower() 方法转换字符串中所有大写字符为小写。
- capitalize()将字符串的第一个字母变成大写,其他字母变小写。
def format_name(s): return s[:1].upper()+s[1:].lower() print map(format_name, [‘adam‘, ‘LISA‘, ‘barT‘])
def format_name(s): return s.capitalize() print map(format_name, [‘adam‘, ‘LISA‘, ‘barT‘])
以上是关于Python进阶学习——函数式编程的主要内容,如果未能解决你的问题,请参考以下文章
python进阶一(函数式编程)2-1 python把函数作为参数
(转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)