算法笔试题目总结(python传参**,yield)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36187544/article/details/99446156

涉及到逻辑题、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的情况,不妨考虑下这种方式

展开阅读全文

没有更多推荐了,返回首页