day24# 列表生成式,列表大的话占内存 l = ["agg%s" % i for i in range(20)] print(l) # 生成器表达式,迭代器省内存
day24往一个列表里装入100个鸡蛋# 传统方式 eggs_list = [] for i in range(100): eggs_list.append("egg%s&qu
day24面向过程的编程思想:流水线式的编程思想,在设计程序时,需要把整个流程设计出来优点:1. 体系结构更加清晰2. 简化程序的复杂度缺点:·1. 可扩展性极其的差,所以说面向过程的应用场景是:不需要经常变化的软件例子:需求:实现如linux中 grep -rl "python"
day23生成器就是一个函数,这个函数内包含有yield这个关键字。生成器与return有何区别?return 只能返回一次函数就彻底结束了,而yieId能返回多次。yield到底干了什么事情:yield把函数变成迭代器。总结yield的功能:相当于把__next__ 和 __next__ 方法封装
day23判断是否是可迭代的:只要对象本身有__iter__方法,那他就是可迭代的对象d = {"a": 1, "b": 2, "c": 3}d.__iter__() # 有这个方法就表示是可迭代对象 ,等同于 iter(d)i
day22为什么要用装饰器及开放封闭原则什么是装饰器装饰着:可调用对象-是函数被装饰着:可调用对象-也是函数分为 无参装饰器 和 有参装饰器例子:如下函数:import time def index(): time.slee
day21闭包:在内嵌函数中,首先必须是内部定义的函数,该函数包含对外部作用域而不是全局作用域名字的引用如下例子:x = 100 # 全局作用域名字 def f1(): x =
day21def foo(): print("foo") print(foo) # 打印出对象地址 # 函数可以被赋值 f = fo
day21名称空间与作用域名称空间可分为3种:内置名称空间:像print,max,len,import这样内置在解释器中的的,在python启动时便已加载,可随处调用全局名称空间:针对于当前文件而言,可在当前文件随处调用局部名称空间:针对于函数内部而言,可在函数内部调用,函数外调用不到作用域可分为2
day20为什么要用函数: 解决代码重用问题 统一维护 程序的组织结构清晰,可读性强不用函数: 代码冗余