python生成器,闭包
2022/6/28 1:20:42
本文主要是介绍python生成器,闭包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
==========================
动态语言 python 程序执行的过程,可以添加属性和方法 静态语言 Java 只能执行已经定义好的代码,如果没用提前定义,则不能执行
class Person: def __init__(self,name): self.name = name xiaoming = Person('小明') print(xiaoming.name) # 执行过程中,添加属性 xiaoming.age = 18 print(xiaoming.age)
============================
__slots__ 可以限制当前类中能够添加哪些实例属性
class Person: __slots__ = ('name','age','sex') xiaoming = Person() xiaoming.name = '小明' xiaoming.age = 18 xiaoming.sex = '男' print(xiaoming.name) print(xiaoming.age) print(xiaoming.sex) # 无法添加没用定义的属性 # xiaoming,addr = '长沙' # print(xiaoming.addr) =====================
生成器:存储数据生成的方式,等需要用到的时候执行,用一次执行一次 next 打印需要next (取值) # list1 = [i for i in range(1,11)] # print(list1) # 定义生成器 list2 = (i for i in range(1,11)) # print(list2) print(next(list2)) print(next(list2)) =====================
生成器的本质也是一个函数 yield 与return相同 返回结果 yield是生成器的返回 特点 支持显示的暂停与恢复
def fei_bo(): # 定义第一项和第二项 a = 1 b = 1 for i in range(10): # 8项 yield a a, b = b, a + b fei = fei_bo() # print(next(fei)) # print(next(fei)) # print(next(fei)) # print(next(fei)) for i in fei: print(i)
====================
可迭代对象:可以通过for循环遍历的对象 list tuple str dict 迭代器,存储数据的一个容器
list1 = [1,2,3,4,5] print(dir(list1)) # for i in list1: # print(list1) print('+++++++') # iter(迭代对象) list2 = iter(list1) print(dir(list2)) # 迭代器和迭代对象 # print(list2) # print(next(list2)) # print(next(list2)) # print(next(list2)) # print(next(list2)) # print(next(list2)) # for i in list2: # print(i) # 生成器本质上也是一个迭代器 # for循环底层原理 # try: # with True: # print(next(list2)) # except StopIteration: # pass ======================
闭包:函数嵌套,外层函数返回内层函数的函数体 函数体: 调用函数的时候只写了函数名,没用加括号 nonlocal 修改局部变量,在函数的局部变量中使用
def func1(): # print('Hello world') # # f1 = func1() # 函数体 f1 = func1 # print(f1) # def outer(): # num1 = 10 # def inner(): # nonlocal num1 # 修改局部变量 # num1 += 1 # print(num1) # return # # inner() # 或 return # # outer() # 闭包 def outer(): def inner(): print('hello') return inner # print(outer()) # inner # outer()() f1 = outer() # fi = inner f1() # f1() = inner() ==========================
装饰器:在不改变原有函数的前提下,给函数添加功能,原理就是一个闭包函数 可以在另一个函数中,调用另一个函数
def outer(f1): def inner(name): print('添加的功能1') print(f1(name)) print('添加的功能2') return inner @outer def func2(name): return '%s我也渴望添加功能'%name func2('小明') ''' 自定义一个装饰器,它可以计算函数运行的时间 总结 ''' import datetime now = datetime.datetime.now() print('hello') now_new = datetime.datetime.now()
这篇关于python生成器,闭包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门