【问题标题】:Creating a global variable versus passing the variable between functions创建全局变量与在函数之间传递变量
【发布时间】:2021-10-21 17:19:51
【问题描述】:

我正在遍历一个列表,对于列表中的每一行,我需要调用一个函数来读取该行并对其进行操作。我应该将列表设为全局变量还是应该将每一行传递给不同的函数?

函数 a,b,c 不修改列表的行,它们只是读取值并做出一些决定。

选项 A

def iterate_over_list():
    list_ = [ 1,2,3 ]
    for each_row in list_:
        func_a(each_row)
        func_b(each_row)
        func_c(each_row)

def func_a(each_row):
    read_the_row__value_and_make_a_decision

def func_b(each_row):
    read_the_row__value_and_make_a_decision

def func_c(each_row):
    read_the_row__value_and_make_a_decision

选项 B

global list_

def iterate_over_list():
    list_ = [ 1,2,3 ]
    for each_row in list_:
        func_a()
        func_b()
        func_c()

def func_a():
    read_the_row__value_and_make_a_decision

def func_b():
    read_the_row__value_and_make_a_decision

def func_c():
    read_the_row__value_and_make_a_decision

【问题讨论】:

  • 一般经验法则:全局变量 = ‘可能有更好的方法,重新考虑解决方案。’
  • 我担心内存占用,因为如果我不使用全局变量,Python 会在我每次调用函数时进行复制。所以我最终会为 10 个功能提供 10 个副本。我没有修改变量,只是读取它。
  • 不确定您的评论是否是对我的回应;但我只想提一下,无论谁维护你背后的代码(即使在这种情况下,未来的情况下),他们都会非常感谢 not 涉及 any 的设计全局变量。 (相信我!):-)
  • 你的行数很大吗?为什么你如此关心向每个函数传递一行?
  • @BruceBanner Python 只会在参数像字符串一样不可变的情况下进行复制(即使这样,它们也可能指向公共内存地址)。否则大多数容器和对象都有引用语义。

标签: python scope


【解决方案1】:

正如@S3DEV 所说,除非严格必要,否则应避免使用全局变量。

假设我正确地关注了你并且每个函数只需要访问该行而不是整个列表,那么选项 A 是非常受欢迎的。

如果您希望每个函数都可以访问list_,您可以在定义list_ 之后定义iterate_over_list 内部的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多