美文网首页
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三个必知知识点

    +、+=、extend()之间的区别与应用场景 首先看测试用例: 由源代码片段可知: python列表推导式 列表...

  • 一些课程或书

    Excel 数据库《MySQL必知必会》 Python《Python Cookbook》《Web scraping...

  • 大厂Python高手都在用的库!!还不知道你就out了

    工具:Sublime Text 语言:Python3.6 高手必知的库: collections concurre...

  • 新手学Python必知

    一、有一台够用的电脑。 二、入手一本好的教程。对于本人来说,觉得非常好的教材,我推一本《Python 编程从入门到...

  • python必知必会1

    新篇章系列开启,围绕两个部分,一是python编程基础与特性,二是数据结构与算法。 Q:列表和元组之间的区别是什么...

  • python必知必会8

    什么是闭包? 实现闭包的要素是哪些?闭包中的自由变量的绑定?nonlocal 的使用? 在一个内部函数中,对外部作...

  • python必知必会9

    生成器和迭代器 迭代是处理数据的重要环节,基本上对大量数据的处理上,我们都需要对数据进行迭代操作,如何在节省内存开...

  • python必知必会3

    如何求两个列表的交集、差集、并集? 求交集: list(set(a) & set(b))求差集: list(set...

  • python必知必会5

    Python 的 super 方法有什么用? 面向对象编程的主要优点之一是重用。继承是实现继承的机制之一。 在继承...

  • python必知必会4

    解释一下 python 中 pass 语句的作用 pass是一个空操作。当它被执行时,什么都不发生。它适合当语法上...

网友评论

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

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