迭代器,生成器,三元运算,列表推导式

已学的知识中,哪些是对象

整型

浮点型

字符串

列表

元组

字典

集合

文件

函数

可迭代对象

可迭代对象有哪些?

字符串

列表

字典

集合

文件

总结:拥有iter方法的对象就是可迭代对象

迭代器

文件本身就是迭代器对象。

with open("a.txt",'r',encoding="utf8") as f:
    print(f.__next__())  # 这里的f就是迭代器

迭代器对象:拥有iter方法和next方法的就是迭代器对象

文件既是可迭代对象,又是迭代器对象

三元表达式

# 普通的if判断
x = 10
y = 20
if x < y:
    a = x
else:
    a = y
print(a)
    
    
# 三元表达式:
x = 10
y = 20
a = x if x < y else print y
print(a)

列表推导式

list_plf = [i for i in rang(100) if i > 50]
print(list_plf)


dict_lt = {k:v for k,v in ==zip("abcdef",[1,2,3,4,5,6])== if v > 2}
print(dict_lt)


'''
	总结:
		列表推导式的逻辑判断最好是写在循环的后面

'''

生成器(yield)

yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是返回一个值。

def func():
    print(1)
    yield
    print(2)
    yield


g = func()
print(g)

'''
<generator object func at 0x10ddb6b48>
'''

生成器的本质就是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。并且从Python 2.5+开始,[PEP 342:通过增强生成器实现协同程序]的实现为生成器加入了更多的特性,这意味着生成器还可以完成更多的工作。这部分我们会在稍后的部分介绍。

def func():
    print('from func 1')
    yield 'a'
    print('from func 2')
    yield 'b'


g = func()
print(F"g.__iter__ == g: {g.__iter__() == g}")

res1 = g.__next__()
print(f"res1: {res1}")

res2 = next(g)
print(f"res2: {res2}")

# next(g)  # StopIteration

'''
g.__iter__ == g: True
from func 1
res1: a
from func 2
res2: b
'''


def func():
    print('from func 1')
    yield 'a'
    print('from func 2')
    yield 'b'


g = func()
for i in g:
    print(i)

print(f"list(func()): {list(func())}")


from func 1
a
from func 2
b
from func 1
from func 2
list(func()): ['a', 'b']

yield和return的区别

yield:接受函数返回值,但是函数不退出

return:接受函数返回值,但是函数会退出

def i_wanna_return():
    yield 'a'
    yield 'b'
    return None
    yield 'c'

for i in i_wanna_return():
    print(i)
    
'''
a
b
'''

生成器表达式和列表推导式的区别

# 生成器
a = (i for i in range(10))
print(a)

'''
<generator object <genexpr> at 0x0000007B33E396D0>
'''

# 列表推导式
b = [i for i in range(10)]
print(b)

'''
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
'''

'''
	总结:
		1. 列表推导式相当于直接给你一筐蛋,而生成器表达式相对于给你一个母鸡。
		2. 从内存的角度看,生成器更节省空间

'''

总结

yield

  1. 提供一种自定义迭代器的方式
  2. yield可以暂停住函数,并提供当前的返回值

yield和return

  1. 相同点:两者都是在函数内部使用,都可以返回值,并且返回值没有类型和个数的限制
  2. 不同点:return只能返回一次之;yield可以返回多次值

生成器表达式和列表推导式的区别

  1. 列表推导式相当于直接给你一筐蛋,而生成器表达式相对于给你一个母鸡。
  2. 从内存的角度看,生成器更节省空间
原文地址:https://www.cnblogs.com/plf-Jack/p/10969197.html