一、嵌套函数(内部函数)
嵌套函数:在函数内部定义的函数!
def outer():
print("我信你个大头鬼")
def inner():
b=10
print("我一定会成功的")
inner()
outer()
一般在什么情况下使用嵌套函数?
- 封装- 数据隐藏
外部无法访问“嵌套函数”。 - 贯彻DRY(Don’t Repeat Yourself) 原则
嵌套函数,可以让我们在函数内部避免重复代码。
#嵌套函数可以避免我们重复调用内部代码!
def print_name(isChinesename,name,familyname):
def inner(a,b):#只是负责打印的形式
print("{0} {1}".format(a,b))
if isChinesename:#对isChinesename的调用,
inner(familyname,name)#只是负责inner()函数的调用
else:
inner(name,familyname)
print_name(True,"yuanyuan","bu")#这里的“yuanyuan”对应name 参数,"bu"对应familyname参数
print_name(False,"Donald John","Trump")#这里“"Donald John"”对应name参数,“Trump”对应familyname 参数
执行结果:
bu yuanyuan
Donald John Trump
- 闭包
二、nonlocal 关键字
nonlocal
用来声明外层的局部变量。
global
用来声明全局变量。
a=100
def outer():
b=20
global a
a=120
print("outer a:",a)
def inner():
nonlocal b#如果在内部嵌套函数中使用局部变量(即使是打印局部变量,也需要进行nonlocal说明)
b=30
print("inner b:",b)
global a
a = 130
print("inner a:", a)
inner()
outer()
运行结果:
outer a: 120
inner b: 30
inner a: 130
三、LEGB 规则
Python 在查找“名称”时,是按照LEGB 规则查找的:
Local–>Enclosed–>Global–>Built in
Local 指的就是函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是Python 为自己保留的特殊名称。