产品目录:
一、操作符
二、旋量群的深入细致传授
三、点缀器的采用
一、 操作符
操作符recursion
1. 甚么是操作符
表达式间接或间接地的初始化他们这类
可有化解循环式上的难题
import time
def story():
time.sleep(2)
print(从前有座山)
print(山上座庙)
print(“庙里有个老和尚在讲故事“)
story()
story()
间接地性的初始化他们
def fa():
fb()
def fb():
fa()
fa()
递归说明
递归一定要控制递归的层数,当符合某一条件时要终止递归,几乎所有的递归都能用while循环式来代替。
递归的优缺点:
优点:
递归可以把难题简单化,让思路更加清晰,代码更加简洁。
缺点:
递归因系统环境影响大,当递归过深,可能会得到不可预知的结果。
#求和1+2+3+……+98+99+100
#如果说100,它是不是就相关于1+99的结果
def mysum(x):
if x<=1:
return1
return x + mysum(x–1)
v = mysum(100)
print(v)
在表达式内部,可以初始化其他表达式。如果一个表达式在内部初始化他们这类,这个表达式就是操作符,递归会形成一个深度循环式!
2、 操作符的采用
举个例子:
我们来计算阶乘 n! = 1 * 2 * 3 * … * n
甚么是阶乘呢?
4!= 4*3*2*1
5! =5*4*3*2*1
n! = 1 * 2 * 3 * … * n
while化解方案:
n = int(input(请输入一个数:))
result = 1
i = 1
while i<=n:
result = result*i
i +=1
print(result)
紧接着我们看下阶乘的规律:
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3! …
n! = n × (n-1)!
def getNum(num):
if num>1:
return num * getNum(num–1)
else:
return num
print(getNum(5))
3、操作符经典案例(面试):
题目:斐波那契数列,该数列中有n个数字,1 1 2 3 5 8
分析:该数列中,从第三个数字开始:数值 = 前一个数字 + 前 前面一个数字
方法1:
def feibo(n):
a,b = 0,1
c = []
while n>0:
c.append(b)
a,b = b,a+b
n -=1
print(c)
feibo(12)
递归版:
def feibo(n):
if n==1 or n==2:
return 1
elif n ==2:
return 1
return (feibo(n–1)+feibo(n–2))
n = int(input(请输入:))
a = [feibo(i) for i in range(1,n+1)]
print(a)
扩充面试题目:
import sys
查看递归深度
sys.getrecursionlimit()
3000
设置递归深度
sys.setrecursionlimit(500)
sys.getrecursionlimit()
500
二、旋量群 closure
旋量群定义:
将内嵌表达式的语句和这些语句的执行环境打包在一起时,得到的对象称为旋量群(closure)
旋量群满足的三个条件:
1. 必须有内嵌表达式;
2. 内嵌表达式必须引用外部表达式中的变量
3. 外部表达式返回值必须是内嵌表达式
通过这三点,就可以创建一个旋量群,提别注意:Python点缀器就是采用了旋量群。
def make_power(y):
def fx(arg):
return arg**y
return fx
旋量群的好处:
使代码变得简洁;提高代码的拓展性;
def make_power(y):
def fx(arg):
return arg**y
return fx
pow2 = make_power(2)
print(3的平方 是,pow2(3))
defwrapperfun(strname):
def recoder(age):
print(姓名,strname,年龄,age)
return recoder
#将strname 设置为If
fun = wrapperfun(if)
#将age赋值 ,输出
fun(28)
点缀器 decorators(专业提高篇)
点缀器的定义
点缀器是程序开发中经常会用到的一个功能,用来在原有的表达式上增添新的代码需求。
‘开发封装’
语法 :
def点缀器表达式名(参数):
语句块
return 表达式对象
被点缀表达式的语法:
@点缀器的表达式名
def 表达式名(形参列表):
语句块
#定义一个点缀器
def mydeo(fn):
def fx():
print(………………….)
fn()
print(***********************)
return fx
@mydeo
def myfunc():
print(myfunc被初始化)
myfunc()
应用场景:
1、当我们已经写好一个表达式时,项目也已经上线了,突然客户想要增添一个需求,让这个表达式处理的更加细致,这个就可以用到点缀器了;
案例:
#点缀器快速入门假如现在我们定义了两个表达式,分别来打印他们的名字。
def outer(func):
def inner():
func()
print(come from hebei)
return inner
@outer
def func1():
print(this is python1)
@outer
def func2():
print(this is python2)
func1()
func2()
