python近期遇到的一些面试问题(三)

整理一下最近被问到的一些高频率的面试问题。总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们。

前两期点这↓

python近期遇到的一些面试问题(一)

python近期遇到的一些面试问题(二)

1.请写一个邮箱的正则表达式

电子邮件地址有统一的标准格式:用户名@服务器域名。用户名表示邮件信箱、注册名或信件接收者的用户标识,@符号后是你使用的邮件服务器的域名。@可以读成“at”,也就是“在”的意思。整个电子邮件地址可理解为网络中某台服务器上的某个用户的地址。

答案

1.用户名,可以自己选择。由字母a~z(不区分大小写)、数字0~9、点、减号或下划线组成;只能以数字或字母开头和结尾

2.与你使用的网站有关,代表邮箱服务商。例如网易的有@163.com新浪有@vip.sina.com等

网上看到了各种各样的版本,都不确定用哪个,于是自己简单的总结了一个。大家有更好的欢迎留言。

r"^[a-zA-Z0-9]+[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"

下面解释上面的表达式

1.首先强调一点关于\w的含义,\w匹配英文字母和俄语字母或数字或下划线或汉字

2.注意^[]和[^]的区别,[]表示字符集合,^[]表示已[]内的任意字符集开始,[^]表示

3.^[a-zA-Z0-9]+:这里注意^[]和[^]的,第一个^表示已什么开头,第二个[]的^表示不等于[]内。

所以这段表示以英文字母和数字开头,后面紧跟的+,限定其个数>=1个。

4.[a-zA-Z0-9_.+-]+:表示匹配英文字母和数字开头以及_.+-,的任意一个字符,并限定其个数>=1个。

为了考虑@前面可能出现.+-(但是不在开头出现)。

[email protected]就是邮箱必备符号了

[email protected][a-zA-Z0-9-]+.:前面的不用说了,后面的.表示.转义了,也是必备符号。

[a-zA-Z0-9-.]+$

:dollar符表示以什么结束,这里表示以英文字和数字或-. 1个或多个结尾。

来个例子验证一波:

import re
plt=re.compile(r"^[a-zA-Z0-9]+[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")
b=plt.findall(‘[email protected]‘)
print(b)

网上找了个验证邮件地址的通用正则表达式(符合 RFC 5322 标准)

