迭代器

DAY14

梦想与她 提交于 2019-11-27 05:53:42
DAY14 列表推导式 lt = [0,1,2,3,4] lt = [] for i in range(10): lt.append(i**2) print(lt) 意义不大,不推荐使用 字典生成式 print({i: i**2 for i in range(10)}) {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} zip()方法 字典生成式一般与zip(拉链函数--》列表里面包了元组)连用 keys = ['name', 'age', 'gender'] values = ['nick', 19, 'male'] res = zip(keys, values) print(F"zip(keys,values): {zip(keys,values)}") info_dict = {k: v for k, v in res} print(f"info_dict: {info_dict}") zip(keys,values): <zip object at 0x11074c088> info_dict: {'name': 'nick', 'age': 19, 'sex': 'male'} 通过解压缩函数生成一个字典 压缩方法,Python解释器的内置方法 生成器 yield关键字

049 迭代器

心不动则不痛 提交于 2019-11-27 05:48:53
迭代器 迭代器就相当于是更新换代的意思,重复的操作、基于上一次的结果得到下一次的结果 1.可迭代对象 python中一切皆是对象 对于所有的对象,只要是有 .____iter___ 方法的对象,都是可迭代对象 python内置的str、list、tuple、dict、set、file都是可迭代对象。 x = 1 # 不可迭代对象 name = 'xichen'# 可迭代对象 lis = [1,2,3] # 可迭代对象 dic = {'a':1,'b':2} # 可迭代对象 se = {1,2,3,4} # 可迭代对象 tuple = (1,2,3) # 可迭代对象 f = open('test.txt') # 可迭代对象 def fun(): # 不可迭代对象 pass 2.迭代器对象 可迭代的对象执行 __iter__ 方法得到的返回值。并且可迭代对象会有一个 __next__ 方法。 只有字符串和列表是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的。因此我们就有了迭代器对象的方法能让其他的可迭代对象不依赖索引取值。 # 不依赖索引的数据类型迭代取值 dic = {'a': 1, 'b': 2, 'c': 3} dic_iter = dic.__iter__() print(dic_iter .__next__()) print(dic_iter .__next__()

JDK集合类源码 || 三、Iterator、fail-fast机制、比较器

 ̄綄美尐妖づ 提交于 2019-11-27 05:24:10
