Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
funcname.varname=value与Python中的varname=value有何不同?_Python_Variables_Global_Declare - Fatal编程技术网

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
,该值的有效期超过了对函数的单个调用。