Python函数之lambda,内置函数,yield生成器等

时间:2021-08-01 06:58:21

lambda

1,用于处理简单逻辑

2,自动返回数据(return)

单参数

>>> func2 = lambda a: a+1
>>> result = func2(1000)
>>> print result
1001

多参数

>>> func3 = lambda a,b: a+b
>>> result = func3(1000,888)
>>> result
1888

map

我们先看map。map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

>>> def f(x):
... return x*x
...
>>> map(f,[1,2,3])
[1, 4, 9]

也可以传递两个列表

>>> l1
[11, 22, 33]
>>> l2
[11, 22, 33]

>>> def func2(a1,a2):
... return a1 + a2
...
>>> map (func2,l1,l2)
[22, 44, 66]

filter

map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

>>> def is_odd(n):
... return n % 2 == 1
...
>>> filter(is_odd,[1,2,4,5,6,9,10,15])
[1, 5, 9, 15]

reduce

对于序列内的所有元素进行累计操作

>>> li = [11,22,33]
>>> result = reduce(lambda arg1,arg2:arg1 + arg2,li)
>>> print result
66

yield

用来记住上一次操作,下次再执行时继续执行

函数内,ruturen,函数执行完毕 把return换成yield

vim day4-6.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
def func1():
return 1
print func1()

执行返回为1

修改代码

#!/usr/bin/python
# -*- coding:utf-8 -*-
def func1():
yield 1
yield 2
yield 4
print func1()

  返回为

<generator object func1 at 0x7fc4b1ab0780>

修改代码

#!/usr/bin/python
# -*- coding:utf-8 -*-
def func1():
yield 1
yield 2
yield 4
for i in func1():
print i

  返回为1 2 4

使用了迭代返回

使用yield模拟xrange功能

vim day4-7.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
def mrange(arg):
seed = 0
while seed <= arg-1:
seed = seed + 1
yield seed - 1 for i in mrange(10):
print i

reduce的基数概念

li=[1,2,3,4,5,6,7,8,9,10]
>>> result = reduce(lambda arg1,arg2:arg1 + arg2,li )
>>> print result
55
>>> result = reduce(lambda arg1,arg2:arg1 + arg2,li,1000 )
>>> print result
1055

小结

map 所有元素操作

filter 过滤,获取指定元素计划

reduce累积

装饰器

装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或者类,使用装饰器可以在函数执行前执行后添加相应操作