python 函数嵌套的学习

函数嵌套不同于闭包,不能在函数外面使用。

通过函数嵌套可以隐藏函数,使之成为私有函数。

使用嵌套可以为函数增加一些附加处理,使得函数更加健壮

#嵌套就是函数中的函数
#通过嵌套可以使内层函数隐藏起来,使之作为私有函数。
#嵌套可以为函数增加一些附加处理,能够使得函数更加健壮。
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")

 

输出是:

python 函数嵌套的学习

“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班")

输出是:

python 函数嵌套的学习