好的,我开始编码:
lastentry = 'first'
campdata = {'a1'=0,
'b2'=0}
class Someclass:
def on_window1_destroy(self, widget, data=None):
print campdata
def func1(self)
lastentry = 'b2'
def func2(self)
lastentry = 'a1'
def func2(self)
campdata[lastcall] +=1
Run Code Online (Sandbox Code Playgroud)
但后来我发现python字符串(和整数)是不可变的......
那么我该怎样绕过?
我想你的问题是你想lastentry通过调用func1或更改全局变量的值func2,这不起作用.它不起作用的原因是因为变量在全局范围内,并且在函数内部分配相同的名称只会创建一个与全局变量同名的局部变量.要分配给全局变量,您需要将其声明为:
lastentry = "something"
def func1():
global lastentry #tell python to treat references to lastentry as global
lastentry = "somethingelse"
Run Code Online (Sandbox Code Playgroud)
请注意,如果您正在使用全局值进行读取,则不需要执行此操作,就像在第三个函数中一样.但是如果你赋给一个变量,它被视为其范围的局部 - 通常是周围的函数 - 如果你没有明确地声明它是全局的(或python3中的非局部).
全局变量只应在必要时使用,因为它们会增加代码的复杂性.在您的情况下,您可以重构代码以使用实例变量或类变量来进行lastentry而不是全局变量.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |