我有下面的代码,我改变了全局变量。我读过的大部分内容都说远离全局...在下面的示例中,我想使用“make_lists”然后将其打印在“print_list”中,然后清除列表。我使用全局变量来做这个,关于如何避免全局变量的建议?
我知道我可以将这一切添加到一个函数中,但这是更大函数的一部分,这是我遇到问题的唯一部分。提前谢谢。
x_lst = []
def make_lists():
global x_lst
x_lst.append("Hello")
def print_list():
global x_lst
for i in x_lst:
print(i)
x_lst = []
def main():
make_lists()
print_list()
if __name__ =="__main__":
main()
答案 0 :(得分:2)
为了避免使用global,你必须在函数声明中使用return
关键字来返回一个值,在我们的例子中,这将是你新创建的列表。您还必须在函数声明中使用arguments
,它们是函数中值的占位符。因此,您不需要全局值的原因是因为您将列表从一个函数传递到另一个函数。
def make_lists():
return ['Hello'] # Your are creating the list with a single value,
# and return it
def print_list(ls):
for i in ls: # You are iterating thru the list,
print(i) # which is the input of this function
def main():
print_list(make_lists()) # In your main function you call the make_list()
# which will return the newly created list, and
# pass it to print_list, which will iterate thru
# the list and prints your values out
if __name__ =="__main__":
main()
答案 1 :(得分:1)
def make_list():
return ['Hello']
def print_list(l):
for x in l:
print(x)
def main():
print_list(make_list())
将数据传递给带参数的函数,并使用返回值传递数据。
答案 2 :(得分:1)
这是我的简单建议,为什么不给出功能输入。传入列表打印而不是使用全局变量是一个简单的选择。如果您正在寻找一种方法来保持特定范围的状态,可以尝试将这些函数放在一个类中(换句话说使用OOP)
全局变量的问题在于,当您将'x_lst'声明为全局变量时,它会向函数外部打开“x_lst”,这可能不是或不是您的预期目标。
答案 3 :(得分:0)
我对您的代码进行了一组最小的更改,说明了如何传递列表而不是使用全局。希望这有助于澄清。
def make_lists(x_lst):
x_lst.append("Hello")
def print_list(x_lst):
for i in x_lst:
print(i)
def main():
x_lst = []
make_lists(x_lst)
print_list(x_lst)
if __name__ =="__main__":
main()