这节的主要内容是函数的几个用法闭包,调用、递归。

一.函数闭包

对闭包更好的理解请看:https://www.cnblogs.com/Lin-Yi/p/7305364.html

我们来看一个简单的例子:

 #闭包  两个函数 嵌套
def Test1():
a=1
print('局部外层:',a)
def test2():
b=2
nonlocal a
a+=1
print('局部里层',a,b)
return test2 #返回函数体 a=Test1()
print(a)

根据上面例子我们可以这样定义闭包:

  在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的函数体,这样就构成了一个闭包。

闭包在装饰器的时候会用到。

二.调用

  调用就是把定义过的函数的函数体当做参数来用。

 def Test1():
a=1
print('局部外层:',a)
def test2():
b=2
nonlocal a
a+=1
print('局部里层',a,b)
return test2 #返回函数体 ##回调函数 两个函数 嵌套
def test3(a):
a() test3(Test1) #Test1函数体

20行中Test1被test3调用,注意是函数体调用。

三.递归

  递归就是函数自己调用自己。

  递归需要注意的地方:

    1.推倒式

    2.终止条件

 #例子1
# 阶乘
def JiChen(n):
if n==1:
return(1)
else:
return(n*JiChen(n-1)) print(JiChen(8))
 #例子2
'''
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃前一天剩下的一半零一个。
到第10天在想吃的时候就剩一个桃子了,
问第一天共摘下来多少个桃子? '''
# 递归:1.自己调用自己
# 2.写终止条件
# 3.推倒式 def TaoZi(n):
if n==1:
return 1
else:
return(2*(TaoZi(n-1)+1)) ##P1=TaoZi(10)
##print(P1)

补充一点:

  可变的数据类型,可以直接在函数里面进行修改 list set dict

 n=1
li=['a','b','c']
li2=li.copy() #要保留原始数据,需要先复制一份.赋值id变了
di={'name':'方方'}
print(n,li,di)
def test(n,lis,dic):
n+=1
lis.append('haha')
dic['name']='frl'
print(n,lis,dic) test(n,li,di)

Python基础_函数闭包、调用、递归的更多相关文章

  1. python基础11_函数作用域_global_递归

    看到了一个16进制转换的小知识点,就验证了一下运行结果. #!/usr/bin/env python # coding:utf-8 # 看到了16进制转换的问题.顺便验证一下. a = 255 b = ...

  2. Python基础_函数2

    在介绍完函数的大体概念如定义.传参.作用域之后,本节主要介绍函数的几个细节部分. 一. print()函数与return的区别. 相同点:print与return都是向用户在输出界面上展示结果 不同点 ...

  3. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  4. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  5. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  6. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  7. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  8. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  9. python基础_格式化输出(%用法和format用法)(转载)

    python基础_格式化输出(%用法和format用法) 目录 %用法 format用法 %用法 1.整数的输出 %o -- oct 八进制%d -- dec 十进制%x -- hex 十六进制 &g ...

随机推荐

  1. 2018/2/5 ELK技术栈之ElasticSearch学习笔记

    npm config set registry https://registry.npm.taobao.org npm config get registry 支持跨域访问http.cors.enab ...

  2. 9、flask之SQLAlchemy

    本篇导航: 介绍 使用 SQLAlchemy-Utils 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之 ...

  3. 原创~vue router-link添加点击事件

    在学习vue中会遇到给router-link添加@click,@mouseover等事件 我想要做的是用v-for循环输出导航菜单,但是下面代码的@click事件和@mouseover并不会响应 &l ...

  4. No new migrations found. Your system is up-to-date.处理

    显然是migrations表中存储的相关操作记录了,删除就好了!!!

  5. 大数相加(类似杭电acm1002)

    /*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不 ...

  6. 1.2 decimal模块

    >>> 0.1 + 0.1 +0.1 == 0.3 False >>> >>> print(0.1 + 0.1 + 0.1) 0.30000000 ...

  7. PAT 1003. Emergency 单源最短路

    思路:定义表示到达i的最短路径数量,表示到达i的最短径,表示最短路径到达i的最多人数,表示从i到j的距离, 表示i点的人数.每次从u去更新某个节点v的时候,考虑两种情况: 1.,说明到达v新的最短路径 ...

  8. hdu1006 Tick and Tick

    原题链接 Tick and Tick 题意 计算时针.分针.秒针24小时之内三个指针之间相差大于等于n度一天内所占百分比. 思路 每隔12小时时针.分针.秒针全部指向0,那么只需要计算12小时内的百分 ...

  9. Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置

    该篇为Sping Boot入门到实战系列入门篇的第四篇.介绍Spring Boot自动化配置的基本原理与实现.   Spring Boot之所以受开发者欢迎, 其中最重要的一个因素就是其自动化配置特性 ...

  10. python2.x和python3.x的区别

    一.python2.x和python3.x中raw_input( )和input( )区别 1.在Python2.x中raw_input( )和input( ),两个函数都存在,其中区别为 raw_i ...