python编程常见面试题,必会且必问

软件还得用芯学 2024-08-19 13:26:56

一.输入与输出1.1 代码中要修改不可变数据会出现什么问题? 抛出什么异常?

代码不会正常运行,抛出 TypeError 异常。

1.2 a=1,b=2,不用中间变量交换 a 和 b 的值?

方法一:

1. a = a+b2. b = a-b3. a = a-b

方法二:

1. a = a^b2. b =b^a3. a = a^b

方法三:

1. a,b = b,a1.3 print 调用 Python 中底层的什么方法?

print 方法默认调用 sys.stdout.write 方法,即往控制台打印字符串。

1.4简述你对 input()函数的理解?

在 现在正常使用的Python3 中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。

二. 条件与循环2.1 range 和 xrange 的区别?

两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表很长时,使用 xrange 性能要比 range 好。

2.2 以下 Python 程序的输出?

for i in range(5,0,-1): print(i)

答:5 4 3 2 1

三. 文件操作3.1 4G 内存怎么读取一个 5G 的数据?

方法一:

可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后在读取后面的 500MB 的数据。

方法二:

可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。

3.2 read、readline 和 readlines 的区别?

read:读取整个文件。

readline:读取下一行,使用生成器方法。

readlines:读取整个文件到一个迭代器以供我们遍历。

3.3在except中return后还会不会执行finally中的代码?怎么抛出自定义异常?

会继续处理 finally 中的代码;用 raise 方法可以抛出自定义异常。

3.4 介绍一下 except 的作用和用法?

except: #捕获所有异常

except: <异常名>: #捕获指定异常

except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2

except:<异常名>,<数据>:捕获指定异常及其附加的数据

except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据

四. 模块与包4.1 常用的 Python 标准库都有哪些?

os 操作系统,time 时间,random 随机,pymysql 连接数据库,threading 线程,multiprocessing进程,queue 队列。

第三方库:django 和 flask 也是第三方库,requests,virtualenv,selenium,scrapy,xadmin,celery,re,hashlib,md5。

常用的科学计算库(如 Numpy,Scipy,Pandas)。

4.2 赋值、浅拷贝和深拷贝的区别?赋值

在 Python 中,对象的赋值就是简单的对象引用,这点和 C++不同我们可以使用 b is a 去判断,返回 True,表明他们地址相同,内容相同,也可以使用 id()函数来查看两个列表的地址是否相同。

赋值操作(包括对象作为参数、返回值)不会开辟新的内存空间,它只是复制了对象的引用。也就是说除了 b 这个名字之外,没有其他的内存开销。修改了 a,也就影响了 b,同理,修改了 b,也就影响了 a。

浅拷贝(shallow copy)

浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。浅拷贝有三种形式:切片操作、工厂函数、copy 模块中的 copy 函数。比如上述的列表 a;切片操作:b = a[:] 或者 b = [x for x in a];工厂函数:b = list(a);copy 函数:b = copy.copy(a);浅拷贝产生的列表 b 不再是列表 a 了,使用 is 判断可以发现他们不是同一个对象,使用 id 查看,他们也不指向同一片内存空间。但是当我们使用 id(x) for x in a 和 id(x) for x in b 来查看 a 和 b 中元素的地址时,可以看到二者包含的元素的地址是相同的。在这种情况下,列表 a 和 b 是不同的对象,修改列表 b 理论上不会影响到列表 a。但是要注意的是,浅拷贝之所以称之为浅拷贝,是它仅仅只拷贝了一层,在列表 a 中有一个嵌套的list,如果我们修改了它,情况就不一样了。

深拷贝(deep copy)

深拷贝只有一种形式,copy 模块中的 deepcopy()函数。深拷贝和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因此,它的时间和空间开销要高。同样的对列表 a,如果使用 b = copy.deepcopy(a),再修改列表 b 将不会影响到列表 a,即使嵌套的列表具有更深的层次,也不会产生任何影响,因为深拷贝拷贝出来的对象根本就是一个全新的对象,不再与原来的对象有任何的关联。

