我对变量有一点疑问。我的主要语言是Java(我正在学习Python)所以,我在调用函数中的变量时遇到问题,它没有刷新它的新值:
# Values
global e1x, e1y, e1c, e2x, e2y, e2c, altx, alty, x, y
def getValues():
print("Taking Ax + By = C:")
e1x = float(input("Value of x in first equation: "))
#...
if(confirm()): # A function I ommited 'cause its irrelevant
return e1x, e1y, e1c, e2x, e2y, e2c
else:
getValues()
def calculateValues():
# Stuff with variables
# MAIN
getValues()
calculateValues()
我尝试在没有全局的情况下编写它,尝试使用 self 字,但它不起作用。 (使用Python 3)
ERROR:
Traceback (most recent call last):
File "E002_GaussSeidel.py", line 41, in <module>
calculateValues()
File "E002_GaussSeidel.py", line 34, in calculateValues
print(str(e1x))
NameError: name 'e1x' is not defined
答案 0 :(得分:2)
您需要在功能中加入global
。外面什么也没做。
def getValues():
global e1x, e1y, e1c, e2x, e2y, e2c, altx, alty, x, y
print("Taking Ax + By = C:")
e1x = float(input("Value of x in first equation: "))
#...
if(confirm()): # A function I ommited 'cause its irrelevant
return e1x, e1y, e1c, e2x, e2y, e2c
else:
getValues()
def calculateValues():
# Stuff with variables
# MAIN
getValues()
calculateValues()
但为什么需要全局变量?你打算在函数之外使用那些变量吗?仅当您需要修改函数范围之外的值时,才需要global
。
将代码重新格式化为:
def getValues():
print("Taking Ax + By = C:")
e1x = float(input("Value of x in first equation: "))
#...
if(confirm()): # A function I ommited 'cause its irrelevant
return e1x, e1y, e1c, e2x, e2y, e2c
else:
getValues()
def calculateValues(values):
# Stuff with variables
# MAIN
calculateValues(getValues())
这不是通过全局变量传递信息,而是通过返回值传递信息。 There are hundreds of articles on why global variables are evil.
values
包含返回的变量e1x, e1y, e1c, e2x, e2y, e2c
。可以使用列表索引表示法访问它。如果要按名称引用变量,请使用:
#...
def calculateValues(e1x, e1y, e1c, e2x, e2y, e2c):
# Stuff with variables
# MAIN
calculateValues(*getValues())
*foo
是列表解包符号。这是一个高级主题,但在您的情况下它很有用。您可以阅读有关列表解包here.