python基础题

时间:2024-10-21 07:01:37

47、metaclass作用?以及应用场景?

metaclass,直译为元类,简单的解释就是:当我们定义了类以后,就可以根据这个类创建出实例,

所以:先定义类,然后创建实例。但是如果我们想创建出类呢?那就必须根据metaclass创建出类,

所以:先定义metaclass,然后创建类。换句话说,你可以把类看成是metaclass创建出来的“实例”

48、用尽量多的方法实现单例模式。

1、基于__new__()方法

class Person:

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

if not hasattr(cls,cls._instance):

# cls._instance = object.__new__(cls)

cls._instance = super().__new__(cls)

return cls._instance

2、基于模块导入方式,现在一个py文件中写好一个类,实例化一个对象。以后用这个类直接导入这个模块就是单例模式。

3、基于装饰器方法实现

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

instance_dic = {}

def inner(*args, **kwargs):

if cls not in instance_dic:

instance_dic['cls'] = cls(*args, **kwargs)

return instance_dic['cls']

return inner

@singleton

class Person:

pass

49、装饰器的写法以及应用场景。

装饰器的写法:

def wrapper(func):

def inner(*args,**kwargs):

'被装饰之前的操作'

ret = func(*args,**kwargs)

'被装饰之后的操作'

return ret

return inner

装饰器的应用场景:

比如注册登录、插入日志,性能测试,事务处理,缓存等等场景

类装饰器的写法:
class Foo():
...     def __init__(self, func):    # 初始化函数中传入函数对象的参数
...         self._func = func
...     def __call__(self):    # 定义__call__方法,直接实现装饰功能
...         start_time = ()
...         self._func()
...         end_time = ()
...         print('花费了 %.2f' % (end_time - start_time))
... 
>>> @Foo  # bar=Foo(bar)
... def bar():
...     print('bar函数的执行时间为:')
...     (2.5)
... 
>>> bar()    # bar=Foo(bar)(),没有嵌套关系了,直接执行Foo的 __call__方法,实现装饰功能   

50、什么是Python的单元测试?

Python中的单元测试框架被称为unittest。它支持共享设置,自动化测试,测试关机代码,测试集合等。

51、在Python中unittest是什么?

从列表,元组,字符串等序列类型中选择一系列项目的机制被称为unittest。

52、__new__和__init__的区别

53、什么是Python中的模块和包?

在Python中,模块是构造程序的方式。每个Python程序文件都是一个模块,它导入其他模块,如对象和属性。

Python程序的文件夹是一个模块包,包可以有模块或子文件夹。

54、怎样才能跨模块共享全局变量?

要在单个程序的模块之间共享全局变量,请创建一个配置模块。在应用程序的所有模块中导入配置模块,该模块将作为跨模块的全局变量提供。

55、解释如何在Unix上创建一个Python脚本可执行文件?

要在Unix上创建Python脚本可执行文件需要做两件事情:

Script文件的模式必须是可执行的

第一行必须以#(#!/ usr / local / bin / python)开头

56、Python垃圾回收机制

Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。

这将返回范围[0,1)中的随机浮点数

57、解释如何访问用C语言编写的Python模块?

你可以通过下面的方法访问一个用C写成的模块,

Module = = PyImport_ImportModule(“”);

58、提到使用Python的五个好处?

Python包含了大多数互联网平台(如电子邮件,HTML等)的巨大标准库。

Python不需要显式的内存管理,因为解释器本身将内存分配给新变量并自动释放它们

由于使用方括号而提供易读性

易于初学者学习

具有内置的数据类型,可以节省编程时间和工作量,从而声明变量。

59、解释什么是Flask及其好处?

Flask是一个基于“Werkzeug,Jinja 2和良好意图”BSD许可的web微型框架,Werkzeug和jingja是它的两个依赖项。

Flask是微观框架的一部分。这意味着它将很少或不依赖于外部库,它使框架轻而易举,更新和安全漏洞更少。

60、Django,Pyramid和Flask有什么区别?

Flask是一个“微框架”,主要用于需求更简单的小型应用程序。在Flask中,你必须使用外部库。

Pyramid是为更大的应用程序建立的。它提供了灵活性,并让开发人员为他们的项目使用正确的工具。开发人员可以选择数据库,URL结构,模板样式等等。Pyramid可重新配置。

像Pyramid一样,Django也可以用于更大的应用程序。 它包括一个ORM。

61、Flask-WTF是什么,有什么特点?

Flask-WTF提供了与WTForms的简单集成,功能包括

与wtforms集成

使用csrf令牌安全形式

全球csrf保护

Reptcha支持

与Flask Uploads一起使用的文件上传

62、给定字典进行排序

