首页 > 编程语言 >python系列教程212

python系列教程212

时间:2023-08-12 17:00:47浏览次数:40  
标签:... 教程 212 python res functools reduce lambda

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

函数式编程的意思就是对序列应用一些函数。例如,下面这个filter的调用实现了从一个序列中挑选出大于0的元素。

>>>list(range(-5,5))                                # An iterator in 3.0

[-5,-4,-3,-2,-1,0,1,2,3,4]

>>>list(filter((lambda x: x > 0),range(-5,5)))     # An iterator in 3.0

[1,2,3,4]

这个函数也能够用一个for循环来等效实现,但是它也是内置的函数,所以运行比for循环要快。

>>>res = []

>>> for x in range(-5,5):

...     if x > 0:

...        res.append(x)

...

>>>res

[1,2,3,4]

reduce在Python 2.6中只是一个简单的内置函数,但是在Python 3.0中则位于functools模块中,要更复杂一些。这里是两个reduce调用,计算了在一个列表中所有元素加起来的和以及乘起来的乘积。

>>>from functools import reduce                    # Import in 3.0,not in 2.6




>>>reduce((lambda x,y: x + y),[1,2,3,4])

10

>>>reduce((lambda x,y: x * y),[1,2,3,4])

24

下面是一个对第一个调用的for循环的等效实现。

>>>L = [1,2,3,4]

>>>res = L[0]

>>>for x in L[1:]:

...    res = res + x

...

>>>res

10

编写自己的reduce版本实际上相当简单:

>>>def myreduce(function,sequence):

...    tally = sequence[0]

...    for next in sequence[1:]:

...        tally = function(tally,next)

...    return tally

...

>>>myreduce((lambda x,y: x + y),[1,2,3,4,5])

15

>>>myreduce((lambda x,y: x * y),[1,2,3,4,5])

120

内置的operator模块提供了一些函数,它们使用起来是很方便的(要了解关于这一模块的更多内容,请参阅Python的库手册)。

>>>import operator,functools

>>>functools.reduce(operator.add,[2,4,6])  # Function-based +

12

>>>functools.reduce((lambda x,y: x + y),[2,4,6])

12

标签:...,教程,212,python,res,functools,reduce,lambda
From: https://blog.51cto.com/captainbed/7060201

相关文章

  • Python 对象拷贝的详细教程
    在本篇文章中,会先介绍Python中对象的基础概念,之后会提到对象的深浅拷贝以及区别。在阅读后,应该掌握如下的内容:理解变量、引用和对象的关系理解Python对象中identity,type和value的概念什么是mutable和immutable对象?以及它们和hashable的关系深浅拷贝的......
  • python argparse传入布尔参数不生效的解决方法
    在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如"--flagTrue"或者"--flagFalse"。但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。参考代码:importargparsedeftest_bool():parser=......
  • Python模块学习:subprocess模块详解
    一.subprocess模块subprocess是Python2.4中新增的一个模块,它允许你生成新的进程,连接到它们的input/output/error管道,并获取它们的返回(状态)码。这个模块的目的在于替换几个旧的模块和方法,如:os.systemos.spawn*1.subprocess模块中的常用函数函数描述subprocess.ru......
  • 传奇架设教程分享传奇私服商铺设置增加修改物品方法
    近期很多客户经常问到如何增加修改传奇商铺内的商品,今天我以3km2引擎为例给大家讲解一下传奇私服商铺怎么设置.传奇私服商铺的设置文件通常在D:\Mirserver\Mir200\BuyItemList.txt下面是一个商铺文件的一部分.懂一些简单脚本的玩家都应该知道怎么修改了吧.根据对应的数字可以修改......
  • 无涯教程-Perl - ord函数
    描述此函数返回EXPR指定的字符的ASCII数值,如果省略则返回$_。例如,ord('A')返回值为65。语法以下是此函数的简单语法-ordEXPRord返回值该函数返回整数。例以下是显示其基本用法的示例代码-#!/usr/bin/perl-wprint("ord()",ord('G'),"\n");执行上述代码后......
  • python复习笔记
    文件操作w=open("c://....","r"或"w"或"a",encoding='utf-8')#字符串后跟b表示二进制文件w.readlines()#读出所有行存入listw.readline()#读出一行,若读完了返回""w.read()#读出所有字符构成字符串w.write("abab")#写入w.close()#关闭impo......
  • C C++ Java python HTML/CSS/JavaScript
    C/C++是一种底层的语言,它可以直接操作内存和硬件,运行速度很快,但是也很难学习和调试,容易出错。Java是一种面向对象的语言,它可以跨平台运行,有很多成熟的框架和库,适合做大型的企业级应用,但是也很繁琐和冗长,需要写很多代码。Python是一种高级的语言,它可以用简洁的语法来实现复杂的功能......
  • centos7安装python3.9
    Centos默认安装的是python2.7版本,需要使用python3,安装过程记录如下:查看系统python2的位置:whereispython安装编译python3的相关系统依赖包yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develzlibgccmake安装pip......
  • 无涯教程-Perl - my函数
    描述此函数声明LIST中的变量在包围式块内按词法范围。如果指定了多个变量,则所有变量都必须用括号括起来。语法以下是此函数的简单语法-myLIST返回值此函数不返回任何值。例以下是显示其基本用法的示例代码-#!/usr/bin/perl-wmy$string="Wearetheworld";p......
  • Autodesk Maya 2017三维动画软件下载和安装教程
    AutodeskMaya是Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等。Maya功能完善,工作灵活,易学易用,制作效率极高,渲染真实感极强,是电影级别的高端制作软件。软件介绍加入了漫游工具(WalkTool)。使用快捷键Alt+X开启这个模式后,按住鼠标左右键,然后......