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

函数式编程

深拷贝

>>>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
...
1
2
3
4
5


 

注意:生成器函数已经有默认的返回值——生成器了,你不能再另外给一个返回值;对,即使是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值