python特别有用的一些内置函数

any all

any()判断一个迭代序列中是否有一个bool(x)为True的。

all()判断一个迭代序列中是否bool(x)全为True。

例如:

while any(i.is_running for i in threads):
    time.sleep(1)

id

获取类似内存地址的东西,用于判断元素是否为同一个元素。

divmod

获取除数和余数。

enumerate

遍历的时候,同时获取下标。

hash

算一个对象的hash值,其实就是调用对象的__hash__()函数。

callable

判断一个对象是否可以调用,实际就是看是否有__call__()方法:

class A(object):
    def __call__(self):
        print('abc')

a = A()
a()
callable(a)

bytearray

在python中字符串都是不可修改的,拼接或者strip等都会存在字符串的拷贝。bytearray就是创建一个可修改的字符数组:

arr = bytearray(100)
arr[0] = 'a'
arr[1] = 'b'

classmethod

给类添加静态方法:

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

给类添加一个属性,其原型为:

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 getattr hasattr

setattr即设置属性值:

setattr(x, 'y', v) 等同于 x.y = v

getattr即获取属性值:

getattr(x, 'y', d) 等同于 x.y if hasattr(x, 'y') else d

sorted

排序一个序列:

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)次。

发表于 2014年10月29日 17:58   评论:0   阅读:1957  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo