Python三天速成
文章平均质量分 82
水木流年追梦
清华大学计算机研究生,专研算法工程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【python面试宝典12】is和==的区别、range和xrange的区别
前面有提到由于 Python 基于 C 语言编写的解释器中设置了一个 GIL 全局变量锁,该锁使得 Python 的多线程在处理 CPU 计算密集型任务时,同一时刻只能有一个线程在运行,这也是为什么说 Python 的多线程是一个「假性多线程」的原因。新式类中,类的继承按照「C3 算法」的原则:如果子类在继承来自不同父类的方法是不一样的时候,会从下而上,先左后右的合并继承方法。对于现如今的 Python 3.x,这个问题其实已经没有什么意义了,由于其在各大面经中都出现过,这里简单解释下。原创 2024-10-10 23:33:31 · 924 阅读 · 0 评论 -
【python面试宝典11】多进程、多线程和协程
由于进程的执行顺序问题,造成了 pr 先于 pw 执行,所以 pr 未读取到数据,pr 进程任务结束,堵塞解开,主进程继续向下运行,最后 pw 任务结束。进程之间的通信可以通过队列(Queue)来进行,多个进程一部分向队列里写入数据,一部分从队列里读取数据,从而完成多进程之间的通信问题。线程是进程下的一部分,进程下负责执行代码程序的就是线程,一个进程下会有很多个线程。在这中间只有一个线程在运行,任务的切换时机由程序员自己控制,避免了由于多线程之间的切换消耗,这样就简单实现了协程。异步(asyncio)原创 2024-10-09 21:10:16 · 1522 阅读 · 0 评论 -
【python面试宝典10】装饰器、元类、迭代器和生成器
类属性相当于全部变量,所有由类创建出来的实例,都可以使用,而实例属性相当于局部变量,只能由该实例自己使用,当类属性与实例属性命名一样时,在调用该同名属性时,会屏蔽掉类属性,调用实例属性,这点跟 LEGB 很像。鸭子类型指的是 Python 不用定义变量类型,只要该变量像是什么类型,那么就认为它就是什么类型,我们更多关注的是它的行为,而不是它的类型。在获取实例属性时,一般采用定义一个实例方法的方式获取属性,避免直接对实例属性进行操作,起到一个保护属性的作用。里传入的值,则需要在生成器中添加接收的变量。原创 2024-10-09 21:10:00 · 718 阅读 · 0 评论 -
【python面试宝典9】什么是单例,如何实现
单例是指一个类的实例有且只有一个。一般在一个类只需要使用一次之后便不在使用时使用。实现方式:使用__new__()方法# 结果为 True使用装饰器pass# 结果为 True多线程下实现单例# 结果为 True多线程优化# 单例判断提前,只在第一次判断时加锁,避免无意义的加锁解锁# 结果为 True第二次更新。原创 2024-10-08 22:36:31 · 914 阅读 · 0 评论 -
【python面试宝典8】装饰器
在使用面向对象编程语言的时候,定义类是最常见的一件事情,有的时候,我们会用到只有属性没有方法的类,这种类的对象通常只用于组织数据,并不能接收消息,所以我们把这种类称为数据类或者退化的类,就像C语言中的结构体那样。和普通元组不同的是,命名元组中的数据有访问名称,可以通过名称而不是索引来获取保存的数据,不仅在操作上更加简单,代码的可读性也会更好。:写一个函数,传入的参数是一个列表(列表中的元素可能也是一个列表),返回该列表最大的嵌套深度。,在我参加过的面试中,90%的面试者都不能准确的说出它的作用和应用场景。原创 2024-10-08 22:36:17 · 1193 阅读 · 0 评论 -
【python面试宝典6】猴子补丁
如果使用PyCharm,可以利用“Run”菜单的“Profile”菜单项对代码进行性能分析,PyCharm中可以用表格或者调用图(Call Graph)的方式来显示性能剖析的结果。很多系统的安全补丁也是通过猴子补丁的方式来实现的,但实际开发中应该避免对猴子补丁的使用,以免造成代码行为不一致的问题。的时候,不用修改任何代码就可以实现对代码的协程化,达到提升性能的目的,这就是对猴子补丁的应用。模块提供的函数除了生成均匀分布的随机数外,还可以生成其他分布的随机数,例如。,也可以使用猴子补丁的方式,代码如下所示。原创 2024-10-05 09:29:07 · 1198 阅读 · 0 评论 -
【python面试宝典7】线程池,模块和包
如果应用程序需要频繁的将任务派发到线程中执行,线程池就是必选项,因为创建和释放线程涉及到大量的系统底层操作,开销较大,如果能够在应用程序工作期间,将创建和释放线程的操作变成预创建和借还操作,将大大减少底层开销。在排序阶段,先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件,然后在归并阶段将这些临时文件组合为一个大的有序文件,这个大的有序文件就是排序的结果。的文件,否则无法导入这个包。就是线程池的实现,如果要弄清楚它的工作原理,可以参考下面的内容。原创 2024-10-05 09:28:52 · 1080 阅读 · 0 评论 -
【python面试宝典5】装饰器、闭包
鸭子类型是动态类型语言判断一个对象是不是某种类型时使用的方法,也叫做鸭子判定法。简单的说,鸭子类型是指判断一只鸟是不是鸭子,我们只关心它游泳像不像鸭子、叫起来像不像鸭子、走路像不像鸭子就足够了。换言之,如果对象的行为跟我们的预期是一致的(能够接受某些消息),我们就认定它是某种类型的对象。bytesbytearraymemoryviewStringIOBytesIOGzipFilesocketstrbytes),其中file-like对象都能支持read和write。原创 2024-10-04 23:39:03 · 1498 阅读 · 0 评论 -
【python面试宝典4】函数参数*arg和**kwargs分别代表什么
Pylint可以检查出代码错误、坏味道、不规范的代码等问题,较新的版本中还提供了代码复杂度统计数据,可以生成检查报告。:Python标准库中的模块非常多,建议大家根据自己过往的项目经历来介绍你用过的标准库和三方库,因为这些是你最为熟悉的,经得起面试官深挖的。个或任意多个参数,当不确定调用者会传入多少个位置参数时,就可以使用可变参数,它会将传入的参数打包成一个元组。:魔术方法也称为魔法方法,是Python中的特色语法,也是面试中的高频问题。的方式传入的参数,传入的参数的会打包成一个字典。原创 2024-10-04 23:38:50 · 981 阅读 · 0 评论 -
【python面试宝典3】遍历文件夹
还有一个非常类似的题目:“一个小朋友走楼梯,一次可以走1个台阶、2个台阶或3个台阶,问走完10个台阶一共有多少种走法?”,这两个题目的思路是一样,如果用递归函数来写的话非常简单。装饰器会缓存函数的执行结果,这样就可以减少重复运算所造成的开销,这是空间换时间的策略,也是动态规划的编程思想。模块提供了很多进行路径操作的工具函数,在项目开发中也是经常会用到的。的子类,它会将传入的序列中的每个元素作为键,元素出现的次数作为值来构造字典。,如果不做这个优化,上面代码的渐近时间复杂度将会是。:送人头的题目,不解释。原创 2024-10-03 10:38:43 · 760 阅读 · 0 评论 -
【python面试宝典2】内存管理
再者Python中函数的参数可以有默认值,可以使用可变参数和关键字参数,因此即便没有函数重载,也要可以让一个函数根据调用者传入的参数产生不同的行为。Python提供了自动化的内存管理,也就是说内存空间的分配与释放都是由Python解释器在运行时自动进行的,自动管理内存功能极大的减轻程序员的工作负担,也能够帮助程序员在一定程度上解决内存泄露的问题。:在循环引用对象的回收中,整个应用程序会被暂停,为了减少应用程序暂停的时间,Python 通过分代回收(空间换时间)的方法提高垃圾回收效率。原创 2024-10-03 10:38:20 · 1123 阅读 · 0 评论 -
【python面试宝典1】单例模式、深拷贝和浅拷贝
对象拷贝其实是更为快捷的创建对象的方式。所以回答这个题目的要点不仅仅是能够说出浅拷贝和深拷贝的区别,深拷贝的时候可能遇到的两大问题,还要说出Python标准库对浅拷贝和深拷贝的支持,然后可以说说列表、字典如何实现拷贝操作以及如何通过序列化和反序列的方式实现深拷贝,最后还可以提到设计模式中的原型模式以及它在项目中的应用。:典型的送人头的题目,通常交换两个变量需要借助一个中间变量,如果不允许使用中间变量,在其他编程语言中可以使用异或运算的方式来实现交换两个变量的值,但是Python中有更为简单明了的做法。原创 2024-10-02 01:30:49 · 1015 阅读 · 0 评论 -
【python进阶攻略14】上下文管理器
上下文管理器允许你在有需要的时候,精确地分配和释放资源。使用上下文管理器最广泛的案例就是with语句了。想象下你有两个需要结对执行的相关操作,然后还要在它们中间放置一段代码。上下文管理器就是专门让你做这种事情的。上面这段代码打开了一个文件,往里面写入了一些数据,然后关闭该文件。如果在往文件写数据时发生异常,它也会尝试去关闭文件。当与第一个例子对比时,我们可以看到,通过使用with,许多样板代码(boilerplate code)被消掉了。这就是with。原创 2024-10-02 01:30:43 · 891 阅读 · 0 评论 -
【python进阶攻略13】协程、内存copy、多进程
Python中的协程和生成器很相似但又稍有不同。首先我们先来回顾下生成器的创建过程。然后我们经常在for这样做不仅快而且不会给内存带来压力,因为我们所需要的值都是动态生成的而不是将他们存储在一个列表中。更概括的说如果现在我们在上面的例子中使用yield便可获得了一个协程。协程会消费掉发送给它的值。Python实现的grep等等!yield返回了什么?啊哈,我们已经把它变成了一个协程。它将不再包含任何初始值,相反要从外部传值给它。我们可以通过send()方法向它传值。发送的值会被yield接收。原创 2024-10-01 01:06:12 · 896 阅读 · 0 评论 -
【python进阶攻略12】C扩展
CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypesSWIG。每种方式也都有各自的利弊。首先,我们要明确为什么要在Python中调用C?原创 2024-10-01 01:06:07 · 1599 阅读 · 0 评论 -
【python进阶攻略11】一行式、For - Else
本章节,我将向大家展示一些一行式的Python命令,这些程序将对你非常有帮助。你是否想过通过网络快速共享文件?好消息,Python为你提供了这样的功能。你可以在Python REPL漂亮的打印出列表和字典。这种方法在字典上更为有效。cProfile是一个比profile更快的实现,因为它是用c写的在命令行执行这条指令确保更换为你想要转换的csv文件您可以通过使用itertools包中的轻松快速的辗平一个列表。避免类初始化时大量重复的赋值语句更多的一行方法请参考。原创 2024-09-30 22:24:30 · 425 阅读 · 0 评论 -
【python进阶攻略10】异常、lambda表达式
异常处理是一种艺术,一旦你掌握,会授予你无穷的力量。我将要向你展示我们能处理异常的一些方式。最基本的术语里我们知道了try/except从句。可能触发异常产生的代码会放到try语句块里,而处理异常的代码会在except语句块里实现。上面的例子里,我们仅仅在处理一个IOError的异常。大部分初学者还不知道的是,我们可以处理多个异常。原创 2024-09-30 22:24:24 · 622 阅读 · 0 评论 -
【python进阶攻略9】对象自省、推导式
自省(introspection),在计算机编程领域里,是指在运行时来判断一个对象的类型的能力。它是Python的强项之一。Python中所有一切都是一个对象,而且我们可以仔细勘察那些对象。Python还包含了许多内置函数和模块来帮助我们。dir在这个小节里我们会学习到dir以及它在自省方面如何给我们提供便利。它是用于自省的最重要的函数之一。它返回一个列表,列出了一个对象所拥有的属性和方法。上面的自省给了我们一个列表对象的所有方法的名字。当你没法回忆起一个方法的名字,这会非常有帮助。如果我们运行。原创 2024-09-29 11:49:39 · 374 阅读 · 0 评论 -
【python进阶攻略8】枚举、__slots__魔法、虚拟环境
virtualenv。原创 2024-09-29 11:49:33 · 508 阅读 · 0 评论 -
【python进阶攻略7】容器
我们也可以限制这个列表的大小,当超出你设定的限制时,数据会从对队列另一端被挤出去(pop)。另一种重要的是例子就是:当你在一个字典中对一个键进行嵌套赋值时,如果这个键不存在,会触发。,所以它们很轻量,与普通的元组比,并不需要更多的内存。,因为他按到了Shift键,或者输入了’CAT’,甚至’kitten’?一个元组是一个不可变的列表,你可以存储一个数据的序列,它和命名元组(你也不必使用整数索引来访问一个命名元组,这让你的代码更易于维护。,字段名称是’name’,‘age’和’type’。原创 2024-09-29 11:48:47 · 1258 阅读 · 0 评论 -
【python进阶攻略6】装饰器2
来想想这个问题,难道@wraps不也是个装饰器吗?但是,它接收一个参数,就像任何普通的函数能做的那样。那么,为什么我们不也那样做呢?这是因为,当你使用语法时,你是在应用一个以单个函数作为参数的一个包裹函数。记住,Python里每个东西都是一个对象,而且这包括函数!记住了这些,我们可以编写一下能返回一个包裹函数的函数。原创 2024-09-28 00:19:49 · 511 阅读 · 0 评论 -
【python进阶攻略5】装饰器1
刚才那些就是函数的基本知识了。我们来让你的知识更进一步。hi()# 上面展示了无论何时你调用hi(), greet()和welcome()将会同时被调用。# 然后greet()和welcome()函数在hi()函数之外是不能访问的,比如:greet()那现在我们知道了可以在函数中定义另外的函数。也就是说:我们可以创建嵌套的函数。现在你需要再多学一点,就是函数也能返回函数。原创 2024-09-28 00:19:43 · 1196 阅读 · 0 评论 -
【python进阶攻略4】Global、Return和对象变动Mutation
你也许遇到过, python中一些函数在最尾部有一个return关键字。你知道它是干嘛吗?它和其他语言的return类似。上面这个函数将两个值作为输入,然后输出它们相加之和。那首先我们来谈谈第一段也就是包含return关键字的代码。那个函数把值赋给了调用它的变量(也就是例子中的result变量)。大多数境况下,你并不需要使用global关键字。然而我们也来检查下另外一段也就是包含global关键字的代码。那个函数生成了一个global(全局)变量result。global在这的意思是什么?原创 2024-09-27 19:35:16 · 1122 阅读 · 0 评论 -
【python进阶攻略3】set集合和三元运算符
setset。原创 2024-09-27 19:35:04 · 745 阅读 · 0 评论 -
【shell脚本3】Shell脚本学习--运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。关系运算符只支持数字,不支持字符串,除非字符串的值是数字。是一款表达式计算工具,使用它能完成表达式的求值操作。文件测试运算符用于检测 Unix 文件的各种属性。原创 2024-09-22 09:21:57 · 431 阅读 · 0 评论 -
【python设计模式6】行为型模式1
责任链模式的内容:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链并沿着这条链传递该请求,直到有一个对象处理它为止。责任链的角色有抽象处理者、具体处理者和客户端。使用场景:有多个对象可以处理一个请求,哪个对象处理由运行时决定;在不明确接收者的情况下,向多个对象中的一个提交一个请求。优点是降低耦合度,一个对象无需知道是其它哪一个对象处理其请求。原创 2024-09-21 13:06:10 · 585 阅读 · 0 评论 -
【python设计模式7】行为型模式2
内容:定义一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。使用模板方法,需要用到两种角色,分别是抽象类和具体类。抽象类的作用是是定义抽象类(钩子操作),实现一个模板方法作为算法的骨架。模板方法适用的场景:一次性实现一个算法的不变部分,各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复;定义一个个算法,把它们封装起来,并且使它们可以相互替换。优点:定义了一些列可重用的算法和行为;缺点:客户必须了解不同的策略。原创 2024-09-21 13:06:06 · 261 阅读 · 0 评论 -
【python设计模式5】结构型模式2
保护代理:控制对原始对象的访问,用于对象有不同的访问权限。将对象组合成树形结构以表示“部分-整体”的层次结构(特别是结构是递归的),组合模式使得用户对单个对象和组合对象的使用具有一致性。使用虚代理后,可以和根据需要创建对象,用户不调用是不会创建 RealSubject 对象的,节省了内存的开销。外观模式为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。外观模式下的角色有外观和子系统类,优点是:减少系统相互依赖,提高灵活性,提高了安全性。原创 2024-09-21 00:15:24 · 334 阅读 · 0 评论 -
【python设计模式4】结构型模式1
将一个类的接口转换成客户希望的另外一个接口,适配器使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实现适配器的两种方式,类适配器使用多继承,对象适配器使用组合。组合就是一个类中放入另一类的对象。适配器模式有三种角色,分别是目标接口、待适配的类和适配器。适用场景是:想使用一个已存在的类,而它的接口不符合你的要求。想使用一些已经存在的类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。原创 2024-09-21 00:15:19 · 360 阅读 · 0 评论 -
Python高级互联网面试题_A卷20题
接口类:与抽象类很相似,表现在接口中定义的方法,必须由引用类实现,但他与抽象类的根本区别 在于用途:与不同个体间沟通的规则,你要进宿舍需要有钥匙,这个钥匙就是你与宿舍的接口,你的舍 友也有这个接口,所以他也能进入宿舍,你用手机通话,那么手机就是你与他人交流的接口。内存泄漏并非指内存在物理上的消 失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控 制,从而造成了内存的浪费。接口是抽象类的变体,接口中所有的方法都是抽象的,而抽象类中可以有非抽象方法,抽象类是声明。原创 2024-03-28 22:09:10 · 634 阅读 · 0 评论 -
Python命名规范
1.项目名称首字母大写+大写式驼峰,ProjectName2.模块名和包名全部小写+下划线驼峰module_name package_name3.类名称,异常首字母大写+大写式驼峰,class ClassName: ,ExceptionName4.全局变量、常量全部使用大写字母+下划线驼峰GLOBAL_VAR_NAME,CONSTANT_NAME5.方法名,函数名,其余变量,参数,实例全部小写+下划线驼峰method_name,function_name,insta..原创 2020-12-11 14:52:07 · 245 阅读 · 0 评论 -
python装饰器
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。举例:如何计算函数的执行时间?如下,你需要计算 add 函数的执行时间。# 函数def add(a, b): .原创 2020-06-12 19:48:11 · 456 阅读 · 0 评论 -
Python入门到精通三天速成第三讲——多重继承
前一讲,你肯定注意到了一个有点奇怪的细节:复数形式的 __bases__ 。前面说过,你可使用它来获悉类的基类,而基类可能有多个。为说明如何继承多个类,下面来创建几个类。class Calculator: def calculate(self, expression): self.value = eval(expression)class Talker: ...原创 2020-02-08 22:32:44 · 576 阅读 · 0 评论 -
Python入门到精通三天速成第二讲——类与继承
子类扩展了超类(父类)的定义。要指定超类,可在 class 语句中的类名后加上超类名,并将其用圆括号括起。class Filter: def init(self): self.blocked = [] def filter(self, sequence): return [x for x in sequence if x not in sel...原创 2020-02-08 13:35:31 · 583 阅读 · 0 评论 -
Python入门到精通三天速成第一讲——创建自定义类
class Person: def set_name(self, name): self.name = name def get_name(self): return self.name def greet(self): print("Hello, world! I'm {}.".format(self.name))...原创 2020-02-08 13:09:46 · 724 阅读 · 0 评论
分享