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))
原文地址:https://www.cnblogs.com/pathping/p/5189976.html