首页 > 简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他...

简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他...

函数式编程

Lambda

exec,eval和assert语句,repr函数

 


lambda语句

用来创建简短的单行匿名函数

print_assign = lambda name, value: name + '=' + str(value)

等同于

def print_assign(name, value):
    return name + '=' + str(value)
 

lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。注意,即便是print语句也不能用在lambda形式中,只能使用表达式。

>>> ftwice = lambda s:s*2 

>>> ftwice(2) 

4

再如make_repeater函数在运行时创建新的函数对象,并且返回它。

image

image

yield表达式

类似于迭代器,生成器允许处理数据序列

不同的是生成器通过使用yi e l d表达式,可以尽量减少程序耗费的内存,同时还能在大规模数据集上提供类似迭代器的功能

map()函数
从iterA,iterB...中取出对应元素应用map


map(f, iterA, iterB, ...)



built-in functions often used with iterators.



returns a list containing f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], iterB[2]), ....

map(f, iterable)基本上等于[f(x) for in iterable]

但在多元的情况下不同:



>>> list1 = [11,22,33]

>>> list2 = [44,55,66]

>>> list3 = [77,88,99]

map()只做了列内运算

>>> def abc(a, b, c):

... return a*10000 + b*100 + c

... 

>>> map(abc,list1,list2,list3)

[114477, 225588, 336699]

列表解析做的是笛卡尔乘积

>>> [abc(a,b,c) for a in list1 for b in list2 for c in list3]

[114477, 114488, 114499, 115577, 115588, 115599, 116677, 116688, 116699, 224477, 224488, 224499, 225577, 225588, 225599, 226677, 226688, 226699, 334477, 334488, 334499, 335577, 335588, 335599, 336677, 336688, 336699]

等同于

result = []

for a in list1:

  for b in list2:

    for c in list3:

      result.append(abc(abc))

filter()函数

(可以被列表解析替代)



从iter中选择满足predicate条件的元素

filter(predicate, iter) 
returns a list that contains all the sequence elements that meet a certain condition
形式非常简洁 

existing_files = filter(os.path.exists, file_list)
 
reduce()函数
对iter中每个元素依次两两使用func
reduce(func, iter, [initial_value])



func must be a function that takes two elements and returns a single value. 



先算init=func(initial_value,A)再算func(init,B)再算func(func(init, B), C)...







sorted()函数
sorted(iterable, [cmp=None], [key=None], [reverse=False]) 

参考 http://wiki.python.org/moin/HowTo/Sorting
any()和all()函数
any() returns True if any element in the iterable is a true value 



all() returns True if all of the elements are true values

>>> any([1,1,1]) True >>> all([0,1,0]) False
Generator expressions
和list comprehensions的语法稍有不同
( expression for expr1 in sequence1if condition1...for exprN in sequenceNif conditionN)

Output: the successive values of expression

obj_total sum(obj.count for obj in list_all_objects())

Generators
functions that simplify the task of writing iterators, which



functools.partial()


partial function application
  
  
exec语句用来执行储存在字符串或文件中的Python语句。 

例如,可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。

>>> exec 'print "Hello World"' 

Hello World

eval语句用来计算存储在字符串中的有效Python表达式。 

>>> eval('2*3') 

6

assert语句用来声明某个条件是真的。 

当assert语句失败的时候,会引发一个AssertionError。 

image
repr函数用来取得对象的规范字符串表示。 

反引号(也称转换符)可以完成相同的功能。 

注意,在大多数时候有eval(repr(object)) == object。 

>>> i = ['item'] 

>>> `i` 

"['item']" 

>>> repr(i) 

"['item']"

函数修饰符通过介入函数的启动和关闭机制,调整一个已存在函数的行为

 

类的特殊方法


__init__(self,...)  

在新建对象恰好要被返回使用之前被调用。

__del__(self)   

恰好在对象要被删除之前调用。

__str__(self)  

对对象使用print语句或是使用str()的时候调用。

__lt__(self,other) 

当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。

