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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值