python高级用法

本文主要介绍三种python的高级用法:列表推导式、迭代器和生成器、装饰器

一、列表推导(list comprehensions)
使用场景1:将一个三维列表中所有一维数据为1的元素合并,组成新的二维列表。
# 假设有一个三维数组
>>> result_list=[[1,2,3],[1,4,5],[4,7,6]]
>>> lista=[item for item in result_list if item[0]==1]
>>> lista
[[1, 2, 3], [1, 4, 5]]
>>>

维度是指描述一个事物所使用的参量个数,通常是在数学或物理上的描述。如上列表中嵌套列表的元素个数即为维度数。通过简单而又快速的列表推导式,可以很快的从一个多维列表中选出符合筛选条件的列表元素并组成新的列表,这种写法简洁而且快捷。

使用场景2:对于一个列表,既要遍历索引又要遍历元素。

这里可以使用python内建函数enumerate,在循环中更好的获得索引。

# 定义一个函数,专门处理数组数据
>>> def getitem(index,element):
...     return '%s:%s' %(index,element)
...
#  定义数组
>>> array=['nihao','python']
# 使用enumerate函数,配合自定义函数使用
>>> arrayIndex = [getitem(index,element) for index,element in enumerate(array)]
>>> arrayIndex
['0:nihao', '1:python']
>>> array = ['abcdefg','1234567','ABCDEFG']
>>> arrayIndex = [getitem(index,element) for index,element in enumerate(array)]
>>> arrayIndex
['0:abcdefg', '1:1234567', '2:ABCDEFG']
二、迭代器和生成器
1.迭代器(Iterator)

使用isinstance()方法可以判断是否是迭代器或者是否能迭代。

from collections import Iterable
is_iterable =  isinstance('python',Iterable)
print type

迭代器(Iterator):指的是可以使用next()方法来回调的对象,可以对可迭代对象使用iter()方法,将其转换为迭代器。
可迭代对象(Iterable):可以使用for循环进行循环的如列表,字典,元祖等,均为可迭代对象,但不是迭代器,可使用iter()方法将其转换为迭代器。

temp = iter(['a','b','c'])
print type(temp)
print next(temp)

这里temp就是一个迭代器,所以说,只有满足以下两个方法的,才是迭代器:

  1. next:返回下一个项目
    2.iter: 返回迭代器本身
    也可理解为可被next()函数调用并不断返回下一个值的对象就是迭代器,在定义一个装饰器时将需要同时定义这两个方法。
    迭代器的优势
    在构建迭代器时,不是将所有的元素一次性的加载,而是等调用next方法时返回元素,所以不需要考虑内存的问题。在数列的数据规模巨大或者数列有规律但是不能使用列表推导式描述的情况下比较适用。
2.生成器

生成器是一种高级迭代器,可以暂停一个函数并返回中间结果。当需要一个将返回一个序列或在循环中执行的函数时,就可以使用生成器,因为当这些元素被传递到另一个函数中进行后续处理时,一次返回一个元素可以有效的提升整体性能。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文翻译自Functional Programming Howto 本文将介绍Python中函数式编程的特性。在对...
    大蟒传奇阅读 2,679评论 4 14
  • 迭代器和生成器 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几...
    go以恒阅读 781评论 1 4
  • 2017.11.30 英语听力一个半小时。接了老板一个活。学习英语四个半,早晨早早醒来就开始了。晚上还要加班了一会...
    灸灸微笑阅读 215评论 0 0
  • 请所有的18级社员做好准备。 每位社员在本学期都会进行为期一周的代理社长培训,在这个期间内请把礼仪社放在第一...
    MeiWong阅读 851评论 0 0
  • 春困百花休,江乏弱水流。 浮云似有意,细雨却无由。 枯色百余里,蹙眉三字秋。 肖肩荷担重,心载万般忧。
    写在时间前面阅读 176评论 0 2