在我的一个程序中,
def travel():
travel.frate=[]
travel.s=0
在这里,老师告诉我使用模块名来声明全局变量。
例如travel.frate
和travel.s=0
。她没有告诉它为什么会这样。有人请解释我们为什么要使用这个?她告诉我使用它,因为全局变量无法在我的计算机中声明。
答案 0 :(得分:0)
travel.s
为您提供了一个与函数本身具有相同范围的变量 - 这相当于C中的static
变量。这意味着travel.s
的值不会被删除只要travel()
退出,就会从内存中恢复,就像s
函数中定义的travel
一样。
要说明一点不同,该值会在多次调用函数时持续存在,这与每次都分配了新值的局部变量不同。
顺便说一下 - Python 确实有模块范围的变量(这些是“global”关键字在Python中引用的);因此,你的老师在给出的指导中有些不准确/误导。
可以像这样使用模块范围的变量:
s = 0
def travel():
global s # this lets the travel function update the value
s = s + 1 # ...so that the change here persists across multiple calls
所有这一切 - 使用模块级变量通常是一种不好的做法,并且在Python中有代码味道;希望你在课程的后期学习面向对象的设计。