python中的面试问题

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

代码会报错,抛出TypeErrory异常

  • 可变类型 列表(list),字典(dict),集合(set)
    不可变类型:数据类型(int,float,string),元组
a = tuplet(1,2,3)
a[1] = 3

TypeError: 'tuple' object does not support item assignment  类型错误:“tuple”对象不支持项分配
# 通过修改不可变类型的变量,会引起数据类型错误,所以在写代码的使用要注意,python是一种解释性语言,运行程序前并不需要编译

2.不用中间变量交换变量a,b的值。

方法 1

a = 3, b = 5
a = a +b a = 3+5=8
b = a - b b = 8 - 5 = 3
a = a - b a = 8- 3 = 5

方法 2

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

方法 3

a,b=b,a
python中经常使用这样方法
如果使用中间变量
c = a
a = b
b = c

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

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

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

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 继承来自父类的类属性,所以都指向同一块内存地址
121child.x 重新进行赋值,指向了新的内存地址
323 更改Parent.x, 指向了新的内存地址,Child3继承父类,也指向改地址。

5.input()函数

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

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

6. range()和xrange()的区别。(Python2)

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

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

方法一:
可以通过生成器,分多次读取,每次读取比较少量的数据进行处理,处理结束后在一次读取后面的数据。
方法二:
可以通过Linux命令split切割成小文件,然后对数据进行处理,此方法效率比较高。可以按照行数切割,也可以按照文件大小切割。

8 .现在考虑有一个 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():
	flag = True
	with open("file.txt","rb") as f:
		data = f.readlines(1000)
		if data:
			yield data
		else:
			flag = False
def get_lines():
	
    l=[]
    with open('file.txt','rb') as f:
        data=f.readlines(6000)
    l.append(data)
    yield l

9. read、readline和readlines的区别?

read:读取整个文件
readline:读取一行,使用生成器方法。
readlines:读取整个文件到一个迭代器以便遍历。

10.补充缺失的代码。

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)

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

return之后依然执行finally中的代码。
用raise方法可以抛出自定义异常。

12. except的作用和用法。

try:
#except 要和try一起使用。
except:#捕获所有异常
except <异常名>:#捕获指定异常
except <异常1,异常2>:捕获异常1或者异常2
except<异常名>,<数据>:捕获指定异常及其附加的数据
except<异常1,异常2>,<数据>:捕获异常1或者异常2,及其附加的数据。

13. 有哪些常用的python标注库。

标准库:os操作系统;time时间;random随机;pymysql连接数据库;threading线程;multiprocessing进程;queue队列;math数学
第三方库:django,flask,requests,hashlib,md5,selenium,scrapy,xadmin。
常用的科学计算库:Numpy,Scipy,Pandas
可视化库:matplotlib

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

在python中,对象的赋值就是简单的对象引用。如:

a=[1,2,3,“abc”,[‘hello’,567]]
b=a
此时a和b指向同一块内存地址,相当于把a的引用赋值给了b。

a is b,为True,id(a)=id(b)

赋值操作(包括对象作为参数、返回值)不会开辟新的内存空间,它只是赋值了对象的引用。修改了a,也就影响了b;修改了b也就意向了a。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值