`
javatome
  • 浏览: 856524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

第11章 函数和函数式编程(4)

 
阅读更多

11.6.2 关键字变量参数(字典)

关键字变量参数应该为函数定义的最后一个参数,带**。

关键字和非关键字可变长参数都有可能用在同一个函数中,只要关键字字典是最后一个参数并且非关键字元组先于它之前出现。

>>> def newfoo(arg1, arg2, *nkw, **kw):
...print "Firsr arg: ", arg1
...print "Second arg: ", arg2
...print "No keyword args: "
...for arg in nkw:
...print " ", arg
...print "keyword args: "
...for arg_key in kw.keys():
...print " ", kw[arg_key]
...
>>> newfoo(11, 22, 33, '44', '55', a='a', b='b', c=88 )
Firsr arg: 11
Second arg: 22
No keyword args:
33
44
55
keyword args:
a
88
b
>>>

11.6.3 调用带有可变长参数对象函数

>>> newfoo(1, 2, 3, a = 4, *(5, 6, 7), **{'b':8, 'c':9, 'd':10})
Firsr arg: 1
Second arg: 2
No keyword args:
3
5
6
7
keyword args:
4
9
8
10
>>>

注意我们的元组和字典参数仅仅是被调用函数中最终接收的元组和字典的子集。额外的非关键字值‘3’以及‘x’和‘y’关键字对也被包含在最终的参数列表中,而它们不是‘*'和'**'的可变参数中的元素。

11.7 函数式编程

11.7.1 匿名函数与lambda

lambda [arg1 [,arg2 ... argN]] : expression

python允许用lambda关键字创建匿名函数,匿名是因为不需要以标准的方式来声明。

这个表达式的定义体必须和声明放在同一行。

参数是可选的,如果使用参数的话,参数通常也是表达式的一部分。

默认以及可变参数也是允许的。

>>> a = lambda x, y=2: x*y
>>> a(2)
4
>>> a(2, 3)
6

>>> b = lambda *z: z

>>> b(1,2,3)
(1, 2, 3)
>>>

11.7.2 内建函数 apply()、filter()、map()、reduce()

1. apply() 已经淘汰

2. filter()给定一个对象的序列和一个过滤函数,每个序列元素都通过这个过滤器进行筛选,保留函数返回为真的对象。filter函数为已知的序列的每个元素调用给定布尔函数。每个filter返回的非零值元素添加到一个列表中。返回的对象是一个从原始队列中“过滤后”的队列。

>>> from random import randint
>>> def odd(n):
... return n % 2
...
>>> filter(odd, range(10))
[1, 3, 5, 7, 9]
>>>

3. map()

map()将函数调用“映射”到每个序列的元素上,并返回一个含有所有返回值的列表。

可以使用带多个序列的map()

>>> map(lambda x, y: x+y, (1, 2, 3), (4, 5, 6))
[5, 7, 9]
>>>

可以使用map()和一个为None的函数对象来将不相关的序列归并在一起。这种思想在一个新的内建函数zip被加进来之前的python2.0是很普遍的。

>>> map(None, (1, 2, 3), (4, 5, 6))
[(1, 4), (2, 5), (3, 6)]
>>> zip((1, 2, 3), (4, 5, 6))
[(1, 4), (2, 5), (3, 6)]
>>>

4. reduce()

reduce()使用了一个二元函数(一个接收带两个值作为输入,进行了一些计算然后返回一个值作为输出),一个序列,和一个可选的初始化器,卓有成效地将那个列表的内容“减少”为一个单一的值,如同它的名字一样。

reduce()通过取出序列的头两个元素,将他们传入二元函数来获得一个单一的值来实现。然后又用这个值和序列的下一个元素来获得又一个值,然后继续直到整个序列的内容都遍历完毕以及最后的值会被计算出来为止。

如果给定初始化器,那么一开始的迭代会用初始化器和一个序列的元素来进行,接着和正常的一样进行。

>>> print "the total is ", reduce(lambda x, y:x+y, range(1,100), 0)
the total is 4950
>>>

分享到:
评论

相关推荐

    《python核心编程》第十一章:函数和函数式编程1

    《Python核心编程》第十一章深入探讨了函数和函数式编程的概念,这在第二章的基础之上进行了扩展。在Python中,函数不仅仅是一个简单的代码块,它们具有丰富的特性和功能,如多样的调用方式、参数类型和函数式编程...

    一本关于JavaScript中函数式编程的书

    JavaScript中的函数式编程是一种强大的编程范式,它源自数学中的函数理论,强调将计算视为函数的求值,而不是状态的变化或指令的序列。在JavaScript中,函数式编程可以帮助我们写出更简洁、可读性强且易于测试的代码...

    Swift 函数式编程高清正版

    Swift函数式编程是一种将函数作为一等公民的编程范式,它强调程序的数据流和变换,而不是对状态和可变数据的操作。在Swift中,函数式编程的思想与面向对象编程和命令式编程相结合,提供了丰富的工具和概念来帮助...

    现代C++函数编程模式

    现代C++函数编程模式是C++11及后续版本引入的一种增强编程范式的特性,它使得C++在传统的面向对象编程之外,增加了函数式编程的能力。这种编程风格强调使用不可变数据、高阶函数和惰性计算,尤其适用于处理多线程...

    JavaScript函数式编程1

    在JavaScript中,由于其动态类型和第一类函数特性,使得函数式编程成为可能。下面将详细介绍一些核心的函数式编程概念和在JavaScript中的应用。 1. **第一类函数**:在JavaScript中,函数是一种值,可以被赋给变量...

    函数式编程.md

    函数式编程是一种编程范式,强调使用函数来构建软件。它将计算视为数学函数的评估,并避免改变状态和可变数据。下面将详细阐述文件内容中提到的函数式编程的核心概念: ### 函数概念 在编程中,函数是一组定义如何...

    第三周-第11章节-Python3.5-函数与函数式编程1.avi

    第三周-第11章节-Python3.5-函数与函数式编程1.avi

    Scala编程详解 第16讲-Scala编程详解:函数式编程 共14页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第17讲-Scala编程详解:函数式编程之集合操作 共9页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Python核心编程(第二版)PDF高清 part1 共2部分

    第11章 函数和函数式编程 第12章 模块 第13章 面向对象编程 第14章 执行环境 第2部分 高级主题 第15章 正则表达式 第16章 网络编程 第17章 网络客户端编程 第18章 多线程编程 第19章 图形用户界面编程 第...

    scala编程中文pdf

    第9章函数式编程214 第10 章集合242 第11 章列表、数组、映射、集及其他315 第12 章文件和进程367 第13 章Actors 和并发401 第14 章命令行任务440 第15 章Web 服务.475 第16 章数据库和持久化510 第17 章与Java 交互...

    delphi函数参考大全第11章

    - 接口是一种引用类型,定义一组方法签名,用于实现多继承和契约式编程。 以上就是Delphi函数参考大全第11章涵盖的主要内容,这些知识点构成了Delphi编程中的重要部分,理解和掌握它们将极大地提升开发者在Delphi...

    Python核心编程 第二版

    第11章 函数和函数式编程 第12章 模块 第13章 面向对象编程 第14章 执行环境 第2部分 高级主题 第15章 正则表达式 15.1 引言/动机 15.2 正则表达式使用的特殊符号和字符 15.2.1 用管道符号(|)匹配多个...

    Scala编程详解 第7讲-Scala编程详解:函数入门之变长参数 共4页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第5讲-Scala编程详解:函数入门 共5页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    Scala编程详解 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页.pptx

    共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...

    《Python编程从入门到实践(第2版)》第1章到第11章练习题答案,简洁,简单

    7. 函数式编程:Python支持高阶函数、闭包和匿名函数(lambda表达式),这使得Python可以进行函数式编程,提高代码的简洁性和可读性。 8.面向对象编程:Python支持类和对象的概念,通过封装、继承和多态实现面向...

    编程思想14章构造函数的初始化表达式

    在C++编程中,构造函数是一种特殊的成员函数,它的主要任务是初始化类的对象。构造函数的初始化表达式是创建对象时执行的关键步骤,用于设置新对象的状态。在第14章“构造函数的初始化表达式”中,我们将深入探讨这...

    UNIX网络编程 卷1:套接字联网API

    第11章 名字与地址转换 第三部分 高级套接字编程 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级服务器 第14章 高级I/O函数 第15章 Unix域协议 第16章 非阻塞式I/O 第17章 ioctl操作 第18...

Global site tag (gtag.js) - Google Analytics