首页 > 编程语言 > 详细

Python面试题

时间:2020-07-25 22:09:14      阅读:77      评论:0      收藏:0      [点我收藏+]

1. mro是什么

method resolution Order,方法解析顺序,方法调用时需要对当前类和基类进行搜索以确定方法艘在的位置,而搜索的顺序就是 方法解析顺序

2. 什么是c3算法

为了解决原来基于深度优先算法不满足本地优先级和单调性的问题,

本地优先级:声明时父类的顺序,C(A,B)

3. 面向对象中带双下划线的特殊方法

__setattr__:添加/修改属性时会触发

__delattr__:删除属性时触发

4. 双下划线和单下划线的区别

单:保护变量。只有类对象和子类对象能访问到这些变量

双:私有成员,只有类对象能访问,子类对象不能访问

5.上下文context你知道吗?(with的用法,如果类需要支持with语句,应该如何书写?)

基本格式 with context_expression [as target(s)]: with - body 这里context_expression要返回一个上下文管理器对象, 该对象并不赋值给as中的target(s),如果制定了as子句的话,会将上下文管理器的__enter__()和__exit__()两个方法context_manager.__enter__():进入上下文管理器的运行时上下文,在语句执行前调用,。with语句将该方法返回值赋值给as子句中的target,

6. 实现一个Singleton单例类,要求遵循基本语言编程规范(用尽量多的方式)

通过函数返回一个对象、装饰器实现、__new__

希望某一个对象仅在程序中出现一次,之后所有调用使用同一个对象

__new__

class RedisClient:

  _instance = None

  @classmethod

  def __new__(cls, *args, **kwargs):

    if not cls._instance:

      cls._instance = redis.StrictRedis(**REDIS_CONFIG, bd=0)

    return cls._instance

 

if __name__ == ‘__main__‘:

  r=RedisClient()

单例模式的优点核应用?

1.节省空间,全局内只有一个实例

2.数据库配置、数据库连接池

3.网站计数器

 

7. json序列化时,默认遇到中文会换成unicode,想保留中文怎么办?

json.dump({"ddf":"你好“”}, ensure_ascii = Flase)

8. 用python匹配HTMLtag的时候,<.*>和<.*?>有什么区别?

<.*>贪婪匹配,匹配所有

<.*?>非贪婪匹配,匹配到第一个就停了

9.如何判断一个邮箱合法

import re

if re.match(r‘^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$‘, email):

  print(‘right‘)

else:

  print(‘wrong‘)

10. 用列表生成式写一个0-100的列表

a = [i for i in range(100)]

11, 用列表生成式写一个取0-100的技术

b= [i for i in range(100) if i%2 != 0]

c =  [i for i in range(1,100,2)]

range可以设置步长

切片:字符串也有下标,【开始的下标:长度】

s = “hello world”

a = s[0:5]

切片加步长,每隔2个切一个[0:100:2]

d = [i for i in range(100)[::2]]

 

12.将类表中重复的元素过滤

lis = [1,2,2,3,3,5]

list(set(lis))

counter = {}定义一个计数器,用来保存元素在列表中出现的次数

for i in lis:

  if 

 

13.列表和元组的去表

li = []

tu = (1,2,3,4)#元组的元素不可变

14. 迭代器与生产器的区别

x = [1,2,3,4,5]

y = range(1,6)

list保存完整的值

generator不保存值

是什么:可以边迭代边计算,占用内存小

为什么要用:list中值都会存在内存中,当有大量数据时,且仅适用list中部分值,那么不适用的值就浪费了,生成器解决了这个问题

创建生成器:①将[1,2,3]改为(1,2,3)②当函数中使用了yield关键字,那么这个函数是一个generator,调用函数就是创建了一个生成器对象。

原理:生成器有一个next()方法,可以重复调用next()对象向生成器中取值,并且yield在return后会记住当前位置,并下次调用时从yield下一条语句开始执行

 

15.进程与线程的区别

线程是程序运行的最小单位

进程是操作系统管理的最小单元

进程可能包括好几个线程

 

16.说一下python中的多线程特点

一般编程语言中多线程可以利用CPU的多核心

python的多线程有GLI全局锁,不能真正意义上多核心

 

10.python怎么利用多核心

可以利用多进程实现

 

Python面试题

原文:https://www.cnblogs.com/liuhui666/p/13377449.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!