美文网首页
不怎么用到的Python技巧(2)

不怎么用到的Python技巧(2)

作者: 赤色要塞满了 | 来源:发表于2019-03-25 19:44 被阅读0次

    重写__new__方法

    >>> class CapStr(str):
        def __new__(cls, value):
            return super(CapStr, cls).__new__(cls, value.capitalize())  
    >>> a = CapStr('abc')
    >>> a
    'Abc'
    

    单例实现

    >>> class Singleton():
        def __new__(cls):
            if not hasattr(cls, 'instance'):
                cls.instance = super(Singleton, cls).__new__(cls)
            return cls.instance
    >>> a = Singleton()
    >>> b = Singleton()
    >>> a is b
    True
    

    或者

    >>> class Singleton():
        instance = None
        def __new__(cls):
            if not cls.instance:
                cls.instance = super(Singleton, cls).__new__(cls)
                # 也可以 cls.instance = object.__new__(cls) 
            return cls.instance
    

    递归碾平多维数组

    >>> a = [[1, 2, 3, [7, 8, 9]], [3, 4], [5, 6]]
    >>> func = lambda x: [y for t in x for y in func(t)] if type(x) is list else [x]
    >>> print(func(a))
    [1, 2, 3, 7, 8, 9, 3, 4, 5, 6]
    

    默认参数坑

    Python的默认参数在编译阶段就创建了,可变对象容易坑

    >>> def myfunc(num, lst=[]):
        lst.append(num)
        print(lst)
    >>> myfunc(1)
    [1]
    >>> myfunc(2)
    [1, 2]
    

    排序可以传多个参数

    >>> sorted([1, 2, 3, 0, -1, -2, -3], key=lambda x:(x<0, abs(x)))
    [0, 1, 2, 3, -1, -2, -3]
    

    相关文章

      网友评论

          本文标题:不怎么用到的Python技巧(2)

          本文链接:https://www.haomeiwen.com/subject/olzdvqtx.html