python闭包和函数调用区别_Python基础_函数闭包、调用、递归

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

一.函数闭包

对闭包更好的理解请看: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基础11_函数作用域_global_递归

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

Python基础_函数2

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

python基础之函数详解

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

python基础——返回函数

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

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

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

python基础——匿名函数

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

python基础——filter函数

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

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

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

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

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

随机推荐

网络抓包wireshark

抓包应该是每个技术人员掌握的基础知识,无论是技术支持运维人员或者是研发,多少都会遇到要抓包的情况,用过的抓包工具有fiddle.wireshark,作为一个不是经常要抓包的人员,学会用Wireshar ...

WeedFS依赖库 0.6.1

WeedFS依赖库 版本 0.6.1 =======================================================================glog====== ...

Android Studio教程--从Github 下载一个Repository

从电脑上彻底删除HelloWorld项目 回到as欢迎页面 复制github中项目的地址 点击clone

201521123063 《Java程序设计》 第11周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. (1)多线程的冲突 当我们不想一种资源被同时使用,导致最后结果不一致,解决方法: 使用synchronized标记 ...

PopupWindowMenuUtil【popupwindow样式菜单项列表】

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 实现PopupWindow样式的Menu菜单. 效果图 代码分析 使用PopupWindow实现. 列表使用的是Recyclervi ...

Ubuntu 16.04 卸载Postgresql

首先确保postgresql是否在运行,在命令窗口输入 netstat -nlt han@han-OptiPlex-:~/project/0_ng_practice/ng-test$ netstat ...

Netty实现简易http_server

Netty可以通过一些handler实现简单的http服务器.具体有三个类,分别是HttpServer.java.ServerHandlerInit.java.BusiHandler.java. 具体 ...

DP:0

小故事: A * "1+1+1+1+1+1+1+1 =?" * A : "上面等式的值是多少" B : *计算* "8!" A *在上面等式 ...

redis开机自动服务脚本

1.设置redis.conf中daemonize为yes,确保守护进程开启. 2.编写开机自启动脚本 基本原理为: 系统开机启动时会去加载/etc/init.d/下面的脚本,通常而言每个脚本文件会自定 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值