Python面试整理(二)

本文梳理了Python面试中关于模块与包的相关问题,包括常用模块、标准库介绍、第三方模块安装、列表随机化、sys模块的方法、创建自定义包、模块与包的概念,以及深拷贝与浅拷贝的区别等核心知识点,还涉及发送邮件、随机数生成、webbrowser模块的使用和代码静态分析工具等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块与包

1. 常用模块都有那些?
  • os模块
  • time模块
  • random模块
  • re模块
2.python常用的标准库
  • OS
  • time
  • random
  • sys
  • math
  • datetime
3.如何安装第三方模块?以及用过哪些第三方模块?
  • 在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip
  • httprunner
4. 如何在Python中随机化列表中的项目?
  • Python标准库中的random模块提供了一个shuffle()函数,该函数返回随机放置其元素的序列。
import random
l1=['aa',22,'ff',15,90,5.55]
random.shuffle(l1)
print(l1)
[22, 15, 90, 5.55, 'ff', 'aa']
random.shuffle(l1)
print(l1)
['aa', 'ff', 90, 22, 5.55, 15]
5.Python的 sys 模块常用方法?
  • 1.sys.argv
  • 2.sys.exit([argv])
  • 3.sys.path
  • 4.sys.stdin.readline()
  • 5.sys.stdout.write()
6.如何在Python中创建自己的包?

创建一个文件夹,命名为“MyApp”,我将其放在了桌面上,路径为C:\Users\自己的用户名\Desktop。
在MyApp文件夹里创建一个子文件夹,名为‘mypackage’。 在mypackage文件夹中创建一个空__init__.py文件。
再在mypackage下创建greet.py与functions.py两个模块。

7.什么是python模块?Python中有哪些常用的内置模块?
  • Python中模块的定义:用一堆代码实现了某个功能的代码集合。
  • Python第三方模块:
      1. Requests。Kenneth Reitz写的最富盛名的http库,每个Python程序员都应该会使用它;
      1. Scrapy。如果你是从事Python爬虫相关的工作,这个库必不可少;
      1. WxPython。Python的一个GUI工具,主要用它替代tkinter;
      1. Pillow。它是PIL的一个友好分支,对于用户比PIL更加友好,对于任何在图形领域工作的人是必备的库;
      1. SQLalchemy。一个数据库的库,对它的评价中等;
      1. Beautifulsoup。这个虽然说比较慢,但是它的xml和html的解析库对于新手来讲非常好用;
      1. Twisted。对于网络应用开发者最重要的工具,它有非常优美的api,被很多Python开发大牛使用;
      1. Numpy。它为Python提供了很多高级的数学方法;
      1. Scipy。这是一个Python的算法和数学工具库,它的功能把很多科学家从ruby吸引到了Python;
      1. Matplotlib。一个绘制数据图的库,对于数据科学家或者分析师非常有用。
8.如何用Python来发送邮件?
  • 使用python内置模块–smtplib和email进行邮件发送。其中smtplib模块负责发送邮件,而email模块负责构造邮件内容。
'''1、引入smtplib模块'''
import smtplib
'''2、创建 SMTP 对象
SMTP 协议是由源服务器到目的地服务器传送邮件的一组规则。(可简单理解为:我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器)'''
smtpObj = smtplib.SMTP()
'''3、连接(connect)指定服务器'''
smtpObj.connect(host,port)
'''4、登录,需要:登录邮箱和授权码'''
smtpObj.login(uer_name,password)
'''5、发邮件。
参数:发件人,收件人和邮件内容
msg.as_string()是一个字符串类型:as_string()是将发送的信息msg变为字符串类型。
'''
smtpObj.send_mail(from_addrs,to_addr,msg.as_string())
'''6、退出'''
smtpObj.quit()
9.深拷贝和浅拷贝的区别是什么?
  • 浅拷贝主要是对指针的拷贝,拷贝后两个指针指向同一个内存空间,修改其中任意的值,另一个值都会随之变化
  • 深拷贝需要不但对指针进行拷贝,并对指针指向的内容进行拷贝,经过深拷贝后的指针是指向两个不同地址的指针。两个对象修改其中任意的值另一个值不会改变
