การเข้าถึงตัวแปรโกลบอลจากฟังก์ชันหลามภายใน

ฉันกำลังพยายามอัปเดตตัวแปรหนึ่งหรือสองตัวจากภายในฟังก์ชัน calc แล้วพิมพ์ลงในฟังก์ชัน rob แต่เมื่อใดก็ตามที่ฉันทำ มันจะกลับมาเป็นศูนย์และนั่นทำให้เกิดปัญหา

ใช้คำหลักสากลตามที่กล่าวไว้ การใช้ตัวแปรส่วนกลางในฟังก์ชัน และ ไม่สามารถเข้าถึงตัวแปรส่วนกลางจากภายในฟังก์ชันใน pythonแต่ดูเหมือนจะไม่ได้ผล

class Solution(object):
    one=0
    two= 0
    def calc(self,root,flag):
        global one
        global two
        if root == None:
            return
        if flag:
            self.one+=root.val
            Solution().calc(root.left,False)
            Solution().calc(root.right, False)
        else :
            self.two+=root.val
            Solution().calc(root.left, True)
            Solution().calc(root.right, True)
        print (str(root.val)+" " + str(self.one) + " " + str(self.two))
    def rob(self, root):
        self.calc(root,True)
        global one
        global two        
        print self.one
        print self.two
        return max(self.one,self.two)

โดยพื้นฐานแล้วมันจะคืนค่าหนึ่งและสองกลับไปเป็นศูนย์เสมอ


person coder    schedule 04.06.2019    source แหล่งที่มา
comment
เหตุใดคุณจึงใช้คลาสที่ไม่มีสถานะภายในและพยายามใช้ตัวแปรโกลบอล นั่นขัดต่อจุดประสงค์ทั้งหมดของชั้นเรียน   -  person juanpa.arrivillaga    schedule 05.06.2019


คำตอบ (1)


หากไม่มีคำจำกัดความของ root และตัวอย่างการเรียกใช้โค้ดที่ให้คำตอบที่ไม่ถูกต้อง เป็นการยากที่จะตอบคำถามของคุณ ที่กล่าวว่า ฉันคิดว่าปัญหาคือคุณกำลังกำหนด root.val ให้กับแอตทริบิวต์ Solution โดยไม่เพิ่มค่า globals:

# You have:
self.one += root.val
# You want:
one += root.val
person it's-yer-boy-chet    schedule 04.06.2019