当前位置: 游戏平台 > 互联网科技 > 正文

python【5】-生成式,生成器

时间:2020-02-07 19:38来源:互联网科技
空生龙活虎行:用于类成员函数之间,也许用于区分不相同逻辑块 空两行:类与类,类与函数,函数与函数之间 一、条件和循环 1. if语句 if 条件判断1: 执行1elif 条件判断2: 执行2else:
  • 空生龙活虎行:用于类成员函数之间,也许用于区分不相同逻辑块
  • 空两行:类与类,类与函数,函数与函数之间

一、条件和循环

1. if语句

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
else:
    <执行4>

例如:

age=5
if age>=18:
  print 'adult'
elif age>=6:
  print 'teenager'
else:
  print 'kid'

 

肯定要注意尺度语句结尾的冒号,以至代码段的缩进。

只要if参数是非零数值、非空字符串、非空list等,就判别为True,否则为False

class Test: """Test class,提供通用的方法""" def __init__: """Test的构造器:""" pass def function1: pass def function2: passdef function3(): pass

2.循环

range(num):再次回到0到num-1之间的卡尺头。举例:

print range(5)

>>>[0,1,2,3,4]

 

for循环for x in ...循环正是把各样成分代入变量x,然后奉行缩进块的语句。

s=0
for i in range(101):
  s+=i
print s

 

while循环:只要条件知足,就持续循环,条件不满意时退出循环。

i=1
s=0

while(i<=100):
  s=s+i
  i=i+1

print s

 

非会集成分

3.迭代

dict类型for ..in ..迭代有以下三种艺术:

d={'a':1,'b':2,'c':3}

暗中同意迭代key

for k in d:
    print k

 

iterkeys()返回key迭代器

for key in d.iterkeys():
    print key

 

itervalues()返回value迭代器

for value in d.itervalues():
    print value

 

iteritems(卡塔尔(قطر‎重返键值对迭代器

for key,value in d.iteritems():
    print key+"="+str(value)

 

判断目的是不是可迭代:通过collections模块的Iterable花色判断

from collections import Iterable
print isinstance(d,Iterable)

 

夜盲标迭代:Python内置的enumerate函数能够把二个list变成索引-成分对

l=range(5)
for i,value in enumerate(l):

print i,value

 

  • 反斜杠

二、生成式

1.列表生成式

列表生成式是python受迎接的语法之大器晚成,通过一句删芜就简的语法就足以对风流倜傥组成分举行过滤,还可以对得到的因素进行转变管理。语法格式为:

[exp for val in collection if condition]

 

相当于

result=[]
for val in collection:
    if(condition):
        result.append(exp)

 

大家看个例证:将列表中的字符串调换为小写组成新的列表。

L=['Hello',10,'World',None]
print [s.lower() for s in L if isinstance(s,str)]
运行结果:  ['hello', 'world']

 

with open('test.txt','w') as file_1,  open("test2.txt", 'w') as file_2: file_2.write(file_1.read

2.字典生成式

词典生成式基本格式如下:

{key-exp:val-exp for value in collection if condition}

 

例如:

print {i:i*10 for i in range(1,10) if(i%2==0)}

运行结果为: {8: 80, 2: 20, 4: 40, 6: 60}

 

  • 字符串

3.集结生成式

聚拢生成式格式和列表生成式相符,只不过用的是大括号:

{exp for value in collection if condition}

 

比方:总结列表中字符串成分的各样长度。

L=['Hello',10,'World',None,'aa']
print {len(x) for x in L if isinstance(x,str)}

运行结果: set([2, 5])

 

4.嵌套列表生成式

嵌套列表生成式要专心for循环的依次。

诸如:大家想提取由七个列表组成的嵌套列表中,含有a的字符串:

L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']]
print [name for list in L1 for name in list  if name.count('a')>0]

运行结果: ['Cathy', 'Zhang', 'Wang', 'Jack']

 

咱俩还足以将嵌套列表中的数据进行扁平化表现,举个例子:

L2=[(1,3,5),(2,4,6),(100,200)]
print [value for t in L2 for value in t]

运行结果: [1, 3, 5, 2, 4, 6, 100, 200]

 

意识语法太轻松啦!!

query_str = ('my name' 'is' ' %s') % "Tom"print query_str

三、生成器

在Python中,有生机勃勃种自定义迭代器的法子,称为生成器(Generator)。

概念生成器的三种艺术:

1.开立多少个generator,只要把一个列表生成式的[]改成(),就创造了三个generator:

l=[x for x in range(1,10)]
print l

g=(x for x in range(1,10))
print g.next()
print g.next()

for x in g:
    print x

运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
2
3
4
5
6
7
8
9

 

generator保存的是算法,每一趟调用next(),就计算出下一个因素的值,直到总计到终极三个要素,没有越多的成分时,抛出StopIteration的失实。

2.概念generator的另生机勃勃种方法。若是贰个函数定义中隐含yield主要字,那么这些函数就不再是三个惯常函数,而是多个generator:

def fib(n):
    a=1
    b=1
    i=0;

    yield a
    yield b

    while(i<n):
        a,b=b,a+b
        i+=1
        yield b

for x in fib(10):
    print x

运行结果:
1
1
2
3
5
8
13
21
34
55
89
144

 

生成器和日常函数不一样:

枯燥无味函数是各种施行,蒙受return语句恐怕最后生龙活虎行函数语句就赶回;

而成为generator的函数,在每便调用next()的时候实行,蒙受yield语句再次回到,再度实施时从上次回去的yield语句处继续试行。

def test():
    print 1
    yield
    print 2
    yield
    print 3
    yield

t=test()
t.next()#运行结果1
t.next()#运行结果2
t.next()#运行结果3

 如需转发,请标记原来的书文链接:

编辑:互联网科技 本文来源:python【5】-生成式,生成器

关键词: