涉及到逻辑题、Linux、计算机网络、python语言特性,机器学习算法这块。开卷,就python语言特性和算法这两部分,一道题一道题交流,算法的话leetcode那种题,python部分记录一下:
笔试涉及到python部分,有两道题没有答的明了,先贴一下其余例子,问题都是该程序会输出什么:
考点:可变对象,不可变对象
考点:list切片
考点:传参过程中可变对象,不可变对象
考点:列表生成式,set,intersection()
考点:匿名函数lambda,filter()
考点:装饰器
考点:类与继承,实例对象
考点:try-except-finally运行顺序
传参**,*
def foo(a, b='commit', *c, **d):
print(a, b, c, d)
foo(1, z='merge', b='clone', x=6, y=7)
foo(1, 2, 'push', 5, x='pull', y='chekcout')
结果:
理由:*参数传的是元组,**传的是dict,所以凡是类似于x=6这种传入字典,当然由于传参中有b,所以b='clone'还是传参到变量b上,然后是依次放入元素,如果没有元素可放就是空。
yield
def fibon(n):
a = b = 1
for i in range(n):
yield a
a, b = b, a + b
for item in fibon(5):
print(item)
结果:
理由:yield的函数是一个生成器,而不是一个函数了。所以通过for循环迭代或者next(),send()等方法能启动yield生成器。实际上for循环进行迭代时也会调用内部的__next__()方法。
我答的是yield改变了函数的执行顺序,常与for循环使用,达到指定的循环目标,学术不精!生成器不知道
列表生成式与dict
突发奇想想看看能不能利用列表生成式生成dict:
dic = {'a':1,'b':2}
dic2 = {key:dic[key]+1 for key in dic.keys()}
print(dic2) # 结果:{'a': 2, 'b': 3}
lis = ['a','b','c']
dic3 = {lis[i]:i for i in range(len(lis))}
print(dic3) # 结果:{'a': 0, 'b': 1, 'c': 2}
真的是可以的,以后做题遇到需要生成dict的情况,不妨考虑下这种方式