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'])

 

猜你喜欢

转载自www.cnblogs.com/sapphire77/p/10705957.html