Python第八章函数(下)

递归函数

递归函数:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。
每个递归函数必须包含两个部分:
1、终止条件:表示递归什么时候结束。一般用于返回值,不再调用自己
2、递归步骤:把第n步的值和第n+1步相关联
递归函数由于会创建大量的函数对象,过量地消耗内存和运算能力。在处理大量数据时,谨慎使用

def factoral(n):
	if n==1:return 1
	return n*factoral(n-1)
for i in range(1,6):
	print(i,"!=",factoral(i))

嵌套函数(内部函数)

嵌套函数:在函数内部定义的函数

def f1():
	print("f1 running....")
	def f2():
		print("f2 running....")
	f2()
f1()
#f2()就是定义在f1()函数内部的函数,f2()函数的定义和调用都在f1()函数内部	

一般在以下情况下使用嵌套函数:
1、封装、隐藏数据:外部无法访问“嵌套函数”
2、贯彻DRY(Don’t Repeat Yourself)原则:嵌套函数,可以让我们在函数内部避免重复代码
3、闭包:后讲

def printName(isChinese,name,familyName)
	def inner_print(a,b):
		print("{0}{1}".format(a,b))
	if isChinese:
		inner_print(familyName,name)
	else:
		inner_print(name,familyName)

nonlocal关键字

nonlocal 用来声明外层局部变量
global 用来声明全局变量

a=100
def outer():
	b=10
	def inner():
		nonlocal b#声明外部函数的局部变量
		print("inner:",b)
		b=20
		global a#声明全局变量
		a=1000
		
	inner()
	print("puter b:",b)
outer()
print("a:",a)

LEGB规则

Python在查找“名称”时,是按照LEGB规则查找的:Local–>Enclosed–>Global–>Built in
Local 指的是函数或者类的方法内部
Enclosed指的是嵌套函数(一个函数包含另一个函数,闭包)
Global指的是模块中的全局变量
Built in指的是Python为直接保留的特殊名称
如果某个name映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域(enclosed)进行搜索,如果闭包作用域也没有找到,Python就会到全局(global)命名空间中进行查找,最后会在内建(build in)命名空间搜索(如果一个名称在所有命名空间中都没有找到,就会产生一个NameError)
文章均为本人观看视频学习所记录的知识点笔记(哔哩哔哩视频链接https://www.bilibili.com/video/BV1tU4y1t7rv

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值