函数和常用模块【day05】:装饰器前戏(二)

本节内容

  1. 嵌套函数
  2. 局部作用域和全局作用域的访问顺序

一、嵌套函数

 1、定义

  在一个函数的函数体内,用def 去声明一个函数,而不是去调用其他函数,称为嵌套函数。

1
2
3
4
5
6
7
8
9
10
11
12
def foo():
    print("in the foo")
    def bar():  #在foo函数体内,用def声明一个函数
        print("in the bar")
 
    bar()
#调用foo函数
foo()
 
#输出
in the foo
in the bar

 以上是高阶函数的定义,但是我们来看看下面这种情况是不是高阶函数呐?

1
2
3
4
5
6
7
8
def bar():
    print("in the bar")
 
def foo():
    print("in the foo")
    bar()  #调用bar函数
 
foo()

很显然不是,因为只是调用了bar函数,没有用def去声明一个函数。

二、局部作用域和全局作用域的访问顺序

1、先来看一个小例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#局部作用域和全局作用域的访问顺序
x=0
def grandpa():
    x=1
    def dad():
        x=2
        def son():
            x=3
            print(x)
        son()
    dad()
#调用grandpa
grandpa()
 
#输出
3

 很显然最后输出的是3,这个说明作用域:只能是从里往外找,一层一层的的找。

 

原文地址:https://www.cnblogs.com/luoahong/p/9889859.html