可能重复:
Python - 传递值如何工作?
如果我有一个变量并将其实例化为 None,我该如何进行一个反映多个范围内变化的赋值?
例如:
def doStuff(test):
test = "hello world"
def main():
test = None
doStuff(test)
print(test)
如果我猜对了,那么输出什么都不是,因为“测试”是按值传递的?有没有办法让它通过引用传递而不在函数之前静态声明类型?
可能重复:
Python - 传递值如何工作?
如果我有一个变量并将其实例化为 None,我该如何进行一个反映多个范围内变化的赋值?
例如:
def doStuff(test):
test = "hello world"
def main():
test = None
doStuff(test)
print(test)
如果我猜对了,那么输出什么都不是,因为“测试”是按值传递的?有没有办法让它通过引用传递而不在函数之前静态声明类型?
当你这样做时:
def main():
test = None
doStuff(test)
print(test)
您本质上打印' 范围内的字符串对象(由test
引用引用) 。main()
对于由 中的变量print
引用的内部字符串对象,您应该执行以下三个操作之一:test
doStuff
你应该在里面使用一个print
语句doStuff
或使用global
关键字
doStuff
从您存储在main()
's中的值返回一个值test
。
对于最后一部分,您可以在此处找到更多信息。
您可以查看global
关键字。
def doStuff():
global test
test = 'Hello World'
global
关键字允许您直接分配给全局变量。
如果要doStuff
更改范围内的值test
,main()
则应将其返回,如下所示:
def doStuff(test):
test = "hello world"
return test
def main():
test = None
test = doStuff(test)
print(test)
当然,在这个例子中,没有理由将 test 作为输入传递给doStuff()
,所以你可以这样做:
def doStuff():
test = "hello world" # These 2 lines could be one
return test # return "hello world"
def main():
test = doStuff()
print(test)
您不能直接从另一个函数更改局部变量的值 - 正如其他人回答的那样,您可以将其声明为全局变量,或返回新值并分配它。但是另一种尚未提及的实现此目的的方法是使用将值保存在属性中的包装类。然后您可以传递包装器实例并修改属性:
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"