我的Python3学习笔记(2):python函数式编程

来源:互联网 发布:知屋金融官网 编辑:程序博客网 时间:2024/06/05 07:39

函数式编程

深拷贝

>>>from copy import deepcopy>>>d = {}>>>d['names'] = ['Alfred', 'Bertrand']>>>c = d.copy()>>>dc = deepcopy(d)>>>d['names'].append('Clive')>>>c{'names':['Alfred', 'Bertrand', 'Clive']}>>>dc{'names': ['Alfred','Bertrand']}


简单函数定义

deffibs(num):       result = [0, 1]       for i in range(num-2):              result.append(result[-2] +result[-1])              return result

文档字符串

在函数的定义def后面使用''来定义一个文档字符串,这样可以在存续中访问。

定义:

defsquare(x):              'Calculates the square of thenumber x.'              return x*x

 

使用:

square.__doc__

或者使用help函数。

help(square)

多参数

多参数的时候可以传递0个或则多个值给函数。

元组

defprint_params_2(title, *params):       print title       print params

 

使用

>>>print_params_2('Params:', 1, 2, 3)

Params:

(1,2, 3)

可以看到就不用其他的数据结构才能传递参数了。

字典

defprint_params_4(x, y, z=3, *pospar, **keypar):       print x, y, z       print pospar       print keypar

 

使用

>>>print_params_4(1, 2, 3, 5, 6, 7, foo=1, bar=2)

1 23

(5,6, 7)

{'foo':1, 'bar': 2}

参数反转

使用*和**可以把多个参数打包成一个数据结构;如果把这个符号作用于字典和元组的时候也可以得到相反的效果。

1,反转一个元组可以用来传递参数。

defadd(x, y): return x + y

>>>add(*params)

3

2,反转一个字典也可以用来给一噶函数传递参数,只是字典的键会自动变成函数的参数名。也就是不起作用。

生成器

一个生成器就是一个特殊的函数,每次调用它都会放回下一个数字。事实上生成器表现的想一个迭代器,只不过这儿的迭代器的对象是一个函数。

 

例如:

nested= [[1, 2], [3, 4], [5]]defflatten(nested):       for sublist in nested:              for element in sublist:                     yield element>>>nested = [[1, 2], [3, 4], [5]]>>>for num in flatten(nested):printnum...12345


 

注意:生成器函数已经有默认的返回值——生成器了,你不能再另外给一个返回值;对,即使是return None也不行。但是它可以使用空的return语句结束。

函数式编程特性

关键字参数

在参数传递的时候可以使用函数定义时的参数名。

defhello_1(greeting, name):print'%s, %s!' % (greeting, name) 这时候参数的顺序就不成问题了。>>>hello_1(greeting='Hello', name='world')Hello,world!另一个:>>>hello_1(name='world', greeting='Hello')Hello, world!


默认参数

闭包

Python中可以在函数中声明另外一个函数并且返回,这个比起Ruby来说更加自然一点。因为在Ruby中必须用匿名函数来实现这个特性。

defmultiplier(factor):       def multiplyByFactor(number):              return number*factor       return multiplyByFactor