【14】机器学习算法面试八股

251装饰器

装饰器可以实现,在不改变函数或类的内部代码与调用方式的情况下,使其拥有额外的功能。
应用场景:插入日志、性能测试、事务处理、缓存、权限校验
链接
装饰器实际上就是为了给某程序增添功能

  1. 不能修改被装饰的函数的源代码
  2. 不能修改被装饰的函数的调用方式
  3. 满足1、2的情况下给程序增添功能
    函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器

高阶函数
那么对于高阶函数的形式可以有两种:
5. 把一个函数名当作实参传给另外一个函数(“实参高阶函数”)
6. 返回值中包含函数名(“返回值高阶函数”)
嵌套函数指的是在函数内部定义一个函数,而不是调用

252python有哪些数据类型

数字,字符串,列表,元组,字典,集合

253Python 中列表( List )中的 del,remove,和 pop 等的用法和区别在这里插入图片描述

254python yeild 和return的区别

共同点:return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的。
不同点:如果要返回的数据是通过for等循环生成的迭代器类型数据(如列表、元组),return只能在循环外部一次性地返回,yeild则可以在循环内部逐个元素返回。

255python set底层实现

Python中的dict和set都是通过散列表来实现的。

256python字典和set()的区别

  1. 字典是一系列无序的键值对的组合;集合里的元素不是键值对,是单一的一个元素。
  2. 从python3.6后,字典有序;集合无序
  3. 字典键不能重复;集合元素不能重复

257怎么对字典的值进行排序?

方法一:转化为元组,(91,“张三”)的形式 ,用sorted()函数进行排序
方法二 :设置sorted() 中key的参数的值
在这里插入图片描述

258__init__和__new__和__call__的区别

__init__是初始化方法,
__new__实例化对象
call:允许一个类的实例像函数一样被调用。实质上说,这意味着 x() 与 x.call() 是相同的
init.py 文件的作用以及意义
这个文件定义了包的属性和方法,它可以什么也不定义;
可以只是一个空文件,但是必须存在。
如果 init.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

259import常用库

time, random, sys, os, math

260python的lambda函数

它是一个单独的表达式匿名函数,通常用作内联函数

261Python内存管理,内存优化

  1. 垃圾回收
    当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们
  2. 引用计数
    对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数
  3. 内存池机制
    Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放,大的对象则使用系统的malloc

262Python中类方法和静态方法、属性的区@classmethod, @staticmethod, @property?

@classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数.这些都是装饰器(decorator)。装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类
当我们需要和类直接进行交互,而不需要和实例进行交互时,类方法是最好的选择。类方法与实例方法类似,但是传递的不是类的实例,而是类本身,第一个参数是cls。我们可以用类的实例调用类方法,也可以直接用类名来调用。
使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用
从它们的使用上来看,
• @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
• @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

Python 类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。
静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。

@classmethod, @staticmethod, @property?
@classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数.这些都是装饰器(decorator)。装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类
当我们需要和类直接进行交互,而不需要和实例进行交互时,类方法是最好的选择。类方法与实例方法类似,但是传递的不是类的实例,而是类本身,第一个参数是cls。我们可以用类的实例调用类方法,也可以直接用类名来调用。
使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用
从它们的使用上来看,
• @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
• @classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
在这里插入图片描述通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”小括号。
在这里插入图片描述
链接

263python多线程怎么实现

Python 提供多线程编程的模块有以下几个:
• _thread
• threading
• Queue
• multiprocessing

264点积和矩阵相乘的区别?

在这里插入图片描述

265Python中错误和异常处理

python中会发生两种类型的错误。

  1. 语法错误:如果未遵循正确的语言语法,则会引发语法错误。比如少写了一个冒号:或少了tab。这种错误编译器会为我们指出来,不用我们担心。
  2. 逻辑错误(异常):在运行时中,通过语法测试后发生错误的情况称为异常或逻辑类型。比如除数除以0,运行时就会抛出一个抛出一个ZeroDivisionError异常,叫处理异常。处理方式为:通过 try…except…finally 代码块来处理捕获异常并手动处理

266Python 的传参是传值还是传址?

传对象(call by object)

267什么是猴子补丁?

在动态语言中,不去改变源码而对功能进行追加和变更

268当退出 Python 时是否释放所有内存分配?

否定的。那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放。另外不会释放 C 库保留的部分内容。

269Python 中的 is 和 == 有什么区别?

is比较的是两个对象的id值是否相等,也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址。
==比较的是两个对象的内容是否相等,默认会调用对象的eq()方法

270gbk和utf8的区别

GBK编码专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。
UTF-8 编码是多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8 节省空间。
GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT与Fintech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值