【问题标题】:Update Global Variables Input as Parameters Rather Than Returning Results From Function更新全局变量作为参数输入,而不是从函数返回结果
【发布时间】:2021-12-27 20:23:35
【问题描述】:

目标

我正在尝试编写一个函数,其中一个或多个输入参数是一个由函数更新的全局变量,而不必在函数内使用return 值。我知道我可以从函数中返回一个元组或两个单独的值,但我认为如果可能的话,从函数内部更新全局变量将是另一种有趣的方法。

这样做的原因

当全局变量已知(即先前在 python 脚本中定义)时,使用函数更新全局变量很容易。但是,我想在单独的 .py 文件中定义该函数,以便在其他 python 脚本中轻松使用该函数。因此,我需要能够支持不同的变量名来更新。

虽然这根本没有必要,但我只是对这是否可能感兴趣。

示例伪代码

我在想这样的事情:

def math_function(input_val, squared_result, cubed_result):
    squared_result = input_val**2 #update the var input as the squared_result parameter
    cubed_result = input_val**3 #update the var input as the cubed_result parameter

您可以在其中输入input_val 的数字,然后输入squared_resultcubed_result 的全局变量,函数会根据结果进行更新。然后理论上它会像这样工作:

#Declare global variables
b = 0
c = 0

#then somewhere in the code, call the function
math_function(2, b, c)

#check the new values
print(b) #Output: b = 4
print(c) #Output: c = 8

这将允许我在不同的 python 脚本中使用该函数,而不必担心返回结果的顺序。

【问题讨论】:

  • Python 通过值而不是引用传递参数。所以赋值给参数变量对调用者的变量没有影响。
  • 这个的根本问题是你不能在 Python 中传递变量。您只能传递对象。您的函数接收参数200,而不是2bc
  • 您可以做到这一点的唯一方法是传递一个可变容器对象。然后该函数可以修改其内容。

标签: python function


【解决方案1】:

首先:我绝不是提倡这个。

您可以使用globals 内置函数按名称访问全局变量:

def gtest(name,value):
    globals()[name] = value

gtest('new_global','new_value')
print(new_global)

【讨论】:

  • 如果您从不同的模块调用它,这会访问错误模块的全局变量。
  • 当函数在与我正在访问的变量相同的脚本中定义时,这实现了我所寻找的。知道该怎么做很有趣,但像你说的那样可能是不可取的。我还没有在不同的模块中尝试过,我怀疑它可能不适用于导入的模块,因为globals() 函数访问变量字典。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多