python,函数式编程

时间:2021-08-01 19:11:35

函数式编程:

特点:允许传递的参数是函数,且允许返回一个函数。

由于Python允许使用变量,因此,Python不是纯函数式编程语言,同样的输入可能输出不同,有副作用。纯函数式编程语言没有变量,输入和输出是确定的,无副作用。

1.高阶函数(Higher-order function):

特点:高阶函数可以接受另一个函数作为参数,还可以把函数作为结果值返回。

变量可以指向函数,函数名也是变量, 所以可以作为参数传入函数。

  1.1 内置的函数:函数作为参数

    1%. map(func, *iterables) 【映射】

        2%. reduce(function, sequence, initial=None) 【累计】

  # 将迭代器经函数的处理返回一个新的迭代器,是一种映射。
  list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
# 返回 ['1', '2', '3', '4', '5', '6', '7', '8', '9']

#累计计算:把序列[1, 3, 5, 7, 9]变换成整数13579
from functools import reduce
def fn(x, y):
return x * 10 + y
  reduce(fn, [
1, 3, 5, 7, 9])
# 13579

# map()和reduce()合用:str’13579‘ 转化为int:13579
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
reduce(fn, map(char2num,
'13579'))
# 整理为一个函数str2int,这些函数因为就一句也可以用匿名函数写
from functools import reduce

def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
return reduce(fn, map(char2num, s))

            # 实现筛选功能

    3%. filter(function, iterable)   【返回值是True则保留】

# 迭代的值
def _odd_iter():
n
= 1
while True:
n
= n + 2
yield n

def _not_divisible(n):
return lambda x: x % n > 0

# 定义一个生成器,不断返回下一个素数
def primes():
yield 2
it
= _odd_iter() # 初始序列
while True:
n
= next(it) # 返回序列的第一个数
yield n
it
= filter(_not_divisible(n), it) # 构造新序列


# 打印30以内的素数:
for n in primes():
if n < 30:
print(n)
else:
break

# 找到回数
def is_palindrome(n):
start
= 0
end
= -1
while start < len(str(n))/2:
if str(n)[start] != str(n)[end]:
return False
else:
start
+= 1
end
-= 1
return True
output
= filter(is_palindrome, range(100, 200))
print(output)

           # 排序

           4%. sorted(iterable, key=None, reverse=False)

# 按照绝对值排序,key传入函数
sorted([36, 5, -12, 9, -21], key=abs)
# [5, 9, -12, -21, 36]

# 忽略大小写反向排序
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
[
'about', 'bob', 'Credit', 'Zoo']

2 返回函数

3 匿名函数

4  装饰器

5 偏函数