本帖最后由 lightninng 于 2015-4-9 23:20 编辑
python自带的扩展模块已经非常强大了,比如 说这个itertools模块,把觉得有意思的发上来,具体请看http://www.cnblogs.com/cython/articles/2169009.html
chain(iter1, iter2, ..., iterN):
给出一组迭代器(iter1, iter2, ..., iterN),此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从iter1开始生成项,知道iter1被用完,然后从iter2生成项,这一过程会持续到iterN中所有的项都被用完。>>> from itertools import chain
>>> test = chain('AB', 'CDE', 'F')
>>> test
<itertools.chain object at 0x00000000033ADB38>
>>> list(test)
['A', 'B', 'C', 'D', 'E', 'F']
>>>
combinations(iterable, r):
创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序:
PS:今天就是用到这个才搜到这个模块的,其实就是返回iterable中选择r个元素的所有不同组合的序列>>> from itertools import combinations
>>> test = combinations([1,2,3,4,5], 3)
>>> test
<itertools.combinations object at 0x00000000033E0138>
>>> list(test)
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
>>>
dropwhile(predicate, iterable):
创建一个迭代器,只要函数predicate(item)为True,就丢弃iterable中的项,如果predicate返回False,就会生成iterable中的项和所有后续项。>>> from itertools import dropwhile
>>> test = dropwhile(str.isalpha, ['a','A','2','e','2'])
>>> test
<itertools.dropwhile object at 0x00000000033F1A88>
>>> list(test)
['2', 'e', '2']
>>>
-*--*--*--*--*--*--*--*--*--*--*---*--*--*--*--*--*--*--*--*--*--*---*--*--*--*--*--*--*--*--*--*--*---*--*--*--*--*--*--看到一个同学问到关于类的问题一下想起当时在下面这个python学习教程上看到的关于类中的__slot__变量
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
使用__slots__想要限制class的属性怎么办?比如,只允许对Student实例添加name和age属性。 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性: >>> class Student(object):
... __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
然后试试>>> s = Student() # 创建新的实例
>>> s.name = 'Michael' # 绑定属性'name'
>>> s.age = 25 # 绑定属性'age'
>>> s.score = 99 # 绑定属性'score'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'score'
由于'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。 使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的: <font color="rgb(51, 51, 51)">>>> class GraduateStudent(Student):
... pass
...
>>> g = GraduateStudent()
>>> g.score = 9999</font>
除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__。
|