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
  • 相关阅读:
    python3数据库配置,远程连接mysql服务器
    Ubuntu 16.04安装JDK
    用Python从零开始创建区块链
    理解奇异值分解SVD和潜在语义索引LSI(Latent Semantic Indexing)
    gensim介绍(翻译)
    记一次浅拷贝的错误
    Heap queue algorithm
    Python
    python列表中插入字符串使用+号
    Linux(Ubuntu)使用 sudo apt-get install 命令安装软件的目录在哪?
  • 原文地址:https://www.cnblogs.com/unbrokenlin/p/9715284.html
Copyright © 2011-2022 走看看