《python进阶编程》学习

python进阶

1 语法最佳实践

1.1 循环优化改进

1.1.1情形一

保存0-10之间的偶数

#常规写法(添加了计算时间的函数)
import time
start = time.clock()
even = []
for i in range(10):
    if i % 2 == 0:
        even.append(i)
print("even",even)
end = time.clock()
t=end-start
print("Runtime is :",t)
#输出结果:
#实际上在python3.7上此时会出现报错
even [0, 2, 4, 6, 8]
Runtime is8.397500000000002e-05

此时它会使程序的执行速度变慢

#改进写法
import time
start1 = time.clock()
even= [i for i in range(10) if i % 2 == 0]
print("even",even)
end1 = time.clock()
t=end1-start1
print("t",t)
#输出结果
even [0, 2, 4, 6, 8]
t1 4.805199999999288e-05

时间提高一倍

1.1.2 情形二

在某些操作中,我们要循环索引数,同时还要获取到列表中的元素。函数enumrate提供了获取索引的有效方式

#常规写法
import time
start = time.clock()
i = 0
sequence= ["one", "two", "three"]
for ele in sequence:
    sequence[i] = '%d : %s' % (i,sequence[i])
    i +=1
print("sequence",sequence)
end = time.clock()
t=end-start
print("Runtime is :",t)
#改进写法:
start1 = time.clock()
sequence= ["one", "two", "three"]
for i ,element in enumerate(sequence):
    sequence[i] = '%d : %s' % (i, sequence[i])
print("even",sequence)
end1 = time.clock()
t1=end1-start1
print("t1",t1)

输出结果:

sequence ['0 : one', '1 : two', '2 : three']
Runtime is : 9.190600000000271e-05

even ['0 : one', '1 : two', '2 : three']
t1 4.94519999999915e-05

效果提升明显

更加优化的改进方法,for循环不作为一个独立的部分出现,而是像1.1.1中

start1 = time.clock()
def _treatment(pos,element):
    return '%d:%s' % (pos,element)
seq=["one","two","three"]
a = [_treatment(i, el) for i,el in enumerate(seq)]
print(a)
end1 = time.clock()
t=end1-start1
print("t",t)

输出结果

['0:one', '1:two', '2:three']
t 3.778899999999641e-05

enumerate

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])
  • sequence – 一个序列、迭代器或其他支持迭代对象。
  • start – 下标起始位置。

1.2迭代器与生成器

1.2.1 迭代器

迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。我们已经知道可以对list、tuple、str等类型的数据使用for…in……的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。
但是,是否所有的数据类型都可以放到for…in……的语句中,然后让for……in……每次从中取出一条数据供我们使用,即供我们迭代吗?并不是,例如整数。可以使用isinstance()判断一个对象是否是Iterable对象:

迭代器只不过是一个实现迭代器协议的容器对象。它基于两个方法:

  • next 返回容器的下一个项目;
  • _iter返回迭代器本身。

持续更新中

你可能感兴趣的:(python)