【问题标题】:Python: Global variable in class functionPython:类函数中的全局变量
【发布时间】:2020-11-11 13:38:40
【问题描述】:
class LinkedList():
    
    def __init__(self):
        self.head = None
    
    def loopCheck(self):
        global fast
        slow = self.head
        fast = self.head 
        while(fast.next!=None):
            slow = slow.next
            fast = fast.next.next
            if slow.data == fast.data:
                return True
            
        return False
    def lenLoop(self):
        if not(self.loopCheck):
            print("No loop found")
        else:
            print(fast.data)

变量fast 在 lenLoop() 函数中未被识别。如何在类中创建全局变量?

【问题讨论】:

  • fast = self.head,为什么不使用类属性,比如self.fast
  • 为什么应该是类属性?为什么不能是变量?
  • 作为一名程序员,您应该非常、非常非常努力不使用全局变量。
  • 如果要将数据保存在实例中,则需要将其绑定。为此,您需要将其设为self.fast。否则fastloopCheck 执行后消失
  • 您没有在lenLoop致电 loopCheck。此外,lenLoop 似乎命名错误; fast.data 的值没有理由以任何方式对应于找到的任何循环的长度。您需要在loopCheck 中计算它,并且您可以简单地让loopCheck 返回该值,任何非零值表示循环,0 表示正确的线性列表。

标签: python python-3.x linked-list


【解决方案1】:

您可以在类的构造函数中将其声明为self.fast,就像您对self.head 所做的那样。直观地说,self 就像一个字典,它存储变量的值及其名称,以便可以在类中的任何位置访问它们。

【讨论】:

    【解决方案2】:

    因为你没有调用你的函数。试试self.loopCheck() 而不是self.loopCheck

    def lenLoop(self):
        if not(self.loopCheck()):
            print("No loop found")
        else:
            print(fast.data)
    

    输出

    1 -> 2 -> 3 -> None
    No loop found
    

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      相关资源
      最近更新 更多