函数嵌套不同于闭包,不能在函数外面使用。
通过函数嵌套可以隐藏函数,使之成为私有函数。
使用嵌套可以为函数增加一些附加处理,使得函数更加健壮
#嵌套就是函数中的函数
#通过嵌套可以使内层函数隐藏起来,使之作为私有函数。
#嵌套可以为函数增加一些附加处理,能够使得函数更加健壮。
def f_outer(x):
def f_inner():
return x+1
number=f_inner()#必须在函数内实例化,函数体内是其作用域。
print(number)
print("关于嵌套的定义:")
f_outer(100)
#多级嵌套
print("多极嵌套:")
def nest1(x):
print("------------->nest1",x)
def nest2():
print("--------------->nest2",x+1)
def nest3():
print("------------->nest3",x+3)
nest3()
nest2()
nest1(100)
#
#利用嵌套打开文件
#常规打开文件方法是这样的:
# def display_file(filename):
# if isinstance(filename,str):
# with open(filename,"r") as f:
# for line in f:
# print(line)
# display_file("data.txt")
#利用嵌套使之更健壮
def print_file(file):
def inner_print(fileprocess):
for line in fileprocess:
print(line,end="")
if isinstance(file,str):
with open(file,"r") as f:
inner_print(f)
else:
inner_print(file)
print_file("data.txt")
输出是:
“data.txt”源文件目录下,内容如上(草莓...土豆)。
另外,关于闭包__closure__属性的理解
def func1(school):
print("学校名称",school)
def func2(banji):
print("%s,%s"%(school,banji))
return func2
f1=func1("shida")
print("___________")
print(f1.__closure__)#打印结果是元组,元组个数代表的是闭包所引用的上次函数的元素个数
print(f1.__closure__[0])#结果是元组,可以使用索引的方式查看
print(f1.__closure__[0].cell_contents)#查看指定元组所对应的应用上层参数的值
f1("15班")
输出是: