如果我有一个变量并将其实例化为None,我该如何进行反映多个范围内变化的赋值?
例如:
def doStuff(test):
test = "hello world"
def main():
test = None
doStuff(test)
print(test)
如果我猜对了,那么输出什么都没有,因为“test”是按值传递的?有没有办法可以通过引用传递它而不在函数前静态声明类型?
答案 0 :(得分:2)
执行此操作时:
def main():
test = None
doStuff(test)
print(test)
您必须打印test
范围内的字符串对象(由main()
引用引用)。要print
中test
变量引用的doStuff
内部字符串对象,您应该执行以下任一操作中的任何一个:
您应该在print
doStuff
语句
或使用global
关键字
返回doStuff
main()
test
中{{1}}的值。
对于最后一部分,您可以找到更多信息here。
答案 1 :(得分:0)
您可以查看global
关键字。
def doStuff():
global test
test = 'Hello World'
global
关键字允许您直接分配给全局变量。
答案 2 :(得分:0)
如果您希望doStuff
更改test
范围内main()
的值,则应将其返回,如下所示:
def doStuff(test):
test = "hello world"
return test
def main():
test = None
test = doStuff(test)
print(test)
当然,在这个例子中,没有理由将测试作为doStuff()
的输入传递,所以你可以这样做:
def doStuff():
test = "hello world" # These 2 lines could be one
return test # return "hello world"
def main():
test = doStuff()
print(test)
答案 3 :(得分:0)
您无法直接从其他函数更改 local 变量的值 - 正如其他人所回答您可以将其声明为全局,或返回新值并进行分配。但另一种实现这一目标尚未提及的方法是使用包含属性值的包装类。然后你可以传递包装器实例并修改属性:
class Wrapper():
"""a simple wrapper class that holds a single value which defaults to None"""
def __init__(self, value=None):
self.value = value
def main():
test = Wrapper()
doSomething(test)
print(test.value)
def doSomething(x):
x.value = "something"