__getitem__(self,key)   

使用x[key]索引操作符的时候调用。

__len__(self)

对序列对象使用内建的len()函数的时候调用。

 

测试


 对于规模更大的程序,测试框架必不可少。

在标准库中,unittest模块基于流行的xunit测试框架。doctest允许从shell会话取得输入。

 

 

参考:

Python中map()函数浅析 

http://docs.python.org/2/howto/functional.html

Python特殊语法:filter、map、reduce、lambda、yield

http://www.dataguru.cn/blog-10716-1133.html

http://jgy3.ggclk.com/url?url=http%3A%2F%2Fmikecvet.wordpress.com%2F2010%2F07%2F02%2Fparallel-mapreduce-in-python%2F&v=4&i=6&q=map%20python%20lambda%20%20yield%20reduce%20filter&p=0&tr=0&at=0&ar=0&ab=0&mr=0&ir=0&kgr=0&nr=0&iar=0&sr=0

 

from: http://www.cnblogs.com/wei-li/p/3439182.html

转载于:https://www.cnblogs.com/GarfieldEr007/p/5280782.html

更多相关:

  • 草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...

  • 前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...

  • 1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态。1.1.2函数的作用函数是组织好的,可重复使用的,用来...

  • 原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...

  • 在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...

  • 练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式------------ info of Egon -----------Name  : EgonAge   : 22Sex   : maleJob   : Teacher ------------- end -----------------完成情况:in_name=inpu...

  •   语法 它通过{}和:来代替%。 “映射”示例 通过位置 In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.format('kzc',18) Out[2]: 'kzc,18' In [3]: '{1},{0},{1}'.forma...

  • --------------------------------------------------------------------------------------- 本系列文章为《机器学习实战》学习笔记,内容整理自书本,网络以及自己的理解,如有错误欢迎指正。 源码在Python3.5上测试均通过,代码及数据 --> http...

  • 首先运行easy_install pymongo命令安装pymongo驱动。然后执行操作: 创建连接 1 In [1]: import pymongo 2 3 In [2]: connection = pymongo.Connection('localhost', 27017) 切换到数据库malware In [3]: db...

  • 代码: public class Person{public int ID { get; set; }public string Name { get; set; }public int Age { get; set; } }public class Dog{public int ID { get; set; }...

  • 零(将字符串转化成数字的函数)       int num = atoi(arr);      该函数具有把字符串转化成整型数的作用。 壹(vim显示行号)       Linux终端下直接输入vim   ~/.vimrc,打开是一个空白的页面,然后进入插入模式,直接输入set nu,然后保存并退出,以      后每次  ...

  • windows下 Source Monitor代码度量工具的使用 引用链接: https://www.cnblogs.com/xuehanyu/p/4520965.html 1.总体介绍 SourceMonitor是一款免费的软件,运行在Windows平台下。它可对多种语言写就的代码进行度量,包括C、C++、C#、Java、V...

  •   python基础知识(二)   (二)常用控制流 1、控制语句 分支语句:起到一个分支分流的作用,类似马路上的红绿灯 循环语句:for while 可以使代码不断重复的执行   2、判断语句:关键字是if..elif..else  a、if条件语句后面可以接比较运算、逻辑运算、成员运算;当if后面的语句满足条件,允许的结果是Tru...

  • 1.Python : 是一门解释型 弱类型 高级开发编程语言. 2.第一个Python程序的编写: print ("hell,world") 3.变量:把程序运行过程中的值储存起来,方便后面的程序调用. 4.变量的命名要求: 1,只能是数字或字母或下划线组成; 2,不能是数字开头,也不能全是数字; 3,不能是Python的关键字; 4...

  • 一 程序的三种基本结构              顺序结构:程序从上往下依次执行,这个叫顺序结构         分支结构:有选择的执行或者不执行某段代码         循环结构:重复的执行某段代码 二 分支结构之if 最简单的俩种用法   (tips: if语句后面的大括号可以省略:如果省略:那么这个if语句只能管理离它最近的那...