10.Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)
  • 1.赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
  • 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用
  • 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)(copy模块的deep.deepcopy()函数)
11.Python里面如何生成随机数?
  • 使用 random 包生成随机数
  • 使用 numpy 包生成随机数
  • 使用 scipy 包生成随机数
12.介绍一下Python中webbrowser的用法?

webbrowser模块提供了一个高级接口来显示基于Web的文档,大部分情况下只需要简单的调用open()方法。
webbrowser定义了如下的异常:
exception webbrowser.Error, 当浏览器控件发生错误是会抛出这个异常
webbrowser有以下方法:
webbrowser.open(url[, new=0[, autoraise=1]])
这个方法是在默认的浏览器中显示url, 如果new = 0, 那么url会在同一个浏览器窗口下打开,如果new = 1, 会打开一个新的窗口,如果new = 2, 会打开一个新的tab, 如果autoraise = true, 窗口会自动增长。
webbrowser.open_new(url)
在默认浏览器中打开一个新的窗口来显示url, 否则,在仅有的浏览器窗口中打开url
webbrowser.open_new_tab(url)
在默认浏览器中当开一个新的tab来显示url, 否则跟open_new()一样
webbrowser.get([name]) 根据name返回一个浏览器对象,如果name为空,则返回默认的浏览器
webbrowser.register(name, construtor[, instance])
注册一个名字为name的浏览器,如果这个浏览器类型被注册就可以用get()方法来获取。

13.有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

PyChecker是Python代码的静态分析工具,它能够帮助查找Python代码的bug,而且能够对代码的复杂度和格式等提出警告。

14.利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res = Counter(a)
print(res)
15.生成0-100的随机数
import random
x = random.randint(1,100) 
print(x)
16.输入某年某月某日,判断这一天是这一年的第几天?(可以用 Python 标准库)
date = input('输入某年某月某日,格式为:****-**-**,小于10请写0*:')
# 使用切片截取年,月,日
year = int(date[0:4])
month = int(date[5:7])
day = int(date[8:])
# 判断是否是闰年,并为每一月赋值
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    feb = 29
else:
    feb = 28
# 1-2月是一个计算段,3-7是一个计算段,8-12是一个计算段
result = 0
if feb == 29:
    if 1 <= month <= 2:
        result = (month - 1) * 30 + day + int(month / 2)
    elif 2 < month <= 7:
        result = (month - 1) * 30 + day + int(month / 2) - 1
    elif 12 >= month > 7:
        result = 213 + (month - 8) * 30 + day + int((month - 7) / 2)
elif feb == 28:
    if 1 <= month <= 2:
        result = (month - 1) * 30 + day + int(month / 2)
    if 2 < month <= 7:
        result = (month - 1) * 30 + day + int(month / 2) - 2
    elif 12 >= month > 7:
        result = 212 + (month - 8) * 30 + day + int((month - 7) / 2)

print('{}-{}-{}是一年中的第{}天'.format(year, month, day, result))

17.range&xrange有什么区别?
  • 1、range 是生成一个列表
  • 2、xrange用法与range完全相同,不同的是生成的不是一个list对象,而是一个生成器
  • 3、在生成很大的数字序列时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间
  • 4、xrange和range都在循环的时候使用
18. init 和__new__的区别?
  • init 在对象创建后,对对象进行初始化。
  • new 是在对象创建之前创建一个对象,并将该对象返回给 init。
19.说明一下 os.path 和 sys.path 分别代表什么?
  • os.path 主要是用于对系统路径文件的操作。
  • sys.path 主要是对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径)。
20.模块和包是什么?
  • 在 Python 中,模块是搭建程序的一种方式。每一个 Python 代码文件都是一个模块,并可以引用 其他的模块,比如对象和属性。
  • 一个包含许多 Python 代码的文件夹是一个包。一个包可以包含模块和子文件夹。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值