Python自学14(函数式编程)

Python自学14(函数式编程)_第1张图片
" 灼灼桃花十里,取一朵放在心上,足矣 "

从小独栋升级为别墅区:函数式编程

  • 1、函数赋值给变量
  • *1、类赋值给变量(拓展)
  • 2、函数作为函数参数
  • 3、lambda 表达式
  • 4、map() 和 filter()

1、函数赋值给变量

在 Python 中,所有的对象都可以赋值给变量,包括函数

def say_hello(name):
    return name + ', hello!'

f = say_hello
print(f('xiaohan'))
# output:xiaohan, hello!

# 注意、这里被赋值的是函数本身、而不是函数的结果
# 赋值后、变量 f 与函数 say_hello 绑定
# f 也就相当于是 say_hello 的别名、完全可以用调用 say_hello 的方式来调用 f

*1、类赋值给变量(拓展)

class Orange:
    who_am_i = 'orange'

banana = Orange
print(banana.who_am_i)
# output:orange

# 注意、被赋值的是类本身、而不是类实例化后的对象
# 赋值后、变量 banana 与类 Orange 绑定、banana 也就相当于是 Orange 的别名
# 使用 banana 就相当于使用 Orange

2、函数作为函数参数

  1. 一切对象都可以作为函数的参数,包括另一个函数
  2. 接受函数作为参数的函数,称为高阶函数
# 从给定的数字列表中筛选数字、而具体的筛选策略由另一个函数决定并以参数的形式存在
def filter_nums(nums, want_it):
    return [n for n in nums if want_it(n)]

# 函数 filter_nums 用来筛选数字、它接受两个参数
# nums 是包含所有待筛选数字的列表、want_it 是一个函数、用来决定某个数字是否保留

def want_it(num):
    return num % 2 == 0
print(filter_nums([1,2,3,4,5],want_it))
# output:[2, 4]

3、lambda 表达式

  1. 在 Python 中,可以通过 lambda 表达式来便捷地定义一个功能简单的函数
  2. 这个函数只有实现没有名字,所以叫作匿名函数
# 语法
lambda 参数1, 参数2, 参数N: 函数实现

# 使用上述表达式将定义一个匿名函数、这个匿名函数可接受若干参数
# 参数写在冒号前(:)、多个参数时用逗号分隔、其实现写在冒号后

f = lambda x: x ** 2

# 这个 lambda 表达式定义了一个匿名函数、这个匿名函数接受一个参数 x、返回 x ** 2 的计算结果
# 同时赋值语句将这个匿名函数赋值给了变量 f、注意 f 保存的是函数、而不是函数结果

%1
f = lambda x: x ** 2
print(f(4))
# output:16

# 通过观察上述示例可以发现、lambda 表达式中并没有 return 关键字
# 但结果被返回出来、是的、匿名函数的 函数实现 的执行结果就会作为它的返回值
# 无需使用 return 关键字

# 一般情况下、我们不会像 f = lambda x: x ** 2 这样直接将匿名函数赋值给变量
# 然后去用这个变量、而是在需要将函数作为参数时、才去使用 lambda 表达式、这样就无需在函数调用前去定义另外一个函数了

%2
def filter_nums(nums, want_it):
    return [n for n in nums if want_it(n)]
print(filter_nums([1,2,3,4,5],lambda  x : x % 2 == 0))
# output:[2, 4]

4、map() 和 filter()

Python 内置有两个非常好用的高阶函数 map() 和 filter()

  1. filter() 用于从可迭代对象中筛选元素
  2. map() 用于对可迭代对象中每一个元素逐一作处理
# 语法
filter(筛选函数, 可迭代对象)

# filter() 依次对 可迭代对象 中的每个元素调用 筛选函数
# 如果返回值为 True、则当前这个元素会被保留、否则被排除
# 最终返回一个包含所有被保留元素的迭代器

%1
# 从 ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'] 筛选出长度为奇数的字符串
print(list(filter(lambda x: len(x) % 2 == 1, ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'])))
# output:['a', 'b', 'efg', 'hig']
# list()将迭代器转换为列表

# 语法
map(处理函数, 可迭代对象)

# map() 依次对 可迭代对象 中的每个元素调用 处理函数
# 最终返回一个包含所有被处理过后的元素的迭代器

# 将 ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'] 全部转换为大写
print(list(map(lambda x: x.upper(), ['a', 'b', 'cd', 'efg', 'hig', 'klmn', 'opqr'])))
# output:['A', 'B', 'CD', 'EFG', 'HIG', 'KLMN', 'OPQR']
# list()将迭代器转换为列表

你可能感兴趣的:(Python自学,字符串,列表,python,lambda)