基本函数结构
def func(a1,a2):
pass
函数小高级
函数中高级
装饰器 & 闭包
递归(函数自己调用自己)
匿名函数(labma)
内置函数
__init__.py
文件夹内不加载__init__.py
文件夹内不加载类 int str list datetime bytes
对象 v=1 v=‘sda‘ v=[1,2,3]
例如:请展示列表中所有的数据。
while + 索引 + 计数器
迭代器,对某种对象(str / list / tuple / dict / set类创建的对象)-可迭代对象 中的元素进行逐一获取,表象:具有__next__()
方法且每次调用都获取可迭代对象中的元素(从前到后一个一个获取)。
列表转换迭代器:
__iter__
()迭代器想要获取每个值:反复调用val = v1.__next__
()
v1 = [11,22,33,44]
v2 = iter(v1)
#列表转换成迭代器
result1 = v2.__next__()
print(result1)
result2 = v2.__next__()
print(result2)
result3 = v2.__next__()
print(result3)
result4 = v2.__next__()
print(result4)
#等同于for循环
while True:
try:
val = v2.__next__()
print(val)
except Exception as e:
break
直到报错:Stoplteration错误,表示已经迭代完成。
如何判断一个对象是否是迭代器:内部是否有__next__
()方法
for循环
v1 = [11,22,33,44]
#1.for循环内部会把V1转换成迭代器
#2.内部反复执行,迭代器.__next__()
#3.取完值后不报错
for item in v1:
print(item)
什么是可迭代对象,迭代对象与迭代器的关系
内部可以使用__iter__
()方法的,能被for循环的,称为可迭代对象
两者的关系:迭代对象可转换为迭代器
类:generator
#函数
def func():
return 132
func()
#生成器函数(内部是否包含yield)
def func():
print(‘f1‘)
yield 1
print(‘f2‘)
yield 2
print(‘f3‘)
yield 3
print(‘f4‘)
val = func() #函数内部代码不会执行,此时val等于generator类型的函数对象
# 生成器是可以被for循环,一旦开始循环那么函数内部代码就会开始执行
for item in val:
print(item) #每次遇到yield时拿到后面的返回值,yield只能被for循环才能打印
def func():
count = 1
while count <= 100:
yield count
count += 1
val = func()
for item in val:
print(item)
import time
def func():
"""
分批去读取文件中的内容,将文件的内容返回给调用者。
:return:
"""
cursor = 0
while True:
f = open(‘log.txt‘, ‘r‘, encoding=‘utf-8‘)# 通过网络连接上redis
# 代指 redis[0:10]
f.seek(cursor)
data_list =[]
for i in range(10):
line = f.readline()
if not line:
return
data_list.append(line)
cursor = f.tell()
f.close() # 关闭与redis的连接
for row in data_list:
yield row
for item in func():
print(item)
time.sleep(3)
#谨记特殊情况
def func():
return 123
yield 1
yield 2
val = func() #此时val是一个生成器函数对象,无论是否执行。
for item in val: #item没有值,因为return直接终止了函数,yield没有传值给item
print(val)
yield from 关键字
def base():
yield 88
yield 99
def func():
yield 1
yield 2
yield from base()
yield 3
result = func()
for item in result:
print(item)
#结果为1,2,88,99,3
v1 = [i for i in range(10)] #列表推导式,立即循环创建所有元素
#列表推导式相当于:
def func():
result = []
for i in range(10):
result.append(i)
return result
v1 = func()
v2 = (i for i in range(10)) #生成器推导式,创建了一个生成器,内部循环未执行
#生成器推导式相当于:
def func():
for i in range(10):
yield i
v2 = func()
#取值才能取出
for i in v2:
print(i)
迭代器
__next__
()方法,用于一个个获取数据可迭代对象
__iter__
()方法且要返回一个迭代器(或生成器)。生成器
函数内部只要有yield就是生成器函数,调用函数只会返回生成器函数,循环生成器时,则函数内部才会执行。
生成器内部也有__next__
()方法和__iter__
(),所以也可被称为迭代器或迭代对象
def func():
yield 1
yield 2
yield 3
v = func()
result = v.__next__()
print(result)
result = v.__next__()
print(result)
result = v.__next__()
print(result)
result = v.__next__()
print(result)
def func():
yield 1
v = func()
result = v.__iter__()
print(result)
python笔记(16)--迭代器、生成器和logging模块
原文:https://www.cnblogs.com/lynlearnde/p/12909632.html