全局变量不更新?

2024-04-29 06:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

全局变量不更新,但我将其导入正在更新的解释器。你知道吗

请帮助我如何更新字典d

import texttable

class Lc:

    d={50:8,100:6,200:4,500:3,1000:2,2000:1}
    he=['container_size_in_ltrs','qty']
    def inventory(self,g):
        d1=self.d
        if d1!=g:
            d1=g
        self.d=g
        l1=d1.keys()
        l1.sort()
        li=[]
        ls=[]
        for i in l1:
            li=[]
            li.append(i)
            li.append(d1[i])
            ls.append(li)
        table=texttable.Texttable()
        table.header(self.he)
        table.add_rows(ls,header=False)
        print table.draw()

    def add_inv(self,k,v):
        d=self.d
        for i,j in d.items():
            if k==i:
                d[k]=d[k]+v
        print d
        return d

z=Lc()

g=z.add_inv(500,2)

print z.d

Tags: inselfaddl1ifdeftableli
1条回答
网友
1楼 · 发布于 2024-04-29 06:31:30

您的全局变量正在更新。获取代码的子集:

class Lc:

    d={50:8,100:6,200:4,500:3,1000:2,2000:1}
    he=['container_size_in_ltrs','qty']

    def add_inv(self,k,v):
        d=self.d
        for i,j in d.items():
            if k==i:
                d[k]=d[k]+v
        print d
        return d

z=Lc()
x=Lc()

print "Add 2 to 500, expect 500:5"
g=z.add_inv(500,2)
print z.d

# Notice that x.add_inv also modifies z.d
print "Add 5 to 500, expect 500:7 because x initialized d again"
h=x.add_inv(500,2)
print z.d

我得到:

Add 2 to 500, expect 500:5
{100: 6, 200: 4, 2000: 1, 1000: 2, 50: 8, 500: 5}
{100: 6, 200: 4, 2000: 1, 1000: 2, 50: 8, 500: 5}
Add 5 to 500, expect 500:7 because x initialized d again
{100: 6, 200: 4, 2000: 1, 1000: 2, 50: 8, 500: 7}
{100: 6, 200: 4, 2000: 1, 1000: 2, 50: 8, 500: 7}

我只希望你真的试图用这种方式将d声明为全局的。你知道吗

相关问题 更多 >