"""
1)迭代器是容器型数据类型
2)怎么创建迭代器:a.将其他序列转换成迭代器 b.创建生成器
3)特点:打印的时候不能查看元素;无法获取元素个数;
获取元素的时候必须将元素从迭代器中取出,取出后元素会从迭代器中消失,并且无法再添加。
"""
i1 = iter('abc')
print(i1)
i2 = iter([10, 20, 'abc', 30])
print(i2)
"""
迭代器不管以什么样的方式获取到了它的元素,那么被获取到的元素就会从迭代器中消失。
1)获取单个元素
next(迭代器) - 获取迭代器最前面那个元素
2)遍历
for 变量 in 迭代器:
pass
"""
i1 = iter('abc')
print(next(i1))
print(next(i1))
print(next(i1))
i2 = iter([10, 20, 'abc', 30])
next(i2)
for x in i2:
print(f'x:{x}')
i3 = iter('abc123')
result = list(i3)
print(result)
"""
1)生成器是容器型数据类型,但是生成器中存储的并不是数据,而是产生数据的算法
2)生成器就是迭代器
"""
"""
调用一个带有yield关键字的函数就可以得到一个生成器对象。
(如果被调用的函数中有yield,那么调用函数的时候不会执行函数体,也不会获取函数返回值,而是得到一个生成器)
"""
def func1():
print('++++')
print('----')
if False:
yield
return 100
result = func1()
print(f'result:{result}')
"""
执行创建生成器函数的函数体的时候,会遇到几次yield,那么对应的生成器就可以创建几个数据;
每次遇到yield,yield后面的值就是创建的具体的数据
"""
def number_gender():
for x in range(100, 301, 100):
yield x
gen1 = number_gender()
print(list(gen1))
def study_num():
for x in range(1, 1000):
yield f'stu{x:0>3}'
gen2 = study_num()
print(next(gen2))
print(next(gen2))
for _ in range(5):
print(next(gen2))
print(next(gen2))
def func2():
print('-----------1-------------')
yield 100
print('-----------2-------------')
yield 200
print('-----------3-------------')
yield 300
gen3 = func2()
print(next(gen3))
print(next(gen3))
def func1():
start = time.time()
print('hello world!')
end = time.time()
print(f'执行时间:{end - start}')
func1()
def func2(a=1, b=2):
start = time.time()
print(a + b)
end = time.time()
print(f'执行时间:{end - start}')
func2(10, 20)
print('-------------------------------------------------------')
def func1():
print('hello world!')
def func2(a=1, b=2):
print(a + b)
def func3():
sum1 = 0
for x in range(101):
sum1 += x
print(sum1)
def count_time(f):
start = time.time()
f()
end = time.time()
print(f'执行时间:{end - start}')
count_time(func1)
count_time(func2)
count_time(func3)
def total_time(f):
def new_f(*args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
end = time.time()
print(f'执行时间:{end - start}')
return result
return new_f
print('-------------------------------------------------------')
@total_time
def func1():
print('hello world!')
@total_time
def func2(a=1, b=2):
return a + b
def func3():
sum1 = 0
for x in range(101):
sum1 += x
print(sum1)
func1()
result = func2(10, 20)
print(f'result:{result}')
func3()
"""
def 装饰器名称(原函数对应的形参):
def 新函数名(*args, **kwargs):
原函数返回值 = 原函数(*args, **kwargs)
新增功能
return 原函数返回值
return 新函数名
def 装饰器名称(f):
def new_f(*args, **kwargs):
result = f(*args, **kwargs)
新增功能
return result
return new_f
"""
def add_logo(f):
def new_f(*args, **kwargs):
result = f(*args, **kwargs)
print('千锋教育')
return result
print(new_f)
return new_f
@add_logo
def func1():
print('hello world~')
func1()
@add_logo
def func2(n, m=2):
print(n * 2 + m)
func2(10, 20)
def ride100(f):
def new_f(*args, **kwargs):
result = f(*args, **kwargs)
if type(result) in (int, float):
return result * 100
return result
return new_f
@ride100
def func1():
return 12.3
result = func1()
print(f'result:{result}')