美文网首页
python函数式编程

python函数式编程

作者: XYZeroing | 来源:发表于2017-09-09 11:07 被阅读0次

匿名函数

匿名函数lambda 匿名函数不需要以标准的形式来申明, 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果

语法:lambda [arg1[, arg2, arg3...agrn]]: expression

f = lambda x, y: x ** 2 + y ** 2
f(2, 3)
13

map函数

map(func, Iterable):将函数func作用于给定的可迭代对象的每个元素,并返回一个迭代器

results = map((lambda x: x + 2), [1, 2, 3, 4, 5])
for i in results:
    print(i)
3
4
5
6
7

或者

print(next(results))
3
print(next(results))
4
print(next(results))
print(next(results))
print(next(results))
5
6
7
res = map((lambda x, y: (x+y, x-y)), [1, 3, 5], [2, 4, 6])
for i in res:
    print(i)
(3, -1)
(7, -1)
(11, -1)

reduce

functools.reduce(function, iterable[, initializer]),接受两个参数,一个函数,一个可迭代对象,将可迭代对象的元素从左到右累积计算,直到将可迭代对象的元素“减少”为一个单一的值。它取出前两个值传入函数进行计算,计算后的结果又和第三个值计算,一直到将可迭代对象的元素都计算完毕,得出最终结果。

形象化:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

Python3将reduce()函数移到了functools模块中

from functools import reduce
reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])
120

可以设置初始值

func = lambda x, y: x + y
reduce(func, [2, 3, 4], 10)
19

filter

filter(func, seq):调用一个布尔函数func来迭代遍历每个seq中的元素;返回一个使func返回值为true的元素的序列
相当于“过滤”,将符合条件的过滤出来,返回一个filter迭代器

ff = filter(lambda n: n % 2, [i for i in range(20)])
print(list(ff))
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
type(ff)
filter

sorted()

sorted(iterable, *, key=None, reverse=False):用于可迭代对象的排序,返回排序好的新的对象,默认为正序排序,将reverse设置为True可逆序排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序

sorted([2, 34, -221, 33, -87, 0])
[-221, -87, 0, 2, 33, 34]
sorted([2, 34, -221, 33, -87, 0], reverse=True)  # 逆序排列
[34, 33, 2, 0, -87, -221]
sorted([2, 34, -221, 33, -87, 0], key=abs)  # 实现自定义排序
[0, 2, 33, 34, -87, -221]

偏函数

functools.partial(func, *args, **keywords)可以把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单

int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换

int('100101', base=2)
37
int('100101', base=8)
32833
int('1234567', base=16)
19088743

但是大量转化时,可以使用函数,比如大量二进制转化

def int_2(x, base=2):
    return int(x, base)
int_2('1010001')
81

以使用偏函数functools.partial,就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2

from functools import partial
int2 = partial(int, base=2)
int2('1001011')
75
int2('1000010101010')
4266

阅读

廖大Python教程
Python 中的函数式编程

相关文章

  • 高阶python 函数式编程

    高阶python 函数式编程 - 函数式 函数式编程(FunctionalProgramming) - 基于lam...

  • Python函数式编程

    虽然 Python 不是函数式编程语言(是命令式编程语言),但是支持许多有价值的函数式编程工具。Python 提供...

  • Python函数式编程指南

    注:采转归档,自己学习查询使用 Python函数式编程指南(1):概述Python函数式编程指南(2):函数Pyt...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

  • Python高阶函数

    本篇将介绍Python的函数式编程,介绍高阶函数的原理,更多内容请参考:Python学习指南 函数式编程 函数是P...

  • Python进阶笔记

    文|Seraph 函数式编程 1 纯函数式编程:不需要变量、没有副作用、测试简单2 Python不是纯函数式编程(...

  • python函数式编程

    函数式编程指引 — Python 3.7.3 文档

  • Python 中的函数式编程 - PyTips 0x02

    项目地址:https://git.io/pytips Python 中的函数式编程 函数式编程(英语:functi...

  • python必知必会7

    Python 支持函数式编程吗? 近些年来,由于函数式编程易于调试和测试的优点,函数式编程越来越受到关注。虽然 P...

  • 向量化

    python向量化本身做得不是很好需要借助函数式编程或者列表推导式实现 1 列表推导式 2 函数式编程

网友评论

      本文标题:python函数式编程

      本文链接:https://www.haomeiwen.com/subject/ttmojxtx.html