解释:在传入函数的地方直接使用函数表达式。
示例:
list(map(lambdas x:x*x,[1,2,3,4,5]))
lambdas x是指lambdas关键字和使用的变量,冒号后为函数的表达式。
注:逗号及后边的列表是map函数,lambdas x:x*x 为map函数中function函数部分。
map和filter函数解释:map是对每一元素做自定义的映射,filter是对序列每个元素进行过滤。
示例:
print(list(filter(lambdas x:x % 2 == 1,range(1,20))))
输出结果:[1,3,5,7,9,11,13,15,17,19]
print(list(map(lambdas x:x % 2 == 1,range(1,20))))
输出结果:[True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True]
迭代器解释:迭代器是一个可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束,两个基本方法:iter()和next()
示例:
list=[1,2,3,4] it = iter(list) # 创建迭代器对象 print (next(it)) # 输出迭代器的下一个元素
多次执行 print (next(it)) 会依次输出 it 里的元素,当迭代输出完成时,抛出StopIteration异常。
生成器使用了yield的函数被称为生成器,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解,生成器就是一个迭代器,在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行,调用一个生成器函数,返回的是一个迭代器对象。
yield生成器函数中一个重要的函数是send(),可以传入一个值作为返回值,此函数已包含next()函数。
生成器的有点:节省内存空间。
示例:
# 包含yield关键字,就变成了生成器函数
def foo():
print('Starting.....')
while True:
res = yield 4
print("res:", res)
# 下面调用函数并没有执行,可以先将后面的语句注释掉
# 逐行运行代码观察效果
g = foo()
print("第一次调用执行结果:")
print(next(g))
print("*" * 100)
print("第二次调用执行结果(传入参数):")
print(g.send(7))
print("*" * 100)
print("第三次调用执行结果:")
print(next(g))
print("*" * 100)
输出结果:
第一次调用执行结果:
Starting.....
4
****************************************************************************************************
第二次调用执行结果(传入参数):
res: 7
4
****************************************************************************************************
第三次调用执行结果:
res: None
4
****************************************************************************************************
注:输出4是因为函数运行遇到yield会输出yield的值并暂停,当遇到next()函数式才执行之后的操作。
解释:装饰器是修改其它函数功能的函数,装饰器可以在不改变原有功能代码的基础上添加额外的功能,如用户验证、日志输出等。
示例:
def debug(func):
def wrapper(abc):
print('debug:enter')
return func(abc)
return wrapper
@debug
def say(abc):
print ("hello {}!")
say('hello world')
输出结果:
debug:enter
hello {}!
解释:函数调用函数本身。
示例:
def recursion(i): #定义函数
print(i)
if i/2 > 1: #判断递归条件,退出
re = recursion(i/2) #递归函数自身
print('返回值:',re)
return i
print('上层递归值:',i)
return i #返回值
recursion(10)
输出结果:
10
5.0
2.5
1.25
上层递归值: 1.25
返回值: 1.25
返回值: 2.5
返回值: 5.0
集合(set)是一个无序的不重复元素序列,可以使用大括号{}或者set()函数创建集合,空集合创建必须使用set(),{}创建的是空字典。
使用in来判断一个元素是否属于集合,
示例:
'abc' in set_a
判断字符串abc是否属于集合set_a,结果返回True或False。
集合间的运算:
a - b # 集合a包含但集合b不包含的元素 a | b # 集合a或集合b包含的元素 a & b # 集合a和集合b都包含的元素 a ^ b # 不同时存在于集合a和集合b的元素
集合推导式:
a = { x for x in 'abcdefgabs' if x not in 'abc' }
输出:{'d', 'g', 's', 'f', 'e'}
添加元素:
a.add() # 把括号中的元素当成一个整体添加到集合中 a.update() # 把每一个字符作为一个单独的元素添加到集合中
移除元素:
a.remove() # 删除单个元素,删除首个符合条件的元素,按值删除 a.discard() # 同remove(),但没有对应元素不会报错 a.pop() # 删除单个或多个元素,按位删除(根据索引删除)
计算元素个数:
len(a)
清空集合:
a.clear()内建模块itertools
这个模块里的函数都与迭代有关。
无穷迭代器:
itertools.count(start[,step]) # 从start开始以step为步长的无限序列
itertools.cycle('ab') # 一直循环a和b
itertools.repeat(elem[,n]) # 循环n次elem
根据列长度停止的迭代器:
itertools.accumulate(iterable[,func]) # 返回func功能后的iterable结果 itertools.chain(*iterable) # 返回多个可迭代对象的所有元素



