zoukankan      html  css  js  c++  java
  • python 递归函数(斐波那契数列)、协程、函数的设计规范

    一递归:

      在运行过程中,调用自己,一层一层调用自己,直到不符合条件退出

      【对立面放两面镜子,然后看镜子里的自己,会发现镜子里会有很多层对象】

      递归需要边界条件,不能无限循环下去,递归前进段和递归返回段;

    比如:10*9*8*7*6*5*4*3*2*1

    可以理解成:10*(10-1)*((10-1)-1)【每次调用,都是自身减1】

    一个函数包含了对自身的调用

    def fact(n):
        if n<=1:
            return 1
        else:
            return n * fact(n-1)#fact(n)代表自身
    test=fact(3)#这里相当于fact(3)=3*fact(2)=3*2*fact(1)=3*2*1
    print(test)

    斐波那契数列:也可以使用递归函数

    1、1、2、3、5、8、13、21、34、......,n=1和n=2的时候都是输出1

    def fact(n):
        if n<=2:
            return 1
        else:
            return fact(n-1)+fact(n-2)
    test=fact(34)
    print(test)

    二 协程介绍

    协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是协程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。

    需要强调的是:

    1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行)

    2. 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关)

    对比操作系统控制线程的切换,用户在单线程内控制协程的切换

    优点:

    1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级
    2. 单线程内就可以实现并发的效果,最大限度地利用cpu
    

    缺点:

    1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
    2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程
    

    总结协程的特点:

    1. 必须在只有一个单线程里实现并发
    2. 修改共享数据不需加锁
    3. 用户程序里自己保存多个控制流的上下文栈
    4. 附加:一个协程遇到IO操作自动切换到其它协程(如何实现检测IO,yield、greenlet都无法实现,就用到了gevent模块(select机制))

    三、函数的设计规范:

      耦合性:

        (1)尽可能的通过参数接受输入,以及通过return产生输出以保证函数的独立性;

        (2)尽量的减少全局变量进行函数间通信;

        (3)不要在函数中直接修改可变类型的参数;

        (4)避免直接改变定义在另一个模块中的变量;

      聚合性:

        (1)每个函数都应该有一个单一的、统一的目标;

        (2)每个函数的功能都应该相对应简单;

  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/xh0203/p/12682093.html
Copyright © 2011-2022 走看看