super函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class T(object):
a = 0
class A(T):
pass
class B(T):
a = 2
class D(T):
a = 3
class C(A, D, B):
pass
c = C()
print(super(C, c).a) # c继承的哪个值是根据MRO顺序来的,按照广度优先,根据ADB的顺序找到第一个定义a的类
# 然后就是它,所以super(C,c).a 是3
print(c.a)在循环中获取索引
1
2
3
4# 在循环中获取索引(数组下标),用enumerate
ints = [8, 23, 45 ,12, 78]
for idx, val in enumerate(ints):
print(idx, val)如何移除换行符?
'test string\n'.rstrip()
合并列表中的列表,一共有三种方法,用列表推导式最快 原因:当有L个子串的时候用+(即sum)的时间复杂度是O(L2)–每次迭代的时候作为中间结果的列表的长度就会越来越长,而且前一个中间结果的所有项都会再拷贝一遍给下一个中间结果.所以当你的列表l含有L个字串:l列表的第一项需要拷贝L-1次,而第二项要拷贝L-2次,以此类推;所以总数为I * (L2)/2.列表推导式(list comprehension)只是生成一个列表,每次运行只拷贝一次(从开始的地方拷贝到最终结果).
1
2
3
4
5
6$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop反转字符串
'hello world'[::-1]
- 通常每一个实例x都会有一个dict属性,用来记录实例中所有的属性和方法,也是通过这个字典,
可以让实例绑定任意的属性。而slots属性作用就是,当类C有比较少的变量,而且拥有slots属性时,
类C的实例 就没有dict属性,而是把变量的值存在一个固定的地方。如果试图访问一个slots中没有
的属性,实例就会报错。这样操作有什么好处呢?slots属性虽然令实例失去了绑定任意属性的便利,
但是因为每一个实例没有dict属性,却能有效节省每一个实例的内存消耗,有利于生成小而精
干的实例。 为什么需要这样的设计呢?
在一个实际的企业级应用中,当一个类生成上百万个实例时,即使一个实例节省几十个字节都可以节省
一大笔内存,这种情况就值得使用slots属性。
Python知识点(21-30)
-------------本文结束感谢您的阅读-------------
- 本文链接: http://yoursite.com/2018/04/01/Python知识点(21-30)/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!