首页 > 编程语言 >python基础007----递归函数&闭包&装饰器

python基础007----递归函数&闭包&装饰器

时间:2023-12-22 21:36:36浏览次数:42  
标签:闭包 200 函数 递归函数 python ---- num inner

一、递归函数

1、递归函数概念

      直接或间接的调用自身的函数,称为递归函数。每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件。

2、递归函数实例

#####递归函数####
##1、普通实现:计算n!=1*2*3*4*5*6*...*n
n=int(input('普通实现阶乘,请输入n的值:'))
result=1
i=1
while i<=n:
    result=result*i
    i+=1
print('普通实现阶乘的结果是:',result)

##2、递归实现:计算n!=1*2*3*4*5*6*...*n
def test(n):
    if n==1:
        return 1
    return n*test(n-1)     #递归调用函数本身
while True:
    n=int(input('递归实现阶乘,请输入n的值:'))
    print('递归实现阶乘的结果是:',test(n))
    if n>50:
        break

#3、普通实现输出斐波那契数列
def feibo(n):
    a,b=0,1
    c=[]
    while n>0:
        c.append(b)
        a,b=b,a+b
        n-=1
    print(c)
feibo(int(input('普通实现---请输入要输出数列的个数:')))
#4、递归实现输出斐波那契数列
def feibo1(n):
    if n<=1:
        return n
    elif n==2:
        return 1
    return (feibo1(n-1)+feibo1(n-2))
n=int(input('递归实现---请输入要输出数列的个数:'))
a=[feibo1(i) for i in range(1,n+1)]
print(a)

 

 

 

 

 

  

二、闭包

 1、闭包的定义

      

 

 

 2、代码实例

#####闭包#####
def outer(num):               #外部函数,num为外函数的临时变量
    def inner(num_in):        #内部函数,若要在内部函数中修改外部函数的临时变量num,可以用nonlocal关键字声明一个变量num, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量
        print('inner函数的局部变量--num_in is %d'%num_in)
        return num+num_in     #在内部函数中用到了外函数的临时变量num
    return inner              #外函数的返回值是内函数的引用
a=outer(20)                   #调用外函数传入参数,并创建内函数,并把内函数的引用返回给了a
#a(200)==inner(200)           #a存储了外函数的返回值,也就是内函数的引用a(200)相当于inner(200),即:num_in=200
print('返回内外部函数的计算结果:',a(200))

 

三、装饰器

 

标签:闭包,200,函数,递归函数,python,----,num,inner
From: https://www.cnblogs.com/geqiandeqingmu/p/14621725.html

相关文章

  • 反射
    一、反射概述反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。Appleapple=newApple();//直接初始化,「正射」apple.setP......
  • linux基础01----命令集锦
    Linux命令集锦:一、关机&重启命令:   sync:把内存的数据同步到磁盘,当我们关机或者重启时,都应该先执行下sync命令,把内存的数据写入磁盘,防止数据丢失。   shutdown-hnow:表示立即关机   shutdown-h 1:表示1分钟后关机    shutdown-rnow:立即重启 ......
  • 003元素定位方式与项目demo创建
    一、环境搭建1、创建项目,添加java-client依赖包             新建maven项目,引入java-client依赖包       2、创建并编写代码 测试运行以上代码,运行前需打开Appnium.Appnium没有打开时,运行会报错:Connectionrefused:connect 二、......
  • linux-firewalld 和iptable的策略配置(nat 以及端口开放)
    一、配置防火墙开发端口1、sudoyuminstallfirewalldsudosystemctlstartfirewalldsudosystemctlenablefirewalld2、配置防火墙规则firewall-cmd--permanent--add-service=sshfirewall-cmd--permanent--add-service=httpfirewall-cmd--permanent......
  • linux基础002-----环境搭建1
    一、               vimtools安装    在终端输入gcc-v如果显示gcc的版本说明安装了gcc  之后一直回车          关闭系统后,在虚拟机中找到要克隆的系统,右键---管理---克隆,选择克隆的位置(选择大的磁......
  • Python+Selenium框架实战系列003----测试数据分离与ddt技术&断言
    一、测试数据分离1、新建testData文件夹,新建login_data.py文件,如下所示:   2、在login_datas.py文件中存放测试用例数据,如下所示:#正常场景success_data={"mobile":"17839196010","pwd":"duhui94619"}#异常用例--手机号异常phone_data=[{"mobile":&......
  • python自动化学习笔记5-----allure测试报告
    1、运行测试报告 2、allure注解的使用  3、优化测试报告之添加对应的标签 4、注解的使用     5、yaml文件格式 6、更改logo(1)allure目录下找到allure.yml的文件,增加插件    (2)在插件目录下添加要展示的图片    (3)修改styles.cs......
  • [Bookmark]-开源键盘
    立创开源【瀚文】HelloWord-KeyboardGitHubWorldEdit-No.1yz_keyboardvial-qmkusb-keyboard......
  • python自动化学习笔记6-----jekins环境搭建及使用
        msi版本安装后,要去电脑服务里面设置为自启动,否则重启电脑后使用不了。  web自动化1、实现linux部署jekins,window运行自动化代码,不在同一个机器上运行在执行机(自己的电脑上)访问jekins网址进行相应设置        运行后,进行连接,连接成功后,小......
  • c语言单链表
    #include<stdio.h>#include<stdlib.h>#defineERROR-1#defineSUCCESS0structlist_node{intdata;structlist_node*next;/*data*/};typedefstructlist_nodelink_list;intlist_get_size(link_list*list){intcount=0;......