美文网首页Python
2020--Python语法常考知识点

2020--Python语法常考知识点

作者: 宇宙之一粟 | 来源:发表于2020-09-21 22:55 被阅读0次

“A quitter never wins and a winner never quits” — Napoleon Hill

3.1 垃圾回收

垃圾回收是在正在运行的程序中查找将来无法访问的数据对象,并回收那些对象所使用的资源(尤其是内存)的过程。 自动垃圾收集的语言--Java,C#,Python和大多数脚本语言。 C是没有垃圾回收的语言-程序员需要了解何时应该分配和回收内存。

  • 大多数垃圾回收语言都使用引用计数(reference counting,跟踪对象的引用数量)或可达性分析(tracing,从“根”对象开始,查找可被一系列引用访问的对象,剩下没有被引用的对象将被视作“垃圾”被回收)。

  • Python使用引用计数,好处是当引用计数变为0时,它可以立即回收对象。这样做的代价是需要为每个对象存储一个附加的整数值。可达性分析(Java中使用)的好处是可以在独立的线程中执行,从而提高性能。缺点是,当垃圾收集器运行时,程序会暂停所有的线程。

  • 引用计数的缺点是无法解决“循环引用”,例如:对象A和对象B互相引用,A.x = BB.y = A,这样会引用计数不会变到1以下,即使没有其它的对象引用A和B,在这种情况下,垃圾收集器会定期查找并删除它们。

  • 垃圾收集器使用启发式方法提高速度。 例如,根据经验,最近创建的对象更有可能死掉。 因此,在创建对象时,将它们分配给不同的代,然后首先检查年轻的代。

3.2 深拷贝和浅拷贝

参看之前的文章:学习Python一年,这次终于弄懂了浅拷贝和深拷贝

问:浅拷贝和深拷贝的区别?

答:

  • copy.copy(x)copy.deepcopy(x),浅拷贝将构造一个新的复合对象,然后(在可能的范围内)将对原始对象中找到的对象的引用插入其中。 深拷贝将构造一个新的复合对象,然后递归地将原始对象中的对象的副本插入其中。

  • 浅拷贝和深拷贝之间的区别仅与复合对象有关,复合对象即包含其他对象(例如列表或类实例)的对象。

  • 如果已知客户端不会改变对象,可以少用copy。类似地,如果对象本身是不可变的,例如tuple,则无需拷贝它。

3.3 迭代器和生成器

问:迭代器和生成器的区别?

迭代器: 一个实现了__iter__()__next__()方法的对象。第一个方法返回迭代器对象本身,并在for和in语句中使用。第一个方法在迭代中返回下一个值,如果没有更多的元素,将引发StopIteration异常。

生成器: 创建迭代器的简便方法,使用关键字yield。生成器使用函数调用堆栈隐式存储迭代器的状态-与编写与作为显式类相同的迭代器相比,可以简化迭代器的编写。 它还有助于提高可读性。

每个生成器都是一个迭代器,但反过来就不正确。 特别是,迭代器可以是完全成熟的类,因此可以提供其他功能。 例如,在上面的迭代器类中添加一个方法来更改迭代限制很容易,这对于生成器是不可能的。

3.4 装饰器 @decorator

@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作

import time


def time_function(f):
    def wrapper(*args, **kwargs):
        begin = time.time()
        result = f(*args, **kwargs)
        end = time.time()
        print("Function call with argument {all_args} took ".format(
            all_args="\t".join((str(args), str(kwargs)))) + str(end - begin) +
              " seconds to execute.")
        return result

    return wrapper

3.5 List vs. tuple

Lists[1, 4, 7, "apple", 4], Tuple(3.14, "PI", 2,43, "e")

相同点:都是容器,且都能存放不同类型的数据,都能进行索引进行访问a[i]

不同点: 元组的是不可变的,不能改变索引a[i]的值,也不能从元组中增加/删除元素;但是列表可以。

不可变带来的好处:性能提升,容器友好,线程安全。元祖可以放在集合set中并用作键值,但列表不行。创建元组和访问速度稍快,并且内存占用量较小。

3.6 *args 和 *kwargs

都是用于函数中传递可变参数。*arg用于传递可变长度的参数列表:

  • 在函数中引用的参数称为args并不重要-它也可以称为Avarargs,args是习惯用法;
  • *必须跟着常规参数后面

第二个参数** kwargs在将可变数量的关键字参数传递给函数时使用。

  • 将函数中引用的参数称为args并不重要,也可以将其称为D或argdict。
  • **参数必须出现在所有常规命名参数和*参数之后
  • 关键字实参与命名实参有很大不同,其中命名实参的名称在函数本身中指定

3.7 错误处理、异常机制

3.8 lambda

increment_by_i = [lambda x: x + i for i in range(10)]
print(increment_by_i[3](4))

该程序将打印13(= 9 + 4),而不是预期的7(= 3 + 4)。 这是因为在循环中创建的函数具有相同的作用域。 它们使用相同的变量名称,因此,它们都引用相同的变量i,在循环末尾为10,因此为13(= 9 + 4)。

有很多方法可以得到所需的行为。 合理的方法是从函数返回lambda,从而避免命名冲突。

3.9 函数参数

什么是函数的位置参数,关键字参数和默认参数。

相关文章

  • 2020--Python语法常考知识点

    “A quitter never wins and a winner never quits” — Napoleo...

  • 22年护考备考资料

    护考历年常考知识点总结 护考历年常考知识点总结

  • 义务教育法

    一起考教师常考知识点

  • 复试常考知识点②

    持续期缺口及持续期管理 持续期缺口是银行资产持续期与负债持续期和负债资产系数乘积的差额。银行通过调整资产与负债的期...

  • 复试常考知识点①

    商业银行如何利用利率敏感性缺口方法对资产负债进行管理 所谓资金缺口是指利率敏感资产与利率敏感负债的差额,用于衡量银...

  • JDBC常考知识点

    1. sql注入漏洞: jdbc 在使用 statement 传入 sql 语句时,如果传入的参数中有关建字单引号...

  • HTML常考知识点

    本章先介绍一些HTML最基础的考点,很多大长面试官喜欢由浅入深地考察知识。而对于一些基础问题的回答,很多同学反而因...

  • CSS常考知识点

    本章介绍一下CSS的知识点,CSS的东西很多,下面这些是比较高频的考点,希望对你有所帮助: 2.1 常用选择器 面...

  • 海量数据处理问题知识点复习手册

    前言 本文快速回顾了常考的知识点,用作面试复习,事半功倍。 -----正文开始----- 预备知识点 Bitmap...

  • 政治论述题,应该这么答!

    政治考试涉及背诵内容较多,对于常考的重要知识点务必要常记常看。以下几个知识点,你掌握了吗? 一、试述矛盾普遍性与特...

网友评论

    本文标题:2020--Python语法常考知识点

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