假设我们有这样的结构:
x = ""
def xy():
x = "String"
现在,当调用xy()并在之后打印x时,它是空的。 试图将变量声明为全局变量,如下所示:
x = ""
def xy():
global x = "String"
产生无效语法的语法错误。为什么?
在此先感谢您的帮助。
我找到了答案。
x = ""
def xy():
global x
x = "String"
产生我想要的结果。
为什么不尝试将变量传递给修改函数:
x = ''
def xy(x):
x += "String"
return x
x = xy(x)
print(x)
这定义了一个函数,它接受输入x
,然后在修改后返回它。然后将此修改后的值重新分配给范围之外的x
。也许一个更清晰的例子看起来像
x = 'My input' # create an initial variable
def xy(my_input):
my_input += " String" # append another string to our input string
return my_input # give the modified value back so we can overwrite old value
x = xy(x) # reassign the returned value of the function to overwrite this variable
print(x)
输出:
我的输入字符串
希望这说明如果输入到函数,本地函数可以修改值。然后应返回此修改后的值并用于覆盖旧值。此技术不仅允许您将全局变量传递给其他函数进行修改,还允许将局部变量传递给函数进行修改。
您可以将变量传递给函数,这是最佳实践。您也可以将函数的结果返回给变量。因此,不是在函数内部为x分配值,而是可以使用return
将变量发回,请参见下文:
def xy(input):
output = ''
if input == 'Empty':
output = 'Full'
else:
output = 'Empty'
return output
x = 'Empty'
print(x)
>>> 'Empty'
# Update the result using xy()
x = xy(x)
print(x)
>>> 'Full'
# Once more
x = xy(x)
print(x)
>>> 'Empty'