# -*- coding: utf-8 -*-
"""
迭代器: 可迭代对象
更新迭代,重复的,循环的一个过程更新迭代每次都有新的内容
可以进行循环更新的一个实实在在的值
专业角度;可迭代对象,内部含有‘__iter__’方法的对象
str list tuple dict set range 文件句柄
获取一个对象的所有方法dir()
专业角度 内部含有‘__iter__’方法的对象‘__iter__’ in dir(对象)
优点: 存储的数据能直接显示
拥有的方法较多,操作方便
缺点: 占用内存
不能直接通过for循环取值但可以通过索引取值
迭代器:内部含有‘__iter__’方法和'__next__'方法的对象‘
obj=iter(对象)
next(obj) 取值
优点:节省内存 惰性机制(next一次取一个值)
缺点:速度慢
"""
"""
生成器本质是迭代器的一种
但生成器是我们用Python代码构建的数据结构,迭代器是提供的或转化得来的
def func():
print(12)
print(12)
yield 3
print(88)
yield 4
ret=func()
print(ret)
print(next(ret))
return 函数中只存在一个return结束函数 并且给函数的执行者返回值
有yield并且yield在return前是生成器函数
"""
"""
列表推导式 循环模式 [i for i in range(101)]
筛选模式[i for i in range(101) if i%3==0]
"""
"""
生成器推导式 print((i for i in range(101))) <generator object <genexpr> at 0x00000221B2980F20>
obj=(i for i in range(101))
for i in obj:print(i)
"""
"""
1.闭包只能存在嵌套的函数中
2.内层函数对外层函数非全局变量的引用
3.外层函数返回内层函数
这个使用了外部函数的内部函数叫做闭包
被引用的非全局变量也称作自由变量,这个自由变量会与内层函数产生一个绑定关系
自由变量不会在内存中消失 修改自由变量使用nonlocal
作用:保证数据的安全
判断 print(avg.__code__.co_freevars)
"""
"""
内置函数
int()
bin()#十进制-》二进制
oct()#十进制-》八进制
hex()#十进制-》十六进制
int("16进制",16) 16进制转10进制
divmod() #返回商与余数的元组
round() #保留小数位数
pow(4**5) #x的冥方 第三个参数对其取余
ord()
chr()
repr 返回一个对象的string形式
print(repr('da'))
all 判断一个可迭代化对象全是True才是true
any() 有一个是true就是true
print(self, *args, sep=' ', end='\n', file=None)
sep='' 分隔符 end不换行
给定列表 [1,2,3,4] 输出1234
from functools import reduce
lst=[1,2,3,4] #lst=[1,23,4]会失败
l = reduce(lambda x,y:x*10+y,lst)
print(l)
[21,12,1,3,2,32,2] 输出 2112132322
lst =
sum=0
middle=0
middle1=0
for i in range(len(lst)):
if i==0 :
middle=lst[i]
while i+1<len(lst):
print('1111',middle)
s=10**len(list(str(lst[i+1])))
middle1=middle*s+lst[i+1]
print('22222',middle1)
middle=middle1
break
print(middle1)
装饰器 本质上是一个闭包函数
功能: 不修改已有函数的源代码
不修改已有函数的调用功能
给已有函数添加新的功能
def func1(obj1): #如果闭包函数的参数有且只有一个并且是函数类型 那么这个闭包函数叫做装饰器
def inner():
print("已添加验证")
obj1()
return inner
@func1
def comment():
print("已发表评论")
if __name__='__main__':
comment()
通用装饰器
def decorator(func):
def inner(*args,**kwargs):
print("正在执行")
num=func(*args,**kwargs)
return num
return inner
@decorator
def add(num1,num2):
result=num1+num2
print("结果为",result)
add(1,2)
多个装饰器:先执行内部的装饰器,在执行外部的。
带有参数的装饰器:在原有的装饰器前再加一个函数
"""