Python面试宝典

转自黑马程序员《Python面试宝典》http://bbs.itheima.com/thread-402667-1-1.html 可以下载PDF文件。

目录

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

Q2 不适用中间变量交换变量a,b的值。

Q3 print调用的什么底层方法?

Q4 下面这段代码的输出结果是什么?请解释。

Q5 input()函数

Q6 range()和xrange()的区别。(Python2)

Q7 4G内存如何读取一个5G的数据?

Q8 现在考虑有一个 jsonline 格式的文件 file.txt 大小约为 10K,之前处理文件的代码如下所示.

Q9 read、readline和readlines的区别?

Q10 补充缺失的代码。

Q11 在except中return后还会执行finally中的代码吗?如何抛出自定义异常?

Q12 except的作用和用法。

Q13 有哪些常用的python标注库。

Q14 赋值、浅拷贝和深拷贝的区别。

Q15 __init__ 和__new__区别

Q16 随机数

Q17 输入某年某月某日,判断这一天是这一年的第几天?

Q18 打乱一个排好序的list对象

Q19 说明os.path 和sys.path分别表示什么?

Q20 os模块常见方法

Q21  python中sys模块常用方法?

Q22 unittest

Q23 模块和包

Q24 Python是强语言类型还是弱语言类型?

Q25 解释型语言和编译型语言。

Q26 Python日志

Q27Python是如何进行类型转换的?

Q28 Python2和Python3的区别。

Q29 关于Python程序的运行,有什么手段能提升性能。

Q30 Python中的作用域。

Q31 Python自省

Q32 Python代码规范


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

代码会报错,抛出TypeErrory异常

  • 可变数据类型:列表list和字典dict,集合set
  • 不可变数据类型:基本数据类型(int,float,string)元组tuple
>>> a=tuple((1,23,5,34))
>>> a[1]=22
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Q2 不适用中间变量交换变量a,b的值。

方法1:

a=a+b
b=a-b
a=a-b

方法2:

a=a^b
b=b^a
a=a^b

方法3:

a,b=b,a

Q3 print调用的什么底层方法?

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

Q4 下面这段代码的输出结果是什么?请解释。

class Parent(object):
    x=1
class Child1(Parent):
    pass
class Child2(Parent):
    pass
print(Parent.x,Child1.x,Child2.x)
Child1.x=2
print(Parent.x,Child1.x,Child2.x)
parent.x=3
print(Parent.x,Child1.x,Child2.x)

结果为:

111   #继承自父类的类属性x,所有都一样,指向同一块内存地址。

121   #Child1.x进行赋值,指向了新的内存地址。

323   #更改Parent.x, 指向了新的内存地址,Child3继承父类,也指向改地址。

Q5 input()函数

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

在Python2中有raw_input() input(),raw_input()在Python3中的input()作用一样,input()输入什么数据类型,获取到的就是什么数据类型。

Q6 range()和xrange()的区别。(Python2)

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

在Python3中range()相当于2中的xrange(),所以3中已经没有xrange()函数了。

Q7 4G内存如何读取一个5G的数据?

方法一:

可以通过生成器,分多次读取,每次读取比较少量的数据进行处理,处理结束后在一次读取后面的数据。

方法二:

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

Q8 现在考虑有一个 jsonline 格式的文件 file.txt 大小约为 10K,之前处理文件的代码如下所示.

def get_lines():
    l = []
    with open(‘file.txt’,‘rb’) as f:
        for eachline in f:
            l.append(eachline)
    return l
if __name__ == ‘__main__’:
    for e in get_lines():
        process(e) #处理每一行数据

现在要处理一个大小为 10G 的文件,但是内存只有 4G,如果在只修改 get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有哪些?

要考虑的问题:

内存只有4G无法一次性读入10G的文件,需要分批读入。分批读入数据要记录每次读入数据的位置。

要考虑每次读入数据的大小,太小就会在读取操作上花费过多的时间。

修改后的代码:

def get_lines():
    l=[]
    with open('file.txt','rb') as f:
        data=f.readlines(6000)
    l.append(data)
    yield l

 书中给的代码并不能循环迭代,修改如下。

def get_lines():
    # l=[]
    flag=True
    with open('file.txt','rb') as f:
        while flag:
            data=f.readlines(1000)
            # l.append(data)
            if data:
                yield data
            else:
                flag=False

Q9 read、readline和readlines的区别?

read:读取整个文件

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

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

Q10 补充缺失的代码。

def print_directory_contents(sPath):
    '''
    这个函数接收文件夹的名称作为输入参数。
    返回该文件夹中文件的路径
    以及其包含文件夹中文件的路径
    '''
    #请补充代码

完整代码如下, 

#首先导入os库
import os
def print_directory_contents(sPath):
    #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    #只支持在 Unix, Windows 下使用。
    for sChild in os.listdir(sPath):
        #os.path.join(path1,path2,...)用于路径拼接文件路径
        sChildPath=os.path.join(sPath,sChild)
        #os.path.isdir()函数判断是否为文件夹,是文件夹返回True.
        if os.path.isdir(sChildPath):
            print_directory_contents(sChildPath)
        else:
            print(sChildPath)

Q11 在except中return后还会执行finally中的代码吗?如何抛出自定义异常?

return之后依然执行finally中的代码。

用raise方法可以抛出自定义异常。

Q12 except的作用和用法。

try:

  #except 要和try一起使用。

except:#捕获所有异常

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

except <异常1,异常2>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值