Python 三目运算,列表解析,装饰器,迭代器和生成器
来源:互联网 发布:剑网三炮姐捏脸数据 编辑:程序博客网 时间:2024/06/05 00:41
操作系统:Windows
Python:3.5
欢迎加入学习交流QQ群:657341423
三目运算
a=Falsex=1+33 if a else 10-1#a,b=1,10 if 10>1 else None#多个变量赋值print(x)
三目运算基本上都是用于if else方式,如果有elif的话,只能嵌套在else里面。
例如
a=3x=1+33 if a==1 else (10 if a==2 else 20)print(x)
运行结果:
列表解析
列表解析方法基本用于for循环出来每个元素之后,然后加入一个新的列表。
res=[i for i in range(1,100)]print(res)
结果:
for i in range(1,100)是将i从1到100的,数据类型是int的。
如果变成[i for i in range(1,100)]就是将i加入到一个新的列表去。这就是列表解析。
这里可以加入判断条件
res=[i for i in range(1,100) if i > 50]print(res)
运行结果
装饰器
装饰器分带参数和不带参数。
不带参数
def Mydecorate(func): def decorates(*args,**kwargs): #可将func带参数或不带参数 if mybool: myfunc=func(*args,**kwargs) else: print("aa") myfunc='Fail' return myfunc #这个return可以去掉 return decoratesmybool=False@Mydecoratedef mydef(value): name='Evan' all=value+name print(all)#mydef('my name is ','Evan')mydef('my name is ')
看到定义的Mydecorate,首先是return自身里面的一个函数。再看里面自身的一个函数decorates,这里return的是需要装饰器的函数。也就是说代码中的运行mydef。装饰器中的func其实就是将函数mydef的名字传入,然后进行判断等,符合条件就将执行函数。
装饰器运行顺序
运行结果:
带参数
def Mydecoratearg(arg):#带参数装饰器 if arg: def Mydecorate(func): def decorates(*args,**kwargs): func(*args,**kwargs) return decorates return Mydecorate@Mydecoratearg("aa")def mydef(value): print("my name is "+value)mydef('EvanGG')
运行顺序:
运行结果:
迭代器
迭代器的优点
迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合
总的来说,对于长度太大列表或者字典等来说,使用迭代器访问能节省内存。
比如,for i in list:会将list(列表)全部元素以内存载入方式实现循环,如果list元素太多,这样就很耗内存。运行速度太慢。
用法:
def mydef(): print("aa")class myclass(): def __init__(self,star,end): self.star=star self.end=end def __iter__(self):#迭代器 return self def __next__(self):#迭代器 if self.star<self.end: self.star+=1 mydef()#引入自定义函数 return self.star else: raise StopIteration()c=myclass(0,5)for i in c:#迭代器的糖衣 print(i)
运行结果:
这个用法是在自定义类中实现迭代器的。不过在实际开发中,如果每次都定义类的话,代码就会显得很长。
再看下面:
a=[x for x in range(3) if x<7]b={"a":5,"b":6,"c":7}ita=iter(a)#对列表进行迭代#itb=iter(b)#itb=iter(b.items())itb=iter(b.values())#对字典进行迭代while 1: try: var=next(ita) varb=next(itb) print(var) print(varb) except Exception as e: break
运行结果:
生成器
生成器的特点:
生成器是一个函数,而且函数的参数都会保留。
迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
有利于节省内存空间
更多优点请点击
简单生成器
res=(i for i in range(1,100) if i > 50)print(type(res))
运行结果:
带yield 语句的生成器
在网上找一个例子
def fib(max): a,b=1,1 while a<max: yield a a,b=b,a+bf=fib(10) print(next(f))print(next(f))print(next(f))
首先看到一个函数while的一个循环。yield是返回一个值,但会保留上一次函数里面参数的值。这是与普通函数区别。普通函数是不会保留函数内的参数值的。
可以看到print(next(f)),这和迭代器的next一样的用法。
迭代器和生成器在某个程度上是相似的。
更简单的解释:
def fib(a): b=1 a=a+b yield a a=a+b yield af=fib(10) print(next(f))print(next(f))print(next(f))# for i in fib(10): # print(i)
运行结果:
可看到,这有3个next,但是函数里面只有2个yield,所以到第三个next出现stop的错误。而上面输出11和12分别对于图上的yield。
- Python 三目运算,列表解析,装饰器,迭代器和生成器
- 三神器-迭代器、生成器和装饰器
- Python列表解析和生成器
- Python之装饰器、迭代器和生成器
- Python生成器、迭代器、装饰器
- Python----装饰器/生成器/迭代器
- Python 列表解析和生成器表达式
- Python 列表解析和生成器表达式
- python 中的列表解析和生成器表达式
- Python列表解析和生成器表达式
- python迭代器和生成器,列表
- python学习之迭代器、生成器和装饰器
- Python基础02--迭代器、生成器、列表解析
- python 列表偏平化 & 生成器+装饰器的解决思路
- Python 生成器函数,生成器表达式,迭代器,列表解析
- python--迭代器,生成器,三元表达式,列表解析,生成器表达式
- python 学习2:生成器,迭代器,装饰器
- Python之道–列表解析和生成器
- JSON.stringify() 和 JSON.parse()
- Activity源码浅析-DecorView
- 人脸识别数据集之MS-Celeb-1M
- PTA 4-5 家谱处理(建树做法)
- EPSG:4326
- Python 三目运算,列表解析,装饰器,迭代器和生成器
- azkaban上传时卡在那不动
- 马云:“人工智能” 这几个字听起来,我就很生气
- 关于hive自定义JsonSerde处理json
- tabbarController的使用
- 393. UTF-8 Validation
- PHP SPL标准库
- 禁止ViewPager左右滑动重写类
- js获取系统时间