zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Redis数据模型
    Redis集群使用的一些命令(持续更新)
    Redis简单集群搭建
    观察者模式
    抽象工厂模式
    简单工厂模式及其简单Java案例代码实现
    工厂方法模式及简单Java案例代码实现
    Java中的双重检查锁(double checked locking)
    BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟
    BayaiM__Linux安装MySQL的两种方法
  • 原文地址:https://www.cnblogs.com/unbrokenlin/p/9715284.html
Copyright © 2011-2022 走看看