文章目录 前言 一、Iterator简单说明 二、java.util.Iterator 三、各个集合的Iterator的实现 1、 ArrayList的Iterator实现 四、fail-fast机制 1、fail-fast示例 2、fail-fast产生原因 3、fail-fast解决办法 五、Comparable接口 和 Comparator接口 1、Comparable接口 3、Comparator接口 3、总结 前言 这一系列是对程序员江湖博主LXF - Java集合类专题的整理。因为原文虽然讲解的很全面透彻,但是组织结构不清晰,而且错别字较多,所以我重新整理,便于自己阅读理解记忆。 原文: Java集合详解3:Iterator,fail-fast机制与比较器 原文参考:Java技术驿站的 Java提高篇(三十)—–Iterator 、 Java提高篇(三四)—–fail-fast机制 一、Iterator简单说明 Java程序员对于迭代器绝对不陌生,因为我们需要经常使用JDK提供的迭代器接口进行Java集合的迭代。 Iterator iterator = list . iterator ( ) ; while ( iterator . hasNext ( ) ) { String string = iterator . next ( ) ; //do something

四大器

喜你入骨 提交于 2019-11-27 05:08:14
目录 一、迭代器 1.一个简单的迭代器: 2.迭代异常处理(迭代完了,没有了,try) 二、生成器 yield与return的区别: 三、装饰器 1.无参模板(二层) 2.有参模板(三层) 四、@property装饰器 一、迭代器 迭代器:迭代取值的工具 ——(用__iter__生成迭代器对象) 优点:1.不依赖与索引取值    2.内存中只占一份空间,不会内存溢出,节约空间,运行效率更高*(执行一次__next__取值一次,而不是一次全部取值)* 缺点:1.不能获取指定的元素    2.只能依次往后取值 1.一个简单的迭代器: k = [1, 2, 3] # 生成迭代器对象 k1 = k.__iter__() #迭代器取值,调用__next__() print(k1.__next__()) print(k1.__next__()) print(k1.__next__()) 2.迭代异常处理(迭代完了,没有了,try) k = [1,2,3] k1 = k.__iter__()while True: try: print(k1.__next__()) except StopIteration: print("没有了") break 二、生成器 优点:节约内存,不会内存溢出 生成器:使用yield自定义的迭代器叫生成器 yield: ​ 1.后面不跟值,默认返回None

Python学习日记(十) 生成器和迭代器

馋奶兔 提交于 2019-11-27 04:04:02
使用dir()我们可以知道这个数据类型的内置函数有什么方法: print(dir(int))   print(dir(bool)) print(dir([])) print(dir({})) print(dir(set)) 迭代器 iterable:可迭代的 迭代就是将数据能够一个一个按顺序取出来 s = 'abc' print('__iter__' in dir(s)) #True li = [1,2] print('__iter__' in dir(li)) #True b = False print('__iter__' in dir(b)) #False i = 123 print('__iter__' in dir(i)) #False dic = {} print('__iter__' in dir(dic)) #True set1 = set() print('__iter__' in dir(set1)) #True 上面数据类型返回为真说明它是可以迭代的,反之是不可迭代的 可迭代协议: 就是内部要有一个__iter__()来满足要求 当一个具有可迭代的数据执行__iter__()它将返回一个迭代器的内存地址 print('abc'.__iter__()) #<str_iterator object at 0x005401F0> 这里的iterator的意思是

迭代器

吃可爱长大的小学妹 提交于 2019-11-27 03:55:02
在Python中,很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等等,这些对象都可以被称为可迭代对象。 迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法。其中__iter__()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常。 __iter__()与next() 这两个方法是迭代器最基本的方法,一个用来获得迭代器对象,一个用来获取容器中的下一个元素。 对于可迭代对象,可以使用内建函数iter()来获取它的迭代器对象: 例如: class MyRange(object): def __init__(self, n): self.idx = 0 self.n = n def __iter__(self): return self def next(self): if self.idx < self.n: val = self.idx self.idx += 1 return val else: raise StopIteration() View Code 来源: https://www.cnblogs.com/zly9527/p/11343122.html

闭包函数 装饰器 迭代器

一世执手 提交于 2019-11-27 03:51:11
闭包函数 一、什么是闭包 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。简单的说闭包函数就是把变量和函数一起包起来,下次要用直接使用 def outter(x): def inner(): print(x) return inner inner = outter(2) # inner # f = inner inner() inner() inner() # 查看闭包的元素 print(F"f.__closure__[0].cell_contents: {f.__closure__[0].cell_contents}") 结果: 2 2 2 f.__closure__[0].cell_contents: 2 二、闭包函数的应用 闭包的含义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹一层作用域,这使得该函数无论在何处调用,优先先使用自己外层包裹的作用域 应用领域:延迟计算(原来我们是传参的,现在我们包裹起来)、怕成领域 import requests def get(url): response = requests.get(url) print(f"done: {url}") get('https://www.baidu.com') get('https://www

python基础之函数重点

房东的猫 提交于 2019-11-27 03:41:55
函数的返回值 现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪。 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值。 需要注意的是: return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。 return的返回值可以返回任意数据类型 return的返回值无个数限制,即可以使用逗号隔开返回多个值 0个:返回None 1个:返回值是该值本身 多个:返回值是元组 #返回单个值 def max_self(salary_x, salary_y): if salary_x > salary_y: return salary_x else: return salary_y max_salary = max_self(20000, 30000) print(max_salary*12) ##360000 #返回多个值 def fun(): name = 'nick' age = 19 hobby_list = ['read', 'run'] return name, age, hobby_list name, age, hobby_list = func()#解压缩 print(f"name,age,hobby_list: {name, age, hobby_list}") ##name,age,hobby

第八章、函数进阶之迭代器03

拟墨画扇 提交于 2019-11-27 03:29:38
目录 第八章、函数进阶之迭代器03 1. 什么是迭代 2.可迭代对象 3.for循环原理(迭代原理) 第八章、函数进阶之迭代器03 1. 什么是迭代 迭代更新换代,基于上一次的结果退出下一次的结果 2.可迭代对象 具有__iter__()方法的就是可迭代对象,除了数字类型和函数类型都是可迭代对象 x = 1 # 不可迭代对象 s = 'jiayi' # 可迭代对象 lt = [1, 2, 3] # 可迭代对象 dic = {'a': 1, 'b': 2} # 可迭代对象 tup = (1,) # 元组只有一个元素必须得加逗号# 可迭代对象 se = {1, 2, 3} # 可迭代对象 f = open('time.py') # 可迭代对象 --iter--和--next-- str="ypp" print(type(str))#<class 'str'> str_iter=str.__iter__()#把str变为迭代器对象 print(type(str_iter))#<class 'str_iterator'> print(str_iter.__next__()) #y 基于索引(基于上一次结果),通过__next__进行迭代 print(s_iter.__next__())#p 3.for循环原理(迭代原理) str="ypp" print(type(str))#<class

day13

孤者浪人 提交于 2019-11-27 03:25:15
一、闭包函数 简单来说闭包函数是传参的另外一种方式,将参数+函数包在一起返回出去。 1.两种为函数传参的方式 # 1.使用参数的形式 def func(x): print(x) func(1) func(1) # 2.包给函数 def outter(x): def inner(): print(x) return inner f = outter(1) f() f() 2.闭包函数的应用 闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。 应用领域:延迟计算(原来我们是传参,现在我们是包起来)、爬虫领域。 import requests def outter(url): def inner(): response = requests.get(url) print(f"done: {url}") return inner baidu = outter('www.baidu.com') python = outter('https://www.python.org') baidu() baidu() python() python() 二、装饰器 装饰器本质就是一个函数a,装饰的对象也是一个函数b,用一个函数a去装饰一个函数b 装饰器的实现必须遵循两大原则: 不修改被装饰对象的源代码