• python复习(2022年8月)


    1、Python中关键字global与nonlocal的区别:
    第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。

    第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误(见第一)。
     

    2、类和实例变量
    一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法。

    如下代码结果有区别:

    (1)错误用法

    1. class Dog:
    2. tricks = [] # mistaken use of a class variable
    3. def __init__(self, name):
    4. self.name = name
    5. def add_trick(self, trick):
    6. self.tricks.append(trick)
    7. d = Dog('Fido')
    8. e = Dog('Buddy')
    9. d.add_trick('roll over')
    10. e.add_trick('play dead')
    11. print(d.tricks)

    输出:['roll over', 'play dead']。

    tricks是类变量,d和e修改的是Dog的类变量

    (2)正确用法:

    1. class Dog:
    2. def __init__(self, name):
    3. self.name = name
    4. self.tricks = [] # creates a new empty list for each dog
    5. def add_trick(self, trick):
    6. self.tricks.append(trick)
    7. d = Dog('Fido')
    8. e = Dog('Buddy')
    9. d.add_trick('roll over')
    10. e.add_trick('play dead')
    11. print(d.tricks)
    12. print(e.tricks)

    输出:

    ['roll over']
    ['play dead']

     

  • 相关阅读:
    UI高度自适应的修改方案
    《MySQL》增删查改(进阶)
    一次搞懂SpringBoot核心原理:自动配置、事件驱动、Condition
    自动化测试的统筹规划
    Spring中的事务与事务传播机制
    摩尔纹是什么?如何消除摩尔纹?
    Servlet介绍与配置
    移动通信网络规划:面、线、点覆盖规划
    动态规划——01背包
    第三章:用MPI进行分布式内存编程
  • 原文地址:https://blog.csdn.net/figo8875/article/details/126226391