any()判断一个迭代序列中是否有一个bool(x)为True的。
all()判断一个迭代序列中是否bool(x)全为True。
例如:
while any(i.is_running for i in threads):
time.sleep(1)
获取类似内存地址的东西,用于判断元素是否为同一个元素。
获取除数和余数。
遍历的时候,同时获取下标。
算一个对象的hash值,其实就是调用对象的__hash__()
函数。
判断一个对象是否可以调用,实际就是看是否有__call__()
方法:
class A(object):
def __call__(self):
print('abc')
a = A()
a()
callable(a)
在python中字符串都是不可修改的,拼接或者strip等都会存在字符串的拷贝。bytearray就是创建一个可修改的字符数组:
arr = bytearray(100)
arr[0] = 'a'
arr[1] = 'b'
给类添加静态方法:
class A(object):
@classmethod
def get(cls, arg0, arg1):
print(type(cls), arg0+arg1)
或者:
class A(object):
def get(arg0, arg1):
print(arg0+arg1)
get = staticmethod(get)
给类添加一个属性,其原型为:
property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
例如:
class C(object):
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
或者:
class C(object):
@property
def x(self): return self._x
@x.setter
def x(self, value): self._x = value
@x.deleter
def x(self): del self._x
setattr即设置属性值:
setattr(x, 'y', v) 等同于 x.y = v
getattr即获取属性值:
getattr(x, 'y', d) 等同于 x.y if hasattr(x, 'y') else d
排序一个序列:
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
例如:
sorted([1,2,3], reverse=True)
[3, 2, 1]
s = [{'name':'a', 'age':38}, {'name':'c', 'age':18}, {'name':'a', 'age':22}]
sorted(s, key=lambda x:x['age'], reverse=True)
sorted(s, cmp=lambda x,y: cmp(x['age'], y['age']), reverse=True)
以上例子都是按年龄逆序排列,但前者效率要高很多,因为前者key函数只算O(n)次,而后者cmp函数要算O(n^2)次。