python面试集合

113 阅读5分钟

1 代码中要修改不可变数据会出现什么问题? 抛出什么异常?

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

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

方法一:a = a+b        b = a-b           a = a-b

方法二:a = a^b        b =b^a            a = a^b

方法三:a,b = b,a

3 print 调用 Python 中底层的什么方法?

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

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

在 Python3 中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。在 Python2 中有 raw_input()和 input(), raw_input()和 Python3 中的 input()作用是一样的,input()输入的是什么数据类型的,获取到的就是什么数据类型的。 

5 Python2 中 range 和 xrange 的区别?

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

6  在考虑以下代码,运行结束后的结果是什么?

l = []

 a = {‘num’:0}

 for i in xrange(10):

     a[‘num’] = i

     l.append(a)

      print l 

运行结果:[{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9}, {‘num’:9}]

原因:字典是可变对象,在下方的 l.append(a)的操作中是把字典 a 的引用传到列表 l 中,当后续操作修改 a[‘num’]的值的时候,l 中的值也会跟着改变,相当于浅拷贝。

7  4G 内存怎么读取一个 5G 的数据?

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

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

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

except: #捕获所有异常

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

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

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

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

9   常用的 Python 标准库都有哪些?

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

第三方库:django 和 flask 也是第三方库,requests,virtualenv,selenium,scrapy,xadmin,celeryre,hashlib,md5。常用的科学计算库(如 Numpy,Scipy,Pandas)。

10   浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。

浅拷贝有三种形式:切片操作、工厂函数、copy 模块中的 copy 函数。

比如上述的列表 a;

切片操作:b = a[:] 或者 b = [x for x in a];

工厂函数:b = list(a);

copy 函数:b = copy.copy(a);

修改外层,原变量不会改变;内部有可变类型,修改后,原变量改变。

++++++++++++++++=======================+++++++++++++========================++++++++========

深拷贝只有一种形式,copy 模块中的 deepcopy()函数。

深拷贝和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因此,它的时间和空间开销要高。

无论怎么修改,原函数都不会改变。

11   输入某年某月某日,判断这一天是这一年的第几天?(可以用 Python 标准库)

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

12   说明一下 os.path 和 sys.path 分别代表什么?

os.path 主要是用于对系统路径文件的操作。

sys.path 主要是对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径)。

13   Python 中的 os 模块常见方法?

os.remove()删除文件

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

os.chdir()改变目录

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

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

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

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

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

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

14  Python的 sys 模块常用方法?

sys.argv 命令行参数 List,第一个元素是程序本身路径,其余为用户输入的参数

sys.modules.keys() 返回所有已经导入的模块列表

sys.modules 返回系统导入的模块字段,key 是模块名,value 是模块

sys.path 返回模块的搜索路径,初始化时使用 PYTHONPATH 环境变量的值

sys.platform 返回操作系统平台名称

15   Python 中有日志吗?怎么使用?

有日志。

Python 自带 logging 模块,调用 logging.basicConfig()方法,配置需要的日志等级和相应的参数,Python 解释器会按照配置的参数生成相应的日志。

16  关于 Python 程序的运行方面,有什么手段能提升性能?

1、使用多进程,充分利用机器的多核性能

2、对于性能影响较大的部分代码,可以使用 C 或 C++编写

3、对于 IO 阻塞造成的性能影响,可以使用 IO 多路复用来解决

4、尽量使用 Python 的内建函数5、尽量使用局部变量

17   什么是 Python 自省?

Python 自省是 Python 具有的一种能力,使程序员面向对象的语言所写的程序在运行时,能够获得对象的类 Python 型。Python 是一种解释型语言,为程序员提供了极大的灵活性和控制力。