• 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']

     

  • 相关阅读:
    C# 用VS原生CheckBox控件制作漂亮的开关
    竞赛 机器视觉人体跌倒检测系统 - opencv python
    JAVA并发编程总结
    LruCache源码解析
    【云原生之Docker实战】部署轻量级容器云管理平台Humpback
    贪心 455.分发饼干
    基于UDP协议的接收和发送
    vue集成海康h5player实现播放
    传统游戏难产 育碧瞄向Web3
    day03 mybatis
  • 原文地址:https://blog.csdn.net/figo8875/article/details/126226391