Python面试题【1】
001.说明os,sys模块不同,并列举常用的模块方法?
s(operation system 操作系统): 提供一种方便的使用操作系统函数的方法
sys(system): 提供访问由解释器使用或维护的变量和在与解释器交互使用到的函数。
os模块常用的方法:
1.os.listdir() 列出目录下的文件
2.os.remove() 删除文件
3.os.rename() 重命名文件
4.os.chdir() 改变路径
5.os.mkdir() 创建文件夹
注意点:递归遍历某个文件夹下的所有文件
【扩展】:面试过程中肯会被问题:如果给你一个文件夹这个文件中也嵌套N层文件夹,且每层文件夹中是否有普通的文件 不一定
请写一个程序,将所有的不同层级的文件夹中的文件名 进行打印
sys模块常用的方法:
1.sys.path 模块的搜索路径(我们的python程序遇到了import时,到底去哪里找这些模块,sys.path指定的路径中找)
2.sys.stdin 就是标准输入,与此类推sys.stdout就是标准输出
只要是程序 一般会有
import sys
print("-----1----")
print(sys.stdin)
print("-----2----")
print(sys.stdin.read(3)) # 从键盘获取2个数据
print("-----3----")
sys.stdout.write("111111") # 项目屏幕输出111111
print("-----4----")
002.代码中要修改不可变数据会出现什么问题? 抛出什么异常?
代码不会正常运行,抛出 TypeError 异常。
a = (100,)
a[0] = 200 # TypeError: 'tuple' object does not support item assignment
003.print 调用 Python 中底层的什么方法?
print 方法默认调用 sys.stdout.write 方法,即往控制台打印字符串。
import sys
print("hello") # 输出hello
sys.stdout.write("hello") # 输出hello
sys.stdout.write("\n") # 输出hello
004.下面这段代码的输出结果将是什么?请解释?
【扩展】:
此题目已经考察了继承相关的知识,如果在深入一点,那么就可能会考察多继承中的只是 MRO
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)
输出数据为:
1 1 1
1 2 1
3 2 3
原因:
如果当前类有这个需要的雷属性就用自己的,如果没有则用父类的,如果父类依然没有那么就会报错
005.简述你对 input()函数的理解?
在 Python3 中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。
在 Python2 中有 raw_input()和 input()
raw_input()和 Python3 中的 input()作用是一样的,
input()输入的是什么数据类型的,获取到的就是什么数据类型的。
注意:
Python2现在基本不用了,且其作者也明确说明了;因此以后 如果在终端中获取数据只用Python3的input即可
"1+1"
# 假如在Python3中 input 获取了 [1, 2, 3],此时 会是一个字符次'[1, 2, 3]'
# 但是如果在Python2中,input 调用时 我们输入了 [1, 2, 3],那么真的就是 给他输了一个列表[1, 2, 3]
006.阅读下面的代码,写出 A0,A1 至 An 的最终值。
A0 = dict(zip(('a', 'b', 'c', 'd', 'e'), (1, 2, 3, 4, 5)))
print(A0) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
A1 = range(10) # python2中返回的是一个列表(有缺陷:如果需要创建的列表很大,那么就需要很大的内存空间),所以在python3中进行了优化,最终返回的是一个可以迭代的对象,什么时候需要 什么时候计算
print(A1) # range(0, 10)
A2 = [i for i in A1 if i in A0]
print(A2) # []
A3 = [A0[s] for s in A0]
print(A3) # [1, 2, 3, 4, 5]
A4 = [i for i in A1 if i in A3]
print(A4) # [1, 2, 3, 4, 5]
A5 = {i: i * i for i in A1}
print(A5) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
A6 = [[i, i * i] for i in A1]
print(A6) # [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]
007.考虑以下 Python 代码,如果运行结束,命令行中的运行结果是什么?
# 代码一
l = []
for i in range(10):
l.append({'num': i})
print(l)
# 代码二: 再考虑以下代码,运行结束后的结果是什么?
l = []
a = {'num': 0}
for i in range(10):
a['num'] = i
l.append(a)
print(l)
# 以上两段代码的运行结果是否相同,如果不相同,原因是什么?
# 原因是:字典是可变对象,在下方的 l.append(a)的操作中是把字典 a 的引用传到列表 l 中,当后
# 续操作修改 a['num']的值的时候,l 中的值也会跟着改变,相当于浅拷贝。
008.以下 Python 程序的输出?
for i in range(5, 0, -1):
print(i)
结果为:
5
4
3
2
1
009.os.path和sys.path的区别?
os.path 是一个模块主要用于获取文件的属性。例如 os.path.basename(path)返回文件名
sys.path是由目录名构成的列表,Python 从中查找扩展模块( Python 源模块, 编译模块,或者二进制扩展).
启动Python 时,这个列表从根据内建规则,PYTHONPATH 环境变量的内容, 以及注册表( Windows 系统)等进行初始化.
010.4G 内存怎么读取一个 5G 的数据?
-
方法一
可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后
再读取后面的 500MB 的数据。 -
方法二
可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行
数切割,可以按照文件大小切割。