递归:

递归的概念很简单,如果函数包含了对其自身的调用,该函数就是递归。拗口一点的定义是,如果一个新的调用能在相同过程中较早的调用结束之前开始,那么该过程就是递归。

"""阶乘"""
def jie(n):
if n==0 or n==1:
return 1
else:
return n*jie(n-1)
print fac(8) D:\python3.5\python.exe D:/untitled/python2/denglu.py
40320 Process finished with exit code 0 '''''''''''递归方式‘'''''''''''''''''
def digui(n):   #定义函数 循环后的结果
print(n) #输出每一次的结果
if n == 1: #如果不等于继续向下执行
return 1 #返回最终的结果
return digui(n-1) * 1 #返回的值减一在乘一
s = digui(10) #执行函数
print(s)
 '''''''''''''''''斐波那契数列''''''''
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368 def digui(a,a1,a2): #定义函数,参数 #a = 2 a1= 13,a2 = 15 。。。。。。。。
if a == 10: #判断如果q不等于10 就向下执行
return a,a1,a2
a3 = a1 + a2 #两数相加附一个新值 a3 等于15
re = digui(a + 1,a2,a3) #继续回去一级一级循环结果 最终结果484
return re #定一个返回值 一级一级退出循环
z = digui(1,2,13) #执行函数的最终结果
print(z) D:\python3.5\python.exe D:/untitled/python2/denglu.py
(10, 484, 783) Process finished with exit code 0 def di(n,n1): #定义函数 参数 0,1
print(n) #输 出最终的结果
if n > 100: #如果n(0)大于100就向下继续执行直到大于100
return #返回终止
n2 = n + n1 # n=0 n1 = 1 n2 = 1
di(n1,n2) #两数相加继续循环
di(0,1) #执行函数 里的参数值 D:\python3.5\python.exe D:/untitled/python2/denglu.py
0
1
1
2
3
5
8
13
21
34
55
89
144
Process finished with exit code 0
def digui(q,q1):
print(q,q1)
if q == 10:
return
w = q2 = q + q1
return w
s = digui(34,324)
print(s) D:\python3.5\python.exe D:/untitled/python2/lianxi.py
34 324
358 Process finished with exit code 0

装饰器:

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

def func(x):
print(x)
x =123 # 实参 x 代指123
func(x) 执行函数
嵌套一层的装饰器:

def quan(yuan):#1 #定义装饰器函数, 这的参数代指的是原来(yuan1)函数
def xin(): #2 #4 装饰器的内置函数//// 被原函数重新赋值的
print('新的') #5 执行函数前的操作
ret = yuan() #6 执行原来的函数
print('后来的') #10 执行后的操作
return ret #11 原函数的返回值
return xin #3 返回的新函数的返回值
@quan #5 #7 自动应用执行装饰器的参数就是(yuan1)
def yuan1(): #原来的函数被重新赋值给了新的函数 定义为xin()
print('原来') #8 输出原来的值
return 'yes' #9 返回一个结果
s = yuan1() #执行函数结果
print(s) 嵌套两层的装饰器: def quan_0(gun): #原来的yuan 函数做了两次赋值 把quan函数调用成自己的内置函数
# 被quan_0代指 而这个gun参数等于quan内置函数里的gun参数
def xin(*args,**kwargs): #xin函数等于第二个装饰器的原来yuanl数重新第二次的赋值
print('123')
r = gun(*args,**kwargs)
return r
return xin
def quan(gun):
def xin(*args,**kwargs):
print("小伙")
r = gun(*args,**kwargs) #gun参数等于yuan函数里的参数
print('好')
return r
return xin
@quan_0
@quan
def yuan(q1,q2):
print('火了')
return q1 + q2
s = yuan(12,21)
print(s)

pyhthon --递归,装饰器的更多相关文章

  1. python递归,装饰器,函数, 高阶函数

    在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...

  2. python --> 递归 以及装饰器

    一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...

  3. python学习笔记之装饰器、递归、算法(第四天)

    参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...

  4. 学习PYTHON之路, DAY 5 - PYTHON 基础 5 (装饰器,字符格式化,递归,迭代器,生成器)

    ---恢复内容开始--- 一 装饰器 1 单层装饰器 def outer(func): def inner(): print('long') func() print('after') return ...

  5. python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

    1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = Fal ...

  6. python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理

    python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...

  7. Python(迭代器 生成器 装饰器 递归 斐波那契数列)

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  8. Day5 双层装饰器、字符串格式化、生成器、迭代器、递归

    双层装饰器实现用户登录和权限认证 #!/usr/bin/env python# -*- coding: utf-8 -*-# Author: WangHuafeng USER_INFO = {} de ...

  9. Python学习笔记 (4) :迭代器、生成器、装饰器、递归、正则表达式等

    迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是 ...

随机推荐

  1. HTML 学习笔记 CSS(选择器2)

    CSS 类选择器 类选择器允许以一种独立于文档元素的方式来指定样式 CSS 类选择器 类选择器允许以一种独立于文档元素的方式来指定样式 该选择器可以单独使用 也可以和其他元素结合使用 提示 只要适当的 ...

  2. notes:spm多重比较校正

    SPM做完统计后,statistical table中的FDRc实际上是在该p-uncorrected下,可以令FDR-correcred p<=0.05的最小cluster中的voxel数目: ...

  3. 去掉Win7资源管理器左侧导航窗格中的收藏夹、库等的方法

    去掉Win7资源管理器的收藏夹/库/家庭组/网络的方法 将Windows 7资源管理器左侧导航窗格中的收藏夹.库.家庭组.网络全部去掉,只剩下计算机, 以收藏夹为例作简要说明. 首先打开注册表编辑器, ...

  4. ASP.NET MVC使用jQuery来POST数据至数据库中

    学习ASP.NET MVC程序,结合jQuery客户端代码,Post数据至数据库去.Insus.NET今天写一个完整性的例子. 在数据库中,创建一个表[dbo].[TestUser]: 既然是把数据存 ...

  5. Html5 Egret游戏开发 成语大挑战(五)界面切换和数据处理

    经过前面的制作,使用Egret的Wing很快完成了开始界面和选关卡界面,下面通常来说就是游戏界面,但此时界面切换和关卡数据还没有准备好,这次讲解界面的切换和关卡数据的解析.前面多次修改了Main.ts ...

  6. Qt Creator 常用快捷键

    多行注释模式                                                                                            Ct ...

  7. github上传

    创建全局的name和email 1.创建ssh(使用命令)$ssh-keygen -t rsa -C xxxxx@gmail.com(注册github时的email)2.在github中添加ssh 登 ...

  8. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(五)框架及Web项目的组件化

    一.组件化印象 1.先给大家看一张截图 如果我告诉大家,这就是一个web管理系统发布后的所有内容,你们会不会觉得太简洁了,只有一个web.config.一个Global.asax文件,其它的都是dll ...

  9. 编程中的offsetof

    linux和windows平台都已经定义了offsetof函数,用于取struct类型中某个变量的偏移量 在stddef.h头文件中,该宏的完整说明如下: #ifdef __cplusplus #if ...

  10. 文本 To 音频

    文本  To  音频 TextToSpeech介绍 TextToSpeech,简称 TTS,是Android 1.6版本中比较重要的新功能.将所指定的文本转成不同语言音频输出.它可以方便的嵌入到游戏或 ...