69.嵌套函数(内部函数)(闭包前奏)
嵌套函数:
在函数内部定义的函数!
【操作】嵌套函数定义
def f1():
print('f1 running...')
def f2():
print('f2 running...')
f2
()
f1
()
执行结果:
f1 running
...
f2 running
...
小示例
def outer():
print('outer running')
def inner01():
print('inner running')
inner01
()
print(outer
())
上面程序中,f2就是定义在f1 函数内部的函数。f2的定义和调用都在 f1函数内部。
一般在什么情况下使用嵌套函数?
封装 - 数据隐藏 外部无法访问“嵌套函数”。贯彻 DRY(Don’t Repeat Yourself) 原则 嵌套函数,可以让我们在函数内部避免重复代码。闭包 后面会详细讲解。
【操作】使用嵌套函数避免重复代码
代码1
def printChineseName(name
,familyName
):
print("{0} {1}".format(familyName
,name
))
def printEnglishName(name
,familyName
):
print("{0} {1}".format(name
, familyName
))
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
)
printName
(True,"小七","高")
printName
(False,"George","Bush")
虽然这个例子 好像 普通写法 代码少一点。
但这是因为 我们的函数功能简单。
如果这个函数代码量比价多 那么 。 是不是 这样写 比较好呢?
函数只写 一遍 。 但是调用方式不一样。
普通方式 函数写了两遍 。