1-10题
1.请简要介绍python的生成器是什么
python生成器是一个返回可以迭代对象的函数,可以被用作控制循环的迭代行为。生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,一般的函数会返回包括所有数值的数组,生成器一次只能返回一个值,这样消耗的内存将会大大减小。
<generator >
生成器是能够动态提供数据的可迭代对象,程序执行时,才能获得数据,数据不占用内存,现用现生成,使用next函数获取数据,生成器包含生成器函数和生成器表达式,含有yield语句的函数都是生成器函数,带有括号的for循环语句是生成器表达式。
例如:
def foo():
yield x
Generator = (i for i in range(10))
使用中括号便是列表推导式[i for i in range(10)]
2.请说明python的is和==的区别
is是用来判断两个变量引用的对象是否为同一个,==用于判断引用对象的值是否相等,可以通过id()函数查看引用对象的地址
3.请说明python的方法解析顺序
优先级从高到低为实例本身(instance)-》类(class)-》super class,继承关系越近,越先定义,优先级越高。
4.手写二分查找
def Binary_search(num_list, x):
num_list = sorted(num_list)
left, right = 0, len(num_list)
while left < right:
mid = (left + right) // 2
if num_list[mid] > x:
right = mid
elif num_list[mid] < x:
left = mid + 1
else:
return num_list[mid]
return None
5.Ctrl + C程序挂掉还是抛出异常?如何判断两个dict是否一样?list头上删除元素?字符串拼接?
首先,第一个问题答案是抛出异常;
第二个是cmp(dict1, dict2)
第三个是list.pop(0)
第四个是"a".join("b") or "a" + "b"
6.请你思考一下,pytorch中cuda()的作用,两个Tensor,一个加了cuda(),一个没加,相加后会发生什么情况?
类型不匹配,会报错。
(cuda()将操作对象放在GPU内存中,加了cuda()的Tensor放在GPU内存中,而没加的Tensor放在CPU内存中,所以这两个Tensor相加会报错)
7.请你简要介绍一下python中dict和list的区别,以及dict的内部实现方式
dict查找速度快,占用的内存较大,list查找速度慢,占用内存较小,dict不能用来存储有序集合。Dict用{}表示,list用[]表示
dict是通过hash表实现的,dict为一个数组,数组的索引键是通过hash函数处理后得到的,hash函数的目的是使键值均匀的分布在数组中。
(DIct是字典,以键值对的形式存储,查找插入速度快但内存占用大;List是列表,查找插入速度较慢,但内存占用较小。DIct内部实现是哈希表,用哈希函数给字典的键分配位置。)
8.请你说明如何使用python比较两个json数据是否相等
假设有两个json文件
dict1 = {"id": "50356270565167104", "name": "班级优化"}
dict2 = {"id": "50356270565167104", "name": "班级优化2"}
for src_list, dst_list in zip(sorted(dict1), sorted(dict2)):
if str(dict1[src_list]) != str(dict2[dst_list]):
print(src_list, dict1[src_list], dst_list, dict2[dst_list])
9.请你讲讲python获取输入的方式,以及如何打开文件
获取输入:input() 数字的获取有eval(input())
打开文件:file = open("", encoding = "")
这种方式读完文件需要手动关闭,即file.close()
with open('文件名',打开方式) as f:with封装好了,比较方便,不需要再进行关闭和担心异常的问题,建议使用这种方式。
10.叙述软件调试断电的概念作用和分类
断点分为软件断点、硬件断点、内存断点三类
软件断点调试概念:由于python是解释型语言,解释器是读一句程序执行一句,所以调试断点的目的就是为了在程序执行中暂停程序查看各个对象的情况以及程序执行情况是否与自己预期的情况一样,常用于程序测试以及调试阶段,python提供了assert关键字以及相关的函数对其进行支持。
assert关键字是用于断点调试的!
其实pytest模块的测试模块也ok
持续更新中……