• python学习之路——global与nonlocal.py、装饰器


    global与nonlocal

    global:在局部声明变量是全局变量

    x=1

    def func():

      global x

      x=2

    func()

    print(x)

    在没有写global x 时,输出的x时1,因为x已经被定义好了,而global x将局部变量变成的全局变量,所以加了之后的输出结果为2

    nonlocal:在局部声明变量时外层函数的变量

    def make_counter(): 

        count = 0 
        def counter(): 
            nonlocal count 
            count += 1 
            return count 
        return counter 
           
    def make_counter_test(): 
      mc = make_counter() 
      print(mc())
      print(mc())
      print(mc())
     
    make_counter_test()
    如果不屑nonlocal count 那么程序会报错,因为count已经被外层定义,如果写了nonlocal count 那么最后输出的结果为 1,2,3
     
    装饰器
    1什么时装饰器
      指的时为被装饰对象添加新功能的工具
      装饰器本身可以是任意可调用的对象、函数
      被装饰的对象也可以是任意可调用的对象、函数
     
    2为何要用装饰器
      开放封闭原则:软件一旦上线就应该对修改封闭,对扩展开放
      对修改封闭:
        1.不能修改功能的源代码
        2.也不能修改功能的调用方式
      对扩展开发:
        可以为原有的功能添加新的功能
     
    装饰器就是在不改动功能源代码以及调用方式的前提下为原功能添加额外新的功能
     
    @装饰器的名字:要在被装饰对象正上方单独一行写上
     
    无参装饰器的模板
    def outter(func):
    def wrapper(*args,**kwargs):
    res=func(*args,**kwargs)
    return res
    return wrapper


     
    # 有参装饰器
    def outter2(xxx,yyy):
    def outter(func):
    def wrapper(*args,**kwargs):
    res=func(*args,**kwargs)
    print(xxx)
    print(yyy)
    return res
    return wrapper
    return outter
  • 相关阅读:
    [HDU5184] Brackets
    L2-036 网红点打卡攻略 (25 分)
    L2-017 人以群分 (25 分)
    L2-029 特立独行的幸福 (25 分)
    L2-035 完全二叉树的层序遍历 (25 分)
    L2-031 深入虎穴 (25 分)
    L2-020 功夫传人 (25 分)
    第 50 场双周赛
    L2-027 名人堂与代金券 (25 分)
    L2-024 部落 (25 分)
  • 原文地址:https://www.cnblogs.com/unbrokenlin/p/9715284.html
Copyright © 2020-2023  润新知