• Python 基础第四天(生成器、装饰器、递归)


    yield生成器

    yield跳出函数后会记录当前函数的状态当下次调用的时候,从记录的状态开始!

    return后将直接跳出函数!

    #用生成器编写range功能
    def mrange(arg):
        seed = -1
        while 1:
            seed += 1
            if seed >= arg:
                return
            else:
                yield seed
    for i in mrange(10):
        print(i)
    #打印0-9的数字

    装饰器

    装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。

    简单的来说在不修改原函数的情况下,在对原函数进行包装!

    ############### 基础平台提供的功能如下 ############### 
    def check_login():
        # 验证1
        # 验证2
        # 验证3
        pass
    
    def f1():
        check_login()
        print('f1')
    def f2():
        check_login()
        print('f2')
    def f3():
        check_login()
        print('f3')
    def f4():
        check_login()
        print('f4')

    写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

    • 封闭:已实现的功能代码块
    • 开放:对扩展开发

    如果将开放封闭原则应用在上述需求中,那么就不允许在函数 f1 、f2、f3、f4的内部进行修改代码

    ############### 基础平台提供的功能如下 ###############
    def w1(func):
        def inner():
            # 验证1
            # 验证2
            # 验证3
            return func()
        return inner
      
    @w1
    def f1():
        print('f1)'
    @w1
    def f2():
        print('f2)'
    @w1
    def f3():
        print('f3')
    @w1
    def f4():
        print('f4')

    递归

    递归简单来讲是一层层进一层层出,先从最里层向外出,如:进去是54321,返回拿出的值是12345. 

    使用递归需要满足两个条件:

    1、函数调用自身

    2、设置正确的返回条件(必须),否则就和while死循环一样。

    #使用递归编写一个函数,利用欧几里得算法求最大公约数,例如gcd(x,y)返回值为参数x和参数y的最大公约数
    
    def gcd(x, y):
        if y:
            return gcd(y, x % y)
        else:
            return x
    print(gcd(4, 6))
  • 相关阅读:
    jUnit4初探(1)
    关于冒泡排序与选择排序
    我对直接插入排序的一点理解
    Java中的Scanner类
    String数组与字符串类
    Redis知识点详解
    MySQL操作命令详解
    java中常见面试题整理
    Redis的安装部署
    zookeeper的伪集群部署步骤
  • 原文地址:https://www.cnblogs.com/pathping/p/5189976.html
Copyright © 2020-2023  润新知