美文网首页
python三个必知知识点

python三个必知知识点

作者: 编程自习室 | 来源:发表于2018-12-28 11:01 被阅读4次
    python1228.png

    +、+=、extend()之间的区别与应用场景

    首先看测试用例:

    # 创建一个序列类型的对象
    my_list = [1, 2, 3]
    # 将现有的序列合并到my_list
    extend_my_list = my_list + [4, 5]
    
    print(extend_my_list)  # [1, 2, 3, 4, 5]
    # 将一个元组合并到这个序列
    extend_my_list = my_list + (6, 7)
    # 抛出异常 TypeError: can only concatenate list (not "tuple") to list
    print(extend_my_list)
    
    # 使用另一种方式合并
    extend_my_list += (6, 7)
    print(extend_my_list)  # [1, 2, 3, 4, 5, 6, 7]
    
    # 使用extend()函数进行合并
    
    extend_my_list.extend((7, 8))
    print(extend_my_list)  # [1, 2, 3, 4, 5, 6, 7, 7, 8]
    

    由源代码片段可知:

    class MutableSequence(Sequence):
    
        __slots__ = ()
    
        """All the operations on a read-write sequence.
    
        Concrete subclasses must provide __new__ or __init__,
        __getitem__, __setitem__, __delitem__, __len__, and insert().
    
        """
        # extend()方法内部使用for循环来append()元素,它接收一个可迭代序列
        def extend(self, values):
            'S.extend(iterable) -- extend sequence by appending elements from the iterable'
            for v in values:
                self.append(v)
        # 调用 += 运算的时候就是调用该函数,这个函数内部调用extend()方法
        def __iadd__(self, values):
            self.extend(values)
            return self​
    

    python列表推导式

    列表生成式要比操作列表效率高很多,但是列表生成式的滥用会导致代码可读性降低,并且列表生成式可以替换map()和reduce()函数。

    # 构建列表
    my_list = [x for x in range(9)]
    print(my_list)   # [0, 1, 2, 3, 4, 5, 6, 7, 8]
    # 构建0-8中为偶数的列表
    my_list = [x for x in range(9) if(x%2==0)]
    print(my_list)   # [0, 2, 4, 6, 8]
    # 构建0-8为奇数的列表,并将每个数字做平方运算
    def function(number):
        return number * number
    my_list = [function(x) for x in range(9) if x%2!=0]
    print(my_list)   # [1, 9, 25, 49]
    

    生成器表达式
    生成器表达式就是把列表表达式的中括号变成小括号。

    # 构造一个生成器
    gen = (i for i in range(9))
    # 生成器可以被遍历
    for i in gen:
        print(i)
    

    生成器可以使用list()函数转换为列表:

    # 将生成器转换为列表
    li = list(gen)
    print(li)
    字典推导式
    d = {
        'tom': 18,
        'alice': 16,
        'bob': 20,
    }
    dict = {key: value for key, value in d.items()}
    print(dict)  # {'tom': 18, 'alice': 16, 'bob': 20}
    

    Set集合推导式

    my_set = {i for i in range(9)}
    print(my_set)   # {0, 1, 2, 3, 4, 5, 6, 7, 8}
    

    python上下文管理器with语句与contextlib简化

    上下文管理器with语句与contextlib简化
    普通的异常捕获机制:

    try:
        pass
    except Exception as err:
        pass
    else:
        pass
    finally:
        pass
    

    with简化了异常捕获写法:

    class Demo(object):
    
        def __enter__(self):
            print("enter...")
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print("exit...")
    
        def echo_hello(self):
            print("Hello, Hello...")
    
    with Demo() as d:
        d.echo_hello()
    
    # enter...
    # Hello, Hello...
    # exit...
    
    import contextlib
    
    # 使用装饰器
    @contextlib.contextmanager
    def file_open(file_name):
        # 此处写__enter___函数中定义的代码
        print("enter function code...")
        yield {}
        # 此处写__exit__函数中定义的代码
        print("exit function code...")
    
    with file_open("json.json") as f:
        pass
    
    # enter function code...
    # exit function code...​
    

    相关文章

      网友评论

          本文标题:python三个必知知识点

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