pyhthon --递归,装饰器

递归:

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

"""阶乘"""
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) * n
e = digui(8)
print(e)

D:\python3.5\python.exe D:/untitled/python2/denglu.py
8
7
6
5
4
3
2
1
40320

Process finished with exit code 0

‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘斐波那契数列‘‘‘‘‘‘‘‘斐波那契数列指的是这样一个数列 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 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)
时间: 2024-10-08 20:50:27

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

递归&装饰器&正则运算&模块

递归: def f(a): if a < 10: print(a) a+=1 b = a f(b) return a else: return a a = f(5) a等于6 a等于6 只执行一次 注意 怎么正确取值 ? def f(a): if a < 10: print(a) a+=1 b = f(a) f(b) return b else: return a 返回值是一个函数就可以啦 装饰器 : def outer(func): def inner(*arg, **kwargs): pr

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

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

Python函数的冒泡排序、递归以及装饰器

函数的冒泡排序: 本质是,让元素换位置,逐个比较最终排序. 例1:实现a1,a2值互换: a1 = 123 a2 = 456 temp = a1 a1 = a2 a2 = temp print(a1) print(a2) 结果: 456 123 冒泡排序: #!/bin/bash/env python # -*- coding:utf-8 -*- li = [22,1,5,4,3,66,22,12,34,21] for j in range(1,len(li)): for i in range(

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

第八篇、递归、装饰器

一.递归函数 概念:递归算法是一种直接或者间接的调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略时,必须有一个明确的递归条件,称为递归出口. ③递归算法解题通常显得很简洁,但递归算法解题的效率较低.所以一般不倡导使用递归算法设计程序. ④在递归调用的过程当中系统的每一层的返回点.局部变量等开辟了栈来存储.递归函数次数过多容易造成栈溢出等. 所以一般不倡导用递归算法设计程序. 递归的思想代码如下: '''

python学习笔记-Day05-第一部分(再谈装饰器)(递归)

今天又花了多半天来学习装X利器---装饰器, 来详细的讲讲装饰器的用法 还是要说一下,学装饰器之前要先搞清楚什么是函数.装饰器就是对函数进行一个包装,打个比喻来说就是: 假设有一个箱子A,在箱子A的外面又套了一个大箱子,外面的大箱子还起名叫A,以后在找里面的小箱子A的时候,就先去找外面的大箱子A,打开外面的大箱子A之后 在打开内部的小箱子A,这个就是装饰器. 装饰器也是一个函数,至少两层 def outter(func):               #定义函数 outter,参数为一个函数的函

Python之迭代器、生成器、装饰器和递归

一.迭代器&生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头

第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON

关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的是f1的return,那么在这种情况下函数f1并未定义return,所以默认返回None 因此li的值应该是none 如果是 li = [11,22,33,44] def f1(arg): arg.append(55) f1(li) print(li) 因为函数传递的参数实际是参数的引用,因此在函数

模块调用,datetime,time,logging,递归,双层装饰器, json,pickle迭代器和生成器

一.python模块(导入,内置,自定义,开源) 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python标准库的方法. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 2.模块的引入 在Python中用关键字