Python递归函数、闭包和装饰器

2023-01-11 0 770

产品目录:

一、操作符

二、旋量群的深入细致传授

三、点缀器的采用

一、 操作符

操作符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(x1)

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

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(n1)+feibo(n2))

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

Python递归函数、闭包和装饰器
举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务