在Python中的函数外设置变量

时间:2019-03-11 22:04:58

标签: python scope namespaces global-variables

假设我们有一个这样的结构:

x = ""
def xy():
    x = "String"

现在,当调用xy()并随后打印x时,它为空。
尝试将变量声明为全局变量,如下所示:

x = ""
def xy():
    global x = "String"

产生无效语法的语法错误。 为什么?

在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我找到了答案。

    x = ""
    def xy():
        global x 
        x = "String"

获得我想要的结果。

答案 1 :(得分:1)

为什么不尝试将变量传递给修改函数:

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)

输出:

  

我的输入字符串

希望这说明了本地函数可以在将值输入到函数时修改它。然后应返回此修改后的值,并用于覆盖旧值。这种技术不仅允许您将全局变量传递给其他函数进行修改,而且还允许将局部变量传递给函数进行修改。

答案 2 :(得分:0)

您可以将变量传递到函数中,这是最佳实践。您也可以将函数的结果返回到变量。因此,您不必使用return将变量发送回变量,而无需在函数内部为x赋值,请参见下文:

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'