基础部分收尾
交换变量的值
a,b =1,2
a,b =b,a
print(a) #2
print(b) #1
匿名函数
匿名函数 lambda表达式
#lambda函数表达式是用来创建一些简单的函数,它是函数创建的另外一种方式
#filter() 可以从序列中过滤符合条件的元素,保存到一个新的序列当中
#参数:1、函数,根据该函数来过滤序列(可迭代结构)
2、需要过滤的序列(可迭代结构)
#返回值 过滤后新的序列
匿名函数只调用一次,没有名字,用完后会从内存消失
#map()函数可以对可迭代对象中所有元素做指定的操作,然后将其添加到一个新的对象中返回
推导式
列表推导式:
list = [ x * x for x in range(1,10)]
dic = {'k1':'v1', 'k2':'v2'}
for k,v in dic.items():
print(k)
list = [k+':'+v for k,v in dic.items()]
print(lis4)
字典推导式:
dic = { i : i**3 for i in range(5)}
集合推导式:
s = { i for in 'abasrdfsdfa' if i not in 'abc' }
面试真题:
result = [lambda x: x+i for i in range(10)]
print(result[0][10]) # 19
迭代器
迭代:通过for循环遍历对象的每一个元素的过程。
迭代器是一种可以被遍历的对象,并且能作用于next()函数。迭代器对象从集合的 第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往后遍历不能 回溯,不像列表,你随时可以取后面的数据,也可以返回头取前面的数据。迭代 器通常要实现两个基本的方法:iter() 和 next()。
迭代和迭代器的区别:
1)凡是可作用于for循环的对象都是可迭代类型。
2)凡是可作用于next()函数的对象都是迭代器类型。
3)list、dict、str等是可迭代的但不是迭代器,因为next()函数无法调用它们。可以 通过iter()函数将它们转换成迭代器。
4)Python的for循环本质上就是通过不断调用next()函数实现的。
生成器
有时候,序列或集合内的元素的个数非常巨大,如果全制造出来并放入内存,对 计算机的压力是非常大的。比如,假设需要获取一个10**20次方如此巨大的数据 序列,把每一个数都生成出来,并放在一个内存的列表内,这是粗暴的方式,有 如此大的内存么?如果元素可以按照某种算法推算出来,需要就计算到哪个,就 可以在循环的过程中不断推算出后续的元素,而不必创建完整的元素集合,从而 节省大量的空间。在Python中,这种一边循环一边计算出元素的机制,称为生成 器:generator。
yield关键字:
def createNums():
print("----func start------")
a,b = 0,1
for i in range(5):
# print(b)
print("--1--")
yield b
print("--2--")
a,b = b,a+b
print("--3--")
print("----func end------")
g = createNums()
print(next(g))
print(next(g))
print(next(g))
# print(g.__next__())
闭包
通过闭包可以创建一些只有当前函数才能访问的对象,还可以将一些私有的数据藏到闭包中
def test(number):
print("--1--")
def test_in(number_in): # 1.内部函数
print(number_in)
print("--2--")
return number_in + number # 2.外部环境的变量引用
print("--3--")
return test_in #3.内部函数test_in返回
res = test(20) # res = test_in
res(25)
形成闭包的条件:
1、函数嵌套
2、将内部函数作为返回值返回
3、内部函数必须使用到外部函数的变量
装饰器
由于我们在开发中要遵守封闭开放原则(要求对程序的扩展,但是要关闭对程序的修改),所以python开发者开始使用装饰器,装饰器也就是说在不改变源代码的情况下为函数添加新的功能。并且使用@符号,@符号为语法糖
装饰器在函数被调用前,就已经在装饰了
import time
def calcu_time(func):
def test_in():
start = time.time()
func()
end = time.time()
print("spend {}".format(end - start))
return test_in
@calcu_time
def test1():
print("---test1---")
time.sleep(2)
test1()