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))