【发布时间】: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 只会在参数像字符串一样不可变的情况下进行复制(即使这样,它们也可能指向公共内存地址)。否则大多数容器和对象都有引用语义。