给定dict = {'a':3,'bc':5,'c':3,'asd':4,'33':56,'d':0}

根据其键值进行排序

 sorted((),key = lambda i:i[0],reverse = True) 

 

list2 = [[1,2],[4,6],[3,1]]

(key = lambda x:x[0],reverse = False)

print list2

63、列出5个python标准库

os:提供了不少与操作系统相关联的函数

sys:   通常用于命令行参数

re:   正则匹配

math: 数学运算

datetime:处理日期时间

64、谈下python的GIL

GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。

多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

65、两个栈实现一个队列&两个队列实现一个栈

# 两个栈实现队列

   # 入队:元素进栈A

   # 出队:先判断栈B是否为空,为空则将栈A中的元素 pop 出来并 push 进栈B,再栈B出栈,如不为空则栈B直接出栈


class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] def appendTail(self,x): self._stack1.append(x) def deleteHead(self): if self._stack2: return self._stack2.pop() else: if self._stack1: while self._stack1: self._stack2.append(self._stack1.pop()) return self._stack2.pop() else: return None
# 两个队列实现一个栈
# 进栈:元素入队列A

# 出栈:判断如果队列A只有一个元素,则直接出队。否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队。为了下一次继续操作,互换队A和队B。

class Stock:
    def __init__(self):
        =[]
        =[]
def push(self, node): (node)
def pop(self): if len()==0: return None while len()!=1: ((0)) ,=, #交换是为了下一次的pop return ()

66、10个Linux常用命令

ls  pwd  cd  touch  rm  mkdir  tree  cp  mv  cat  more  grep  echo 

31、两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
32、用python删除文件和用linux命令删除文件方法
33、log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”
34、数据库优化查询方法
35、请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行
36、写一段自定义异常代码
37、正则表达式匹配中,(.*)和(.*?)匹配区别?
38、简述Django的orm
39、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
40、x="abc",y="def",z=["d","e","f"],分别求出(y)和(z)返回的结果
41、举例说明异常模块中try except else finally的相关意义
42、python中交换两个数值
43、举例说明zip()函数用法
44、a="张明 98分",用,将98替换为100
45、写5条常用sql语句
46、a="hello"和b="你好"编码成bytes类型
47、[1,2,3]+[4,5,6]的结果是多少?
48、提高python运行效率的方法
49、简述mysql和redis区别
50、遇到bug如何处理
51、1、正则匹配,匹配日期2018-03-20
url='/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20%7C2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462'
52、list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
53、写一个单列模式
54、保留两位小数
题目本身只有a="%.03f"%1.3335,让计算a的结果,为了扩充保留小数的思路,提供round方法(数值,保留位数)
55、求三个方法打印结果
56、列出常见的状态码和意义
57、分别从前端、后端、数据库阐述web项目的性能优化
58、使用pop和del删除字典中的"name"字段,dic={"name":"zs","age":18}
59、列出常见MYSQL数据存储引擎
60、计算代码运行结果,zip函数历史文章已经说了,得出[("a",1),("b",2),("c",3),("d",4),("e",5)]
61、简述同源策略
62、简述cookie和session的区别
63、简述多线程、多进程
64、简述any()和all()方法
65、IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常
66、python中copy和deepcopy区别
67、列出几种魔法方法并简要介绍用途
68、C:\Users\\Desktop>python 22 33命令行启动程序并传参,print()会输出什么数据?
69、请将[i for i in range(3)]改成生成器
70、a = "  hehheh  ",去除收尾空格
71、举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]
72、对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函数从小到大排序
73、使用lambda函数对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为
[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小
74、列表嵌套字典的排序,分别根据年龄和姓名排序
75、列表嵌套元组,分别按字母和数字排序
76、列表嵌套列表排序,年龄数字相同怎么办?
77、根据键对字典排序(方法一,zip函数)
78、根据键对字典排序(方法二,不用zip)
79、列表推导式、字典推导式、生成器
80、最后出一道检验题目,根据字符串长度排序,看排序是否灵活运用
81、举例说明SQL注入和解决办法
82、s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', 'shandong']
83、正则匹配以结尾的邮箱
84、递归求和
85、python字典和json字符串相互转化方法
86、MyISAM 与 InnoDB 区别:
87、统计字符串中某字符出现次数
88、字符串转化大小写
89、用两种方法去空格
90、正则匹配不是以4和7结尾的手机号
91、简述python引用计数机制
92、int("1.4"),int(1.4)输出结果?
93、列举3条以上PEP8编码规范
94、正则表达式匹配第一个URL
95、正则匹配中文
96、简述乐观锁和悲观锁
97、r、r+、rb、rb+文件打开模式区别
98、Linux命令重定向 > 和 >>
99、正则表达式匹配出<html><h1></h1></html>