(?:[a-z0-9!#$%&‘*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&‘*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

2.以下两段代码运行之后结果是否相同?为什么?

第一段

l=[]
for i in range(10):
    l.append({‘num‘:i})
print(l)  

第二段

l=[]
a={‘num‘:0}
for i in range(10):
    a[‘num‘]=i
    l.append(a)
print(l)

答案

首先分析第一段,{‘num‘:i}的循环里面,每一次循环都产生一个新的字典类型,所以这个比较简单结果是

[{‘num‘: 0}, {‘num‘: 1}, {‘num‘: 2}, {‘num‘: 3}, {‘num‘: 4}, {‘num‘: 5}, {‘num‘: 6}, {‘num‘: 7}, {‘num‘: 8}, {‘num‘: 9}]

第二段情况就有些特殊了,a={‘num‘:0}表示把映射类型字典的引用给了a,循环a[‘num‘]=i的时候,a的引用地址不变,所以取了最后一次循环的值。

[{‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}, {‘num‘: 9}]

3.请写出下列代码的输出的内容:

def test1():
   for i in range(2):
       print(‘+‘+str(i))
       yield str(i)
for a in test1():
       print(‘-‘+a)
for a in list(test1()):
      print(‘-‘+a)
   

答案

首先我们分析test1()打印的是什么,

<generator object test1 at 0x7faf31262d70>

可以看到是生成器一枚。

第一个for循环

+0 -0 +1 -1

第二个for循环,首先我们看list(test1())就知道了,首先需要执行完生成器里的循环获取然后转出list即[0,1]。

然后在循环这个list所以结果是。

+0 +1 -0 -1

4.请写出下面代码输出的内存:

a=zip((‘a‘,‘b‘,‘c‘),(1,2,3,4))

print(dict(a))

答案

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。

所以这里按照最短的元素组成的字典输出是。

{‘a‘:1,‘b‘:2,‘c‘:3}

5.请实现下面对象的序列号和反序列化。

class User():
     name=‘user1‘
     age=30

答案

我们把变量从内存中变成可存储或传输的过程称之为序列化

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化

另外我们使用的模块是pickle

1、只能在python中使用,只支持python的基本数据类型。
2、可以处理复杂的序列化语法。(例如自定义的类的方法,游戏的存档等)
3、序列化的时候,只是序列化了整个序列对象,而不是内存地址。

pickle.dumps()方法把任意对象序列化成一个bytes.所以我们首先需要创建一个对象即u=User()

然后我们再把这个对象序列化。即

bytes=pickle.dumps(u)

然后是反序列化:

用pickle.loads()方法反序列化出对象.即

object=pickle.loads(bytes)

6.写出下面代码的输出内容:

for n in filter(lambda n:n%5,[n for n in range(100) if n%5==0]):
    print(n)
else:
   print(‘12345‘)

答案

首先我们知道filter的用法

filter(function, iterable)

其中还

function -- 判断函数。

iterable -- 可迭代对象。

返回 True 或 False

但是这个题比较坑 n%5和n%5==0的区别 ,n%5是n除以5求其余数。n%5==0是n的5整除。

lambda n:n%5这个返回的是个数字而不是一个布尔类型不符合filter的要求,所以输出12345。

要达到筛选效果我们可以这样改.

for n in filter(lambda n:n%5==0,[n for n in range(100) if n%5==0]):
    print(n)

但是如果我们这样改呢,

for i in filter(lambda n:n%5==0,[n for n in range(100) if n%5==0]):
    print(n)

结果就比较有意思了,大家可以考虑下为什么。

原文地址:https://www.cnblogs.com/c-x-a/p/9271437.html

时间: 2024-08-01 09:03:00

python近期遇到的一些面试问题(三)的相关文章

python近期遇到的一些面试问题(一)

整理一下最近被问到的一些高频率的面试问题.总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们. 1.python的基本数据类型 主要核心类型分为两类不可变类型:数字(int float bool complex),字符串(string),元祖(tuple),不可变集合(frozenset). 可变类型:列表(list),字典(dict),集合(set)这里的可变不可变,是指内存中的值是否可以被改变 补充一点,其中不可变集合就是一个无序的不可变的集合,元素也只能是可hash的主要用来做字典的键

python近期遇到的一些面试问题(二)

1. 解释什么是栈溢出,在什么情况下可能出现. 栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围.在Python中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出.以上内容来自百度百科.https://baike.baidu.com/item/%E6%A0%88%E6%BA%A

Python编程从入门到实践(第三、四章的列表和元祖) &#142015;

原文: http://blog.gqylpy.com/gqy/414 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

python之转移字符(学习笔记三)

python之转移字符(学习笔记三) 转义字符 \ 可以转义很多字符,比如 \n 表示换行, \t 表示制表符,字符 \ 本身也要转义,所以 \\ 表示的字符就是 \ ,可以在Python的交互式命令行用print打印字符串看看: 命令: >>>print 'he\'s a boy.' >>>print 'I\'m learning\nlinux.' >>>print '\\\n\\' 截图: 如果字符串里面有很多字符都需要转义,就需要加很多 \ ,为

记一次Python Web后端开发电话面试

电话面试是在前天周三下午就约好了的.原本电话那头是想当时就进行沟通的,但在得知我在上班后选择了另约时间,刚好那天晚上面试官也没时间,遂改为周六9:30~10:00这个时间. 昨天不知是怎么了,可能是在公司盯屏幕盯太久了,一回来发现右眼已经满眼血丝,吃完晚饭后眼睛也是疼得不行,所以8点多就不知不觉睡着了.半夜十二点多醒来,发现睡不着了,玩了会手机又重新调了下闹钟,生怕睡过头了.还好,八点十多分醒过来了,九点左右已经做好接电话的准备了,趁着还有半个小时还赶忙把<Flask Web开发>这本书给过了

用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 前文: 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 使用额外的文件 假如你跑的job除了输入以外还需要一些额外的文件(side data),有两种选择: 大文件 所谓的大文件就是大小大于设置的local.cache.size的文件,默认是10GB.这个时候可以用-fil

聊聊阿里面试的三个层次!

最近去阿里的菜鸟国际做了一次面试交流,发现大公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导.虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法.但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求.如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余. 一般来说,阿里的面试会有两轮的技术电面,分别交叉检验你的技术基础.后面还有两轮的现场技术面试,主要检验你的项目经验.但从知识体系的角度来看,阿里面试对于