funcname.varname = value与Python中的varname = value有什么不同?

时间:2015-03-18 17:15:55

标签: python variables global declare

在我的一个程序中,

def travel():
     travel.frate=[]
     travel.s=0

在这里,老师告诉我使用模块名来声明全局变量。 例如travel.fratetravel.s=0。她没有告诉它为什么会这样。有人请解释我们为什么要使用这个?她告诉我使用它,因为全局变量无法在我的计算机中声明。

1 个答案:

答案 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中有代码味道;希望你在课程的后期学习面向对象的设计。