Python学习之路【Day7】

基础部分收尾

交换变量的值

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() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值