所以我有这样的事情:
var1 = 6
var2 = 8
def somefunction(thing):
thing += 1
现在我想这样做,somefunction(var1)
实际上使var1
全局等于7
。我环顾四周,似乎无法找到一个好办法。我厚吗?对不起,如果这很明显,我几天前才开始学习Python。感谢。
@edit好的,回答。显然它不能按我想要的方式完成。哦,好吧。
答案 0 :(得分:1)
让somefunction()
返回新值:
def somefunction(thing):
return thing + 1
var1 = somefunction(var1)
您无法更改对值的其他引用;你传递的是价值,而不是名字。在您的示例中,thing
设置为6
,而不是var1
。
您可以使用字典代替命名空间,但是您仍然需要传入名称,而不是传递变量:
namespace = {
'var1': 6,
'var2': 8,
}
def somefunction(thing):
namespace[thing] += 1
somefunction('var1')
现在我们命名要修改的全局字典中的哪个键,而不是传入该键引用的值。您可以使用globals()
字典执行相同的操作,但是您可能会意外地修改您希望以这种方式处理的受约束名称集之外的全局变量。
在这种情况下,您可能希望阅读Ned Batchelder的优秀Python Names and Values blogpost。
答案 1 :(得分:0)
var1 = 6
def somef()
global var1
var1+= 1
答案 2 :(得分:0)
Python中无法从被调用函数内部重新分配调用者中的变量。
var1 = 6
def cant_be_done(v):
v += 1
cant_be_done(var1)
assert var1 == 6
有关原因的详细信息,请参阅Python Names and Values