如何采用python语言绘制一条_python基础题

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 = time.time()

... self._func()

... end_time = time.time()

... print('花费了 %.2f' % (end_time - start_time))

...

>>> @Foo # bar=Foo(bar)

... def bar():

... print('bar函数的执行时间为:')

... time.sleep(2.5)

...

>>> bar() # bar=Foo(bar)(),没有嵌套关系了,直接执行Foo的 __call__方法,实现装饰功能

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

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

51、在Python中unittest是什么?

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

52、__new__和__init__的区别

p50844543.webp

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(dict.items(),key = lambda i:i[0],reverse = True)

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

list2.sort(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):

self.queueA=[]

self.queueB=[]

def push(self, node):

self.queueA.append(node)

def pop(self):

if len(self.queueA)==0:

return None

while len(self.queueA)!=1:

self.queueB.append(self.queueA.pop(0))

self.queueA,self.queueB=self.queueB,self.queueA #交换是为了下一次的pop

return self.queueB.pop()

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"],分别求出x.join(y)和x.join(z)返回的结果

41、举例说明异常模块中try except else finally的相关意义

42、python中交换两个数值

43、举例说明zip()函数用法

44、a="张明 98分",用re.sub,将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='https://sycm.taobao.com/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\ry-wu.junya\Desktop>python 1.py 22 33命令行启动程序并传参,print(sys.argv)会输出什么数据?

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、正则匹配以163.com结尾的邮箱

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、正则表达式匹配出

www.itcast.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值