在Python中如何在函数内部修改全局变量

19

我是新手学习Python。

我不太明白如何在函数内设置变量并稍后更改它们以供使用。我的脚本需要从一个创建图表的函数中获取x和y值,这些变量根据图表的大小确定。稍后,这些变量需要传递给脚本中的打印命令,以输出HTML。假设我有全局变量:

    originx_pct = 0.125
    originy_pct = 0.11

但是当函数运行时,这些将需要更改...

    def makeplot(temp, entropy,preq):
        originx_pct = origin.get_points()[0][0]
        originy_pct = origin.get_points()[0][1]

然后在稍后编写的HTML页面的JavaScript内打印...

    print('var originx_pct = {};'.format(originx_pct))
    print('var originy_pct = {};'.format(originy_pct))

这两个变量不会改变,我不明白需要做什么才能更新它们并能够打印它们(在函数外部)。 我假设该函数不知道这两个变量,因此无法更改它们。 如果我将这两个变量作为参数传递给函数,那么如何获取值以进行脚本的打印部分?


1
尝试在函数开头添加一行 global VARIABLENAMEHERE(每个您想引用的变量都需要添加一行)。 - Max
1
一般来说,如果可能的话,最好避免使用全局变量。 - SuperStew
如果这些值被传递到函数中并从中返回更改,则测试函数并推理其行为要容易得多。 - Patrick Haugh
3个回答

39

您需要在函数中使用global关键字。

originx_pct = 0.125
originy_pct = 0.11

def makeplot(temp, entropy,preq):
    global originx_pct, originy_pct
    originx_pct = origin.get_points()[0][0]
    originy_pct = origin.get_points()[0][1]

你可以在这里阅读更多关于global的信息。


4
在您的函数中,您需要返回值。将您的makeplot更改为以下内容:
def makeplot(temp, entropy, preq):
    local_originx_pct = origin.get_points()[0][0]
    local_originy_pct = origin.get_points()[0][1] # the local_ in the names doesn't mean anything, it is just for clarity.
    return local_originx_pct, local_originy_pct 

然后,在调用函数时,将变量设置为其返回值。

originx_pct, originy_pct = makeplot(args_and_stuff)

与ltd9938答案中直接更改全局变量相比,这被认为是更好的做法。它有助于防止无意中破坏其他函数的东西。更多不使用全局变量的原因


3

你可以在函数内部使用以下代码声明全局变量:global originx_pctglobal originy_pct。或者你可以在执行函数时通过返回值来获取这些变量。为此,你可以使用以下代码:

def makeplot(temp, entropy,preq):
    return (origin.get_points()[0][0],origin.get_points()[0][1])

或者

def makeplot(temp, entropy,preq):
    return origin.get_points()[0][0:2]

如果 origin.get_points()[0] 只有两个元素,你只需执行以下操作:
def makeplot(temp, entropy,preq):
    return origin.get_points()[0]

然后,在您的主函数中,输入以下内容:
originx_pct, originy_pct = makeplot(temp, entropy,preq)

虽然我不清楚为什么你要将 temp entropy preq 传递给 makeplot ,因为你似乎没有使用它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接