zoukankan      html  css  js  c++  java
  • 变量引用的错误:UnboundLocalError: local variable 'range' referenced before assignment

     
     1 class Battery():
     2     """一次模拟电动汽车电瓶的简单尝试"""
     3     def __init__(self,battery_size=70):
     4         self.battery_size = battery_size
     5         # self.range =range
     6     def describe_battery(self):
     7         print(self.battery_size)
     8 
     9     def get_range(self):
    10         print("battery_size是"+str(self.battery_size))
    11         # range = 300
    12         if self.battery_size == 80:
    13                 range = 240
    14         elif self.battery_size == 85:
    15                 range = 270
    16         # print("这里公布剩余里程"+str(rang))
    17         message = "this car can go " + str(range)
    18         print(message)
    
    执行上述函数的时候,会报错 UnboundLocalError: local variable 'range' referenced before assignment
    意思是,还没在定义前就调用报错,怀疑是range作用域的问题
    起初的想法是第一个解决办法,是把range的作用域变大,直接放大到class级别,在__init__中就声明,如下:
     def __init__(self,battery_size=70,range=200):
            self.battery_size = battery_size
            self.range =range
    
    这样在调用的时候,就成功了,但疑问仍然存在,是作用域的原因,非要全局作用域吗
    
    第二个解决办法的思路,案例中range的作用域在def范围内,但是为什么写在了if中,却没有实例化呢。if不会改变量的作用域,
    除非是条件没有满足,未执行到初始化...事实确实如此
    battery_size条件是80或者85,但是此时battery_size是70
    条件都没有满足,所以就没有声明
    
    解决办法:def 域内,if条件外声明变量range,比如这样
     def get_range(self):
            print("battery_size是"+str(self.battery_size))
            range = 300
            if self.battery_size == 80:
                    range = 240
            elif self.battery_size == 85:
                    range = 270
            # print("这里公布剩余里程"+str(rang))
            message = "this car can go " + str(range)
            print(message)
     
  • 相关阅读:
    线性方程组迭代法
    统计学习方法——朴素贝叶斯法、先验概率、后验概率
    信息熵、相对熵(KL散度)、交叉熵、条件熵
    六级听力词组积累
    样本均值和样本方差的无偏性证明、样本方差的方差
    Python 矩阵相关
    Python 绘图
    win10、VSCode、python3数据科学库
    Python杂记
    Gradient descend 梯度下降法和归一化、python中的实现(未完善)
  • 原文地址:https://www.cnblogs.com/kunpengv5/p/7565109.html
Copyright © 2011-2022 走看看