funcname.varname=value与Python中的varname=value有何不同?
在我的一个节目中funcname.varname=value与Python中的varname=value有何不同?,python,variables,global,declare,Python,Variables,Global,Declare,在我的一个节目中 def travel(): travel.frate=[] travel.s=0 在这篇文章中,老师告诉我使用模块名来声明全局变量。 比如travel.frate和travel.s=0。她没有告诉我为什么会这样。有人能解释一下我们为什么要用这个吗??她告诉我使用它,因为全局变量不能在我的计算机中声明。travel.s给你一个与函数本身具有相同作用域的变量——这相当于C中的一个静态变量。这意味着travel.s的值不会在travel()时立即从内存中删除退出
def travel():
travel.frate=[]
travel.s=0
在这篇文章中,老师告诉我使用模块名来声明全局变量。
比如
travel.frate
和travel.s=0
。她没有告诉我为什么会这样。有人能解释一下我们为什么要用这个吗??她告诉我使用它,因为全局变量不能在我的计算机中声明。travel.s
给你一个与函数本身具有相同作用域的变量——这相当于C中的一个静态变量。这意味着travel.s
的值不会在travel()时立即从内存中删除
退出,这与travel
功能中定义的s
一样
与每次分配新值的局部变量不同的是,该值在多个函数调用中保持不变
顺便说一下——Python确实有模块范围的变量(这些是Python中“global”关键字所指的);因此,你的老师给出的指导有些不准确/误导
可以使用模块作用域变量,如下所示:
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中,使用模块级变量通常是一种糟糕的做法和代码味道;希望您以后能在课程中学习面向对象设计。但为什么要使用函数名来声明全局变量呢??请帮助我将问题简化为更清楚。为什么使用函数名声明全局变量??就像它所用的:旅行社。travel是函数名,s是一个全局变量。为什么我们使用它?为什么我们在s之前使用travel而不是简单的s?@AanandhiVB,因为如果它只是s
,那么一旦函数退出,该值就会丢失。使用travel.s
,该值的有效期超过了对函数的单个调用。