函数的作用域及函数文档

函数也有作用域

nonlocal关键字
    局部函数内使用nonlocal引用一个外层函数已定义的局部变量后,可以对该局部变量进行更改等操作,但不会把该变量提升为全局变量

n = 10
N = 0
def outerScope() :
    print('outer')
    A = 1

    global N
    N += 5
    print(N)

    def innerScope() :
        print('inner')

        # 引用全局变量
        global n
        n += 10
        print(n)

        # 引用外层函数定义的局部变量
        nonlocal A
        A += 1
        print(f'A = {A}')

        # 定义全局变量
        # global A
        # A = 'global A'
        # print(f'A = {A}')

        # 引用全局变量N
        global N
        N += 10
        print(N)

    innerScope()
    print(f'A = {A}')

outerScope()
print(N)
# print(f'A = {A}')
# innerScope()    无法调用函数内定义的函数


outer
5
inner
20
A = 2
15
A = 2
15

函数的文档

print(globals())
'
{
    '__name__': '__main__',
    '__doc__': '\n函数也有作用域\n\nnonlocal关键字\n局部函数内使用nonlocal引用一个已定义的局部变量后,可以对该局部变量进行更改等操作\n',
    '__package__': None,
    '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000080BEBCF488>,
    '__spec__': None,
    '__annotations__': {},
    '__builtins__': <module 'builtins' (built-in)>,
    '__file__': 'G:/PyCharmProject/5.函数/8.函数的作用域及函数文档.py',
    '__cached__': None, 'outerScope': <function outerScope at 0x00000080C06A3F78>
}

魔术变量
    __name__    ==>   当前脚本是主程序则值为__main__,当前脚本作为模块被其他脚本引用则值为当前脚本文件名
    __doc__     ==>   当前脚本的说明文档,即第一个 \''' 第一个三引号 \''' 中的内容
'
def document(time,place) :
    '''
    函数的说明文档用于解释函数的作用以及形参的信息
    time:时间参数,作用:...
    place:地点参数,作用:...
    :return: 说明函数返回值
    '''

    return time

print(__name__)    # 获取当前脚本文件名
print(__doc__)    # 获取当前脚本说明文档
print(document.__doc__)    # 获取当前函数说明文档


__main__

函数也有作用域

nonlocal关键字
    局部函数内使用nonlocal引用一个外层函数已定义的局部变量后,可以对该局部变量进行更改等操作,但不会把该变量提升为全局变量


    函数的说明文档用于解释函数的作用以及形参的信息
    time:时间参数,作用:...
    place:地点参数,作用:...
    :return: 说明函数返回值