nonlocal和global关键字

回顾:

1. Python的函数的概述
    函数定义
    函数调用

2. Python函数中参数的类型和返回值
    形参和实参

    形参类型:
        普通参数: 实参的传递的顺序和个数和形参一直
        关键字参数: 指定传递的实参被特定形参接收
        默认参数: 形参中设定当前参数的默认值
                 可以不传递设定了默认参数的实参
        不定长参数:
            一个形参能够接收任意多个实参
            *args:普通普通收集参数的
            **kwargs:关键字收集参数

    实参类型:传递方式
        普通实参
        关键字实参
    返回值:return关键字
        返回数据结果
        结束当前函数
        return返回多个结果数据,数据类型tuple

    过程式函数和非过程式函数

3. 函数文档的使用

1.使用help()方法来查看某一个函数的说明和帮助文档
2. 函数名称.__doc__: 返回说明文档

自定义函数文档:
    格式:
        在定义函数后用'''三引号加上注释(def 下一行)       
    优点:
        方便与后期的维护
        提高代码的可读性

4.参数的传递

实际参数: 数据对象

对象的类型:
    可变对象: list dict
    不可变对象: number, tuple, string

参数的传递:
    可变的对象:地址传递
    不可变对象:值传递                                                             

5.变量的作用域

全局变量:
    在内置哈数中,可以调用
    在内置函数中,不可修改
局部变量:
    在内置函数中,可以调用
    在函数外调用,使用global修饰后,即可访问

作业解答

回顾

1.变量定义的语法
2.标识符命名规则
3.数据类型
4.常见的运算符
5.分支结构
6.循环结构
7.函数

效率: 总结 + 计划

今日概要

1.python中变量的作用域
2.python中函数的递归
3.python的闭包

一、python中变量的作用域

1.global关键字
    将局部变量的作用域提升全局变量
    1.变量的有效范围向函数内部传递
    2.如果其他函数内部没有使用global,当前函数可以访问外部的全局变量,不能修改
    3.在单签的函数内部使用global修饰外部变量,在当前哈数 中可以修改
    4.其他的哈数对于使用global修饰外部变量的函数来说,没有提升的效果

2.nonlocal 关键字
    在内置函数(嵌套的函数中)使用
    1.在局保护函数中的局部使用
    2.将当前哈数中的变量的作用域提升到上一层,仅仅提升一层,在此层中必要得声明
    3.允许和global一起使用

综合案例

def one():
    def two():
        num="11"   #在函数two的局部变量
    def three():
        nonlocal num
        num="22"  # 将局部函数three的变量num向上提升,数据同步
    def four():
        global num  
        num="33"  # 将局部函数four的变量提升到全局

    num="00"     
    two()
    print(num) # 00
    three()
    print(num) # 22
    four()
    print(num) # 22
one()
print(num) # 33  

二、函数的递归

1.概念
    在哈数的哈数体中调用该函数本省(自己调用自己)

2.案例
    求阶乘
    求fib数列        
3.注意事项
    1.查找递归的规则,设置退出递归的条件
    2.使用递归可能影响程序的执行性能(贼费性能)
    3.使问题简单化(尽量不要使用)
4.练习
    1.使用递归求阶乘
    2.(扩展)求Fib数列第n为的值?        

三、python中闭包

1.概念
    在一个外部函数中定义一个内部函数,函数的嵌套
    内部函数使用了外部函数的变量,并且外部函数的返回值是内部函数的引用
    外函数传递给内函数的数据,不会随着外部函数执行完就没了,就好像绑定在了内部函数中似的
2.修改内函数中的数据
    需要使用nonlocal进行修饰
3.闭包的优点
    提高代码的复用性
    对数据进行存储和封装,提高数据安全性
posted @ 2019-08-12 17:34  秋叶夏风  阅读(191)  评论(0编辑  收藏  举报