美文网首页
07/20-07/24 第一周技能总结

07/20-07/24 第一周技能总结

作者: yumiii_ | 来源:发表于2020-07-24 15:47 被阅读0次

    1.捕获中断(待补充...)
    一开始我用的是try except KeyboardInterrupt,但在ctrl+C后未停止运行,其实这个时候应该是我套了两层循环,内循环还未停止的原因。但后期我也没有再去尝试这个问题。问了一下导师,他说了这么一句话:Ctrl + C一般是用捕获信号的形式而不是捕获异常,使用signal包试试。那我们来看下这个从未接触过的signal包是怎么用的吧:(目前我还没懂原理,只get到了怎么用)

    def sigint_handler(signum, frame):
      global is_sigint_up
      is_sigint_up = True
      print 'catched interrupt signal!'
    
    signal.signal(signal.SIGINT, sigint_handler)
    signal.signal(signal.SIGHUP, sigint_handler)
    signal.signal(signal.SIGTERM, sigint_handler)
    is_sigint_up = False
    while True:
      try:
        # 你想做的事情
        import time
        print "start ............."
        time.sleep(2)
        if is_sigint_up:
          # 中断时需要处理的代码
          print "Exit"
          is_sigint_up = False
          continue
      except Excepting,e:
        break
    

    2.广度优先和深度优先
    从一个网页的URL进去,抓取这个网页上包含的所有的二级三级四级...URL链接,一开始是没啥思路的,总感觉需要手动指定爬几级。然后写着写着突然意识到这是一个深度优先or广度优先的问题,那么,我们来搜一下它们的定义是什么吧。直接上别人博客里的图:



    已知有上面的二叉树
    广度优先:我们在遍历这个二叉树的时候,每一步有多个不同的选择,比如先从根结点出发,有往B节点走的路径,也有往C节点走的路径。假设选取了往B节点走的路径,那么下一步还有F和G两个方向可以走。广度优先的遍历方式为:D-B-C-F-G-A-E-H,广度优先的伪代码如下:

    def bfs(Root_Node):
        if Root_Node is None:
            return
        queue = []
        Node = Root_Node
        queue.append(Node)
        while queue:
            Node = queue.pop(0)
            if Node.lChild:
                queue.append(Node.lChild)
            if Node.rChild:
                queue.append(Node.rChild)
    

    深度优先:在遍历二叉树的时候,选中一个路径,一口气走到黑~走到最下层了怎么办呢,我们退回上一层,看看同级的是不是还有没被遍历过的。深度优先的遍历方式为:D-B-F-G-E-C-A-H,深度优先的伪代码如下:

    def dps(Root_Node):
        if Root_Node is None:
            return
        if Root_Node.lChild:
            return dps(Root_Node.lChild)
    
        if Root_Node.rChild:
            return dps(Root_Node.rChild)
    
    1. ✅本周代码已push到github

    相关文章

      网友评论

          本文标题:07/20-07/24 第一周技能总结

          本文链接:https://www.haomeiwen.com/subject/ztthlktx.html