python高频面试问题(三)

简介: 整理一下最近被问到的一些高频率的面试问题。总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们。前两期点这↓python近期遇到的一些面试问题(一)python近期遇到的一些面试问题(二) 1.请写一个邮箱的正则表达式 电子邮件地址有统一的标准格式:用户名@服务器域名。

整理一下最近被问到的一些高频率的面试问题。总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们。
前两期点这↓
python近期遇到的一些面试问题(一)
python近期遇到的一些面试问题(二)

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

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

答案

1.用户名,可以自己选择。由字母a~z(不区分大小写)、数字0~9、点、减号或下划线组成;只能以数字或字母开头和结尾
2.与你使用的网站有关,代表邮箱服务商。例如网易的有@163.com新浪有@vip.sina.com等
网上看到了各种各样的版本,都不确定用哪个,于是自己简单的总结了一个。大家有更好的欢迎留言。

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

下面解释上面的表达式
1.首先强调一点关于w的含义,w匹配英文字母和俄语字母或数字或下划线或汉字
2.注意^[]和[^]的区别,[]表示字符集合,^[]表示已[]内的任意字符集开始,[^]表示
3.^[a-zA-Z0-9]+:这里注意^[]和[^]的,第一个^表示已什么开头,第二个[]的^表示不等于[]内。
所以这段表示以英文字母和数字开头,后面紧跟的+,限定其个数>=1个。
4.[a-zA-Z0-9_.+-]+:表示匹配英文字母和数字开头以及_.+-,的任意一个字符,并限定其个数>=1个。
为了考虑@前面可能出现.+-(但是不在开头出现)。
5.@就是邮箱必备符号了
6.@[a-zA-Z0-9-]+.:前面的不用说了,后面的.表示.转义了,也是必备符号。
7.

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

:dollar符表示以什么结束,这里表示以英文字和数字或-. 1个或多个结尾。
来个例子验证一波:

import re
plt=re.compile(r"^[a-zA-Z0-9]+[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")
b=plt.findall('adas+fefe.we@qq.com.cn')
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)

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

目录
相关文章
|
3天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
19 1
|
1天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
7 0
|
1天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
10 0
|
3天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
11 1
Flask框架在Python面试中的应用与实战
|
4天前
|
数据可视化 Python
Python模型评估与选择:面试必备知识点
【4月更文挑战第17天】本文深入探讨了Python模型评估与选择在面试中的关键点,包括性能度量、过拟合与欠拟合识别、模型比较与选择、模型融合和偏差-方差权衡。强调了避免混淆评估指标、忽视模型验证和盲目追求高复杂度模型的常见错误,并提供相关代码示例,如交叉验证、网格搜索和超参数调优。通过理解这些概念和技巧,可在面试中展示出色的数据科学能力。
30 12
|
4天前
|
机器学习/深度学习 搜索推荐 Python
Python特征工程面试:从理论到实践
【4月更文挑战第17天】本文探讨了Python在数据科学面试中的特征工程,涵盖基础概念如特征选择和提取,实战技能如缺失值和异常值处理,以及特定场景应用。强调避免过度依赖单一方法,忽视数据分布和相关性,以及保持特征工程的可解释性。提供代码示例展示了处理缺失值、标准化、特征选择和异常值检测的基本操作。建议结合业务理解,灵活运用多种方法并注重模型解释性。
19 9
|
4天前
|
数据采集 机器学习/深度学习 数据挖掘
Python数据清洗与预处理面试题解析
【4月更文挑战第17天】本文介绍了Python数据清洗与预处理在面试中的常见问题,包括Pandas基础操作、异常值处理和特征工程。通过示例代码展示了数据读取、筛选、合并、分组统计、离群点检测、缺失值和重复值处理、特征缩放、编码、转换和降维。强调了易错点,如忽视数据质量检查、盲目处理数据、数据隐私保护、过度简化特征关系和忽视模型输入要求。掌握这些技能和策略将有助于在面试中脱颖而出。
23 8
|
4天前
|
缓存 自然语言处理 数据处理
Python自然语言处理面试:NLTK、SpaCy与Hugging Face库详解
【4月更文挑战第16天】本文介绍了Python NLP面试中NLTK、SpaCy和Hugging Face库的常见问题和易错点。通过示例代码展示了如何进行分词、词性标注、命名实体识别、相似度计算、依存关系分析、文本分类及预训练模型调用等任务。重点强调了理解库功能、预处理、模型选择、性能优化和模型解释性的重要性,帮助面试者提升NLP技术展示。
22 5
|
4天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
35 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
4天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6