【笔记】嵌套函数、nonlocal
嵌套函数概念:在函数内部定义的函数
嵌套函数可以用于1、封装:用于数据隐藏,外部无法访问嵌套函数
2、贯彻DRY(Don't repeat Yourself)原则:避免重复代码
3、闭包。
def f1():
print('f1 running')
def f2():
print('f2 running')
f2()
f1()
运行结果为:f1 running
f2 running
这是一个简单的嵌套函数,在f1内部定义f2,并调用f2,此时调用f1就相当于调用f1和f2两个函数。而且嵌套函数只在函数内部使用,函数外无法使用函数内的嵌套函数。否则会报错。
#避免重复代码
def printChineseName(name,FamliyName):
print('{0} {1}'.format(FamliyName,name))
def printEnglishName(name,FamliyName):
print('{0} {1}'.format(name, FamliyName))
def printName(isChinese,name,FamliyName):
def inner_name(a,b):
print('{0} {1}'.format(a,b))
if isChinese:
inner_name(FamliyName,name)
else:
inner_name(name,FamliyName)
可以使用嵌套函数避免重复代码。
nonlocal 关键字
nonlocal与global类似
nonlocal用来声明外部函数的局部变量
global用来声明全局变量
def outer():
a = 10
def inner():
nonlocal a #声明外部函数的局部变量
print('inner a:',a)
a = 20 #修改外部函数的局部变量必须先用nonlocal声明,否则会报错
inner()
print('outer a:',a)
outer()
注意如果嵌套函数内部只是读取外部函数局部变量的值,可以不用声明直接读取,如果需要修改的话,必须先用nonlocal声明。
好像还能把内部函数当成返回值吧,忘了咋么用了
tomato123123 发表于 2021-6-20 20:40
好像还能把内部函数当成返回值吧,忘了咋么用了
装饰器
例子:
def deco(old_func):
def new_func():
print('Start.')
old_func()
print('End.')
return new_func
@deco
def my_func():
print('Running...')
my_func()
返回值:
Start.
Running...
End. 三滑稽甲苯 发表于 2021-6-20 21:43
装饰器
例子:
def deco(old_func):
对,装饰器,好像还有个概念呢,叫闭包
页:
[1]