python面试9---高级特征

1.函数装饰器有什么作用?请列举说明?
装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

2.Python 垃圾回收机制?
最简单的,Python每个变量上都有一个引用计数器,当引用计数器为0时,自动销毁变量。复杂一些的,例如存在互相引用的情况,这时Python依靠两个链表(标记-清除算法)进行垃圾回收
https://testerhome.com/topics/16556

3.魔法函数 __call__怎么使用?

先来看一下常见的魔法方法:

__doc__  类(实例).__doc__ 类的描述信息 '''class des'''

__module__ 类(实例).__module__ 表示当前操作的对象在那个模块

__class__     表示当前操作的对象的类是什么

__call__ 类(实例)调用时(加括号)执行

__dict__查看类或实例的所有属性结果 为字典

__str__打印对象时执行

_call__
在Python中,函数其实是一个对象:

>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
123
由于 f 可以被调用,所以,f 被称为可调用对象。

所有的函数都是可调用对象。

4.如何判断一个对象是函数还是方法?
用内置的isinstance 来判断
https://blog.csdn.net/Da___Vinci/article/details/95599731

5.@classmethod 和@staticmethod 用法和区别
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。

6.Python中的接口如何实现?
在类中提前设置好方法,利用NotImplementedError错误,当子类没有覆写方法的时候进行报错。也可使用@abstractmethod对需要覆写的方法进行装饰,任何没有覆写该方法的子类都会报错。

7.Python 中的反射了解么?
反射是用于在类中寻找值的一种方式,有以下几种用法:hasattr(class, key)在实例中寻找是否存在key名的函数或是变量返回布尔值。getattr(class, key, tips)获得实例中变量或是方法的内存地址,可传入第三个参数修改报错提示。setattr(class, name, function)将函数以name为名字传入类中,通过 class.name(class) 的方式进行调用,setattr(class, name, value)传入变量及变量值,以class.name的形式调用。delattr(class, name)删除类中变量,不能删除函数。

8.hasattr() getattr() setattr()的用法
hasattr(object,name)查询类中是否存在符合关键字的函数或者方法,返回布尔值。getattr(object, name, [default])查询函数是否存在指定名字的变量或是方法,返回变量的值或者函数内存地址,若不存在报错或是返回 default 中的自定义内容

9.请列举你知道的 Python 的魔法方法及用途
init 初始化类中的部分属性,new 最先执行的部分,可用来实现单例类,功能与78题类似的 __getattr__试图访问类中不存在的属性时会调用该方法,可自定义返回值, setattr 对类的属性进行新增和赋值,可以进行简单的条件筛选, __delattr__用于删除类中的方法或是属性

10.如何知道一个 Python 对象的类型?
利用type()和isinstance(),前者用于区分对象的类型,后者主要用于区分子类与父类是否一致。

11.Python 的传参是传值还是传址?
都不是,Python当中所有东西都视作一个对象,每次的绑定都是在对象上增加一个引用,在使用过程中如果改变变量的值其实是将变量绑定到一个新对象上,如果修改对象的值那所有绑定在该对象的变量,在调用时都返回新值。

12.简述 any()和 all()方法
any(object)与all(object)区别,any主要判断对象中是否全为空值(0、’’、None、Flase)若对象内全部为空值则返回False否则返回True, all则是判断对象中是否存在空值,只要存在任一个空值则返回False否则返回True

13.filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(list(filter(lambda x: x % 2 != 0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值