我的代码看起来与此类似
v = '0'
def program():
x = input('1 or 2 ')
if x == '1':
print('it is 1')
v = '1'
elif x == '2':
print('it is 2')
v = '2'
while True:
program()
print(v)
但是,当我运行此代码时,变量'v'始终打印出默认值0。 为什么不给我我在函数中指定的变量?
答案 0 :(得分:2)
您有两个名为v
的变量:
v=0
声明。v
的函数声明。首先,你真的不应该在函数中使用全局变量,因为这是糟糕的编程习惯。您应该将其作为参数传递,并返回任何其他结果。
如果你真的必须,你可以通过首先将它声明为全局变量来修改函数中的全局变量。
另请注意,您需要在Python 2中使用raw_input
。
def program():
global v
x = raw_input('1 or 2 ')
if x == '1':
print('it is 1')
v = '1'
elif x == '2':
print('it is 2')
v = '2'
Using global variables in a function other than the one that created them
答案 1 :(得分:1)
您的函数操纵变量v
的本地副本。如果您想在调用program()
后获取v的值,请将return v
附加到函数定义的末尾。
那就是:
v = '0'
def program():
x = input('1 or 2 ')
if x == '1':
print('it is 1')
v = '1'
elif x == '2':
print('it is 2')
v = '2'
return v
while True:
v = program()
print(v)
如果您不想返回任何内容,可以将v
设置为全局声明的变量,如下所示:
v = '0'
def program():
x = input('1 or 2 ')
if x == '1':
print('it is 1')
global v
v = '1'
elif x == '2':
print('it is 2')
global v
v = '2'
while True:
program()
print(v)
答案 2 :(得分:1)
为了补充重复标记,以下是对您的代码的解释:
您需要明确告诉您的方法您要使用全局v
,否则,它将永远不会从方法范围内的v
更新。
要解决此问题,您需要在方法中添加global v
:
def program():
global v
# rest of your code here
那应该有用。
答案 3 :(得分:1)
Python中的变量赋值是本地范围的。如果要在函数内部操纵全局状态(或封闭状态),可以将该状态包装在持有者中,然后引用持有者。例如:
v = ['0']
def program():
x = input('1 or 2 ')
if x == '1':
print('it is 1')
v[0] = '1'
elif x == '2':
print('it is 2')
v[0] = '2'
while True:
program()
print(v[0])
上面的段引用一个数组并操纵数组内部的值。