• Python高级特性


    减少代码,提高效率

    1.切片

    取一个序列的部分元素

    L [ start : end : step ]  含头不含尾

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 L = [ 1, 3, 6, 9, 45, 66]
    5 
    6 print ( L[:4] )   #等同于L[0:4] 切片下标为 0 ~ 3 
    7 print ( L[-2:] )  #倒数切片 从倒数第2开始往后切 倒数第二、倒数第一
    8 print ( L[:5:2] )  #前5个数,每2个取一个
    9 print ( L[::5] )  #所有数,每5个取一个

    L[ : : -1]     倒切

     2.迭代

    在Python中,迭代是通过 for...in 来完成的,而很多语言迭代 list 是通过下标完成的。

    无论有无下标都可以迭代,如dict

    dict不是按顺序排列存储,迭代出的结果顺序很可能不一样

    dict默认迭代 key 如要要迭代 value:

    同时迭代 key 和 value :

    判断是否可以迭代

    3.迭代器

    迭代是Python最强大的功能之一,是访问集合元素的一种方式。

    凡是可作用于for循环的对象都是Iterable类型,即迭代对象

    凡是可作用于next()函数的对象都是Iterator类型,即迭代器,表示一个惰性计算的序列(只有在需要返回下一个数据时它才会计算)

    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    迭代器有两个基本的方法:iter() 和 next()

    集合数据类型如list、dict、str等是迭代对象,但不是迭代器,可通过 iter() 函数获得一个迭代器对象

    字符串,列表或元组对象都可用于创建迭代器

    迭代器对象可以使用常规for语句进行遍历:

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 list = [1, 2, 3, 4]
    5 it = iter(list)  #创建迭代器对象
    6 
    7 for x in it:
    8     print(x, end=" ")  #不换行输出

    也可以使用 next() 函数:

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 list = [1, 2, 3, 4]
    5 it = iter(list)  #创建迭代器对象
    6 
    7 while True:
    8     print (next(it))

    StopIteration

    StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况

    4.列表生成式

    简单却强大的可用来创建list的生成式

    如:生成一个列表 [1x1,  2x2,  3x3,  ...,  10x10]

    用循环做

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 L = []
    5 for x in range(1,11):
    6     L.append(x*x)
    7 for i in L[:]:
    8     print (i, end = " ")

    用列表生成式做

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 L = [ x*x for x in range(1,11)]
    5 
    6 for i in L[:]:
    7     print (i, end = " ")

    列表生成式内还可加 if 判断

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 L = [ x*x for x in range(1,11) if x%2 == 0 ]
    5 #筛选出仅偶数的平方
    6 for i in L[:]:
    7     print (i, end = " ")

    还可使用两层循坏,如生成一个全排列

    1 #!/usr/bin/python3
    2 # -*- coding:utf-8 -*-
    3 
    4 L = [ m+n for m in 'ABC' for n in 'XYZ' ]
    5 for i in L[:]:
    6     print (i, end = " ")

    5.生成器

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    在 Python 中,使用了 yield 的函数被称为生成器(generator)。

    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

    调用一个生成器函数,返回的是一个迭代器对象。

    以下实例使用 yield 实现斐波那契数列:

     1 #!/usr/bin/python3
     2 import sys
     3 
     4 def fibonacci(n): # 生成器函数 - 斐波那契
     5     a, b, counter = 1, 1, 0
     6     while True:
     7         if (counter > n):
     8             return
     9         yield a
    10         a, b = b, a + b
    11         counter += 1
    12         
    13 f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
    14 while True:
    15     try:
    16         print (next(f), end=" ")
    17     except StopIteration:
    18         sys.exit()

  • 相关阅读:
    数据库概念相关
    JavaWeb基础知识总结
    MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
    MyBatis学习总结(一)——MyBatis快速入门
    [源码解析]HashMap和HashTable的区别(源码分析解读)
    MyBatis学习总结(三)——优化MyBatis配置文件中的配置
    MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
    MyBatis学习总结(五)——实现关联表查询
    MyBatis学习总结(六)——调用存储过程
    MyBatis学习总结(七)——Mybatis缓存
  • 原文地址:https://www.cnblogs.com/bfcs/p/10735678.html
Copyright © 2020-2023  润新知