python关于高级特性的问题

  

1。函数装饰器有什么作用?请列举说明?

2。Python垃圾回收机制?

3。魔法函数_call_怎么使用吗?

4。如何判断一个对象是函数还是方法?

5。@classmethod和@staticmethod用法和区别

6。Python中的接口如何实现?

7。Python中的反射了解么?

8。元类作用?以及应用场景?

9。setattr getattr hasattr()()()的用法

10。请列举你知道的Python的魔法方法及用途。

11。如何知道一个Python对象的类型?

12。Python的传参是传值还是传址吗?

13。Python中的元类(元)使用举例

14。简述任何()和()方法

15。过滤方法求出列表所有奇数并构造新列表,a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

16。什么是猴子补丁吗?

17。在Python中是如何管理内存的吗?

18岁。当退出Python时是否释放所有内存分配吗?

1。函数装饰器有什么作用?请列举说明?

答:装饰器就是一个函数,它可以在不需要做任何代码变动的前提下给一个函数增加额外功能,启动装饰的效果。   它经常用于有切面需求的场景,比如:插入日志,性能测试,事务处理,缓存,权限校验等场景。下面是一个日志功能的装饰器

从functools进口包装

def日志(标签):

def装修(函数):

@wraps(函数)

def _wrap (* args, * * kwargs):

试题:

func (* args, * * kwargs)

打印(“名字”,func.__name__)

除了异常e:

打印(e.args)

返回_wrap

返回装修

@log(“信息”)

def foo (a, b, c):

打印(a + b + c)

打印(“foo”)

#=装饰装修(foo)

if __name__==癬_main__”:

foo (1、2、3)

#装修()

2。Python垃圾回收机制?

答:Python不像c++, Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值,对Python   语言来讲,对象的类型和内存都是在运行时确定的。这也是为什么我们称Python语言为动态类型的原因。

主要体现在下面三个方法:

1。引用计数机制2。标记——清除3。分代回收

3。魔法函数_call_怎么使用吗?

答:叫可以把类实例当做函数调用。使用示例如下

类酒吧:

def __call__(自我,* args, * * kwargs):

打印(在呼叫)

if __name__==癬_main__”:

b=Bar ()

b ()

4。如何判断一个对象是函数还是方法?

答:看代码及结果就懂了

从类型进口MethodType FunctionType

类酒吧:

def foo(自我):

def foo2通过():

def通过运行():

打印(" foo是函数”,isinstance (Bar ()。foo, FunctionType))

打印(" foo是方法”,isinstance (Bar ()。foo, MethodType))

打印(“foo2是函数”,isinstance (foo2 FunctionType))

打印(“foo2是方法”,isinstance (foo2 MethodType))

if __name__==癬_main__”:

run ()

输出:

foo是函数假

foo是方法真正的

foo2是函数真的

foo2是方法假

5。@classmethod和@staticmethod用法和区别

答:

相同之处:@staticmethod和@classmethod都可以直接类名。方法名()来调用,不用在示例化一个类。

@classmethod我们要写一个只在类中运行而不在实例中运行的方法。如果我们想让方法不在实例中运行,可以这么做:

def iget_no_of_instance (ins_obj):

ins_obj.__class__返回。kl no_inst

类(对象):

no_inst=0

def __init__(自我):

kl。no_inst=kl。no_inst + 1

ik1=kl ()

ik2=kl ()

打印(iget_no_of_instance (ik1))

@staticmethod经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法:

印第安纳=薄?/p>

类kl(对象):

def __init__(自我、数据):

自我。data=https://www.yisu.com/zixun/data

@staticmethod

def check_ind ():

返回(印第安纳州=='在')

def do_reset(自我):

如果self.check_ind ():

打印(“重置为:做了”,self.data)

def set_db(自我):

如果self.check_ind ():

自我。db='新的数据库连接'

打印(db连接为:,self.data)

ik1=kl (12)

ik1.do_reset ()

ik1.set_db ()

6。Python中的接口如何实现?

答:

接口提取了一群类共同的函数,可以把接口当做一个函数的集合,然后让子类去实现接口中的函数。但是在Python中根本就没有一个叫做接口   的关键字,如果非要去模仿接口的概念,可以使用抽象类来实现。抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。使用abc   模块来实现抽象类。

python关于高级特性的问题