这节的主要内容是函数的几个用法闭包,调用、递归。
一.函数闭包
对闭包更好的理解请看: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/下面的脚本,通常而言每个脚本文件会自定 ...