4.3init和new的区别?

init 在对象创建后,对对象进行初始化。new 是在对象创建之前创建一个对象,并将该对象返回给 init。

4.4 Python 里面如何生成随机数?

在 Python 中用于生成随机数的模块是 random,在使用前需要 import. 如下例子可以酌情列举:

random.random():生成一个 0-1 之间的随机浮点数;random.uniform(a, b):生成[a,b]之间的浮点数;random.randint(a, b):生成[a,b]之间的整数;random.randrange(a, b, step):在指定的集合[a,b)中,以 step 为基数随机取一个数;random.choice(sequence):从特定序列中随机取一个元素,这里的序列可以是字符串,列表,元组等。4.5 输入某年某月某日,判断这一天是这一年的第几天? import datetime def dayofyear(): year = input("请输入年份:") month = input("请输入月份:") day = input("请输入天:") date1 = datetime.date(year=int(year),month=int(month),day=int(day)) date2 = datetime.date(year=int(year),month=1,day=1) return (date1 - date2 + 1).days 4.6 Python 中的 os 模块常见方法?

· os.remove()删除文件

· os.rename()重命名文件

· os.walk()生成目录树下的所有文件名

· os.chdir()改变目录

· os.mkdir/makedirs 创建目录/多层目录

· os.rmdir/removedirs 删除目录/多层目录

· os.listdir()列出指定目录的文件

· os.getcwd()取得当前工作目录

· os.chmod()改变目录权限

· os.path.basename()去掉目录路径,返回文件名

· os.path.dirname()去掉文件名,返回目录路径

· os.path.join()将分离的各部分组合成一个路径名

· os.path.split()返回(dirname(),basename())元组

· os.path.splitext()(返回 filename,extension)元组

· os.path.getatime\ctime\mtime 分别返回最近访问、创建、修改时间

· os.path.getsize()返回文件大小

· os.path.exists()是否存在

· os.path.isabs()是否为绝对路径

· os.path.isdir()是否为目录

· os.path.isfile()是否为文件

4.7 Python 的 sys 模块常用方法?(2018-4-16-lxy)

· sys.argv 命令行参数 List,第一个元素是程序本身路径· sys.modules.keys() 返回所有已经导入的模块列表· sys.exc_info() 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback 当前处理的· sys.exit(n) 退出程序,正常退出时 exit(0)· sys.hexversion 获取 Python 解释程序的版本值,16 进制格式如:0x020403F0· sys.version 获取 Python 解释程序的版本信息· sys.maxint 最大的 Int 值· sys.maxunicode 最大的 Unicode 值· sys.modules 返回系统导入的模块字段,key 是模块名,value 是模块· sys.path 返回模块的搜索路径,初始化时使用 PYTHONPATH 环境变量的值· sys.platform 返回操作系统平台名称

· sys.stdout 标准输出· sys.stdin 标准输入· sys.stderr 错误输出· sys.exc_clear() 用来清除当前线程所出现的当前的或最近的错误信息· sys.exec_prefix 返回平台独立的 python 文件安装的位置· sys.byteorder 本地字节规则的指示器,big-endian 平台的值是'big',little-endian 平台的值是'little'· sys.copyright 记录 python 版权相关的东西· sys.api_version 解释器的 C 的 API 版本· sys.version_info 元组则提供一个更简单的方法来使你的程序具备 Python 版本要求功能

4.8 unittest 是什么?

在 Python 中,unittest 是 Python 中的单元测试框架。它拥有支持共享搭建、自动测试、在测试中暂停代码、将不同测试迭代成一组,等的功能。

4.9 模块和包是什么?

在 Python 中,模块是搭建程序的一种方式。每一个 Python 代码文件都是一个模块,并可以引其他的模块,比如对象和属性。一个包含许多 Python 代码的文件夹是一个包。一个包可以包含模块和子文件夹。

0 阅读:4

软件还得用芯学

简介:感谢大家的关注