精华内容
下载资源
问答
  • python全局变量-局部变量区别及用法

    万次阅读 多人点赞 2017-11-13 11:12:36
    python里面全局变量和局部变量的区别就常用情况

    对于很多初学的同学,对全局和局部变量容易混淆,看看下面给大家的讲解相信都应该明白

     

    两者的区别了。

     

    定义:

    全局变量:在模块内、在所有函数的外面、在class外面

    局部变量:在函数内、在class的方法内

     

    下面来看看例子

    一、函数内部调用全局变量

     

    a="hello"  #全局变量a
    def test():
        global a#调用全局变量a
        b =a     #test方法里之后再调用a时,都是全局的a
        print(b,a)
    test()

     

    在test函数里调用全局变量a,看看运行后的结果


    运行后都是全局变量的值hello

    二、函数内部使用与全局变量同名的局部变量

     

    a="hello"  #全局变量a
    def test():
       
    a="hell0 local" #定义了一个局部变量a
       
    b =a     #test方法里之后再调用a时,都是局部的a
       
    print(b+",",a)
    test()

     

    这里在函数test里面再定义了一个a,这个a就为局部变量了,之后在test里调用的a全都是局部的a。看看运行结果:

     

    三、函数内部修改全局变量值

     

    a="hello"  #全局变量a
    def test():
        global a
        a="hell0 global" #修改全局变量a的值
        b =a     #test方法之里后再调用a时,都是全局的a
        print(b+",",a)
    test()

     

    在函数test里面先声明用的是全局的a,然后对a进行修改,就等于是修改了全局变量a的值。

    看看运行结果:

     

       注:在方法内部的变量是在=号前面的,那肯定是局部变量。如果是第一次出现在=号后

     

    面的,那肯定是调用的全局变量;全局变量可以在函数里面调用,局部变量只能在对应的函

     

    数里面调用,在该函数外面任何地方都无法被调用。

     

    有问题加QQ群交流610845268

    展开全文
  • 对于一个局部变量应该是各线程独立的,一个线程不会改变另一个线程的临时变量。 线程时, 几个线程间输出信息是交叉在一起的, 但你又没有区分是哪个线程输出的, 所以你自己就误认为是同一个线程输出的东西被改变...

    对于一个局部变量应该是各线程独立的,一个线程不会改变另一个线程的临时变量。

    多线程时, 几个线程间输出信息是交叉在一起的, 但你又没有区分是哪个线程输出的, 所以你自己就误认为是同一个线程输出的东西被改变了.  实际上是你自己的理解错误.

    所有线程都用cout输出内容,你如何判断哪些内容是哪个线程输出的,
    而且cout是一个全局变量,多线程同时访问需要加锁,否则会出现一些莫名其妙的情况

     

    结论: 局部变量是不会被修改的,而全局变量则很容易就被修改了,而你却还不知道。

    //

    多线程中,不同线程调用同一个函数,使用的是同一份代码还是不同线程用函数的多个拷贝?为什么?即每个线程用一个拷贝函数。
    不同线程中调用函数的局部变量是否指向的都指向同一个?

    每个线程有自己的堆栈,所以调用函数时对函数的相关参数也是各有一份的,不用担心;只是全局变量需要考虑同步。

    展开全文
  • 1.局部变量定义:在成员方法中定义的...(方法中的形参也可以作为局部变量)例:public void method1() { //n,i均为局部变量 int n; for(int i=0;i<5;i++) { System.out.println("*"); } ...

    1.局部变量

    定义:在成员方法中定义的变量称为局部变量;(方法中的形参也可以作为局部变量)

    例:

    public void method1() {               //n,i均为局部变量     
            int n;
            for(int i=0;i<5;i++)
            {

                System.out.println("*");

            }
            for(int i=0;i<4;i++)
            {
                System.out.println("$");         //两个完全相同的局部变量在互不嵌套下可以多次声名定义
            }
        }

    作用有效范围:局部变量在方法创建时生效,在方法结束时被销毁

    技巧:在互不嵌套的作用域中可以同时声名多个名称,类型相同的局部变量;但在相互嵌连的区域中不能重复定义。

    2.静态变量与方法

    定义:由关键字static修饰的变量、常量和方法被称为静态变量、常量、方法。

    有时在处理问题时,会需要两个类在同一个内存区域共享一个数据。例如,在球类中使用PI这个常量,可能除了本类需要这个常量外,在另一个类中也需要这个常量。这时没有必要在两个类中同时创建PI这个常量,因为这样系统会将这两个不再同一个类中定义的常量分配到不同的内存空间中。为了解决这个问题,可以将该常量设置为静态的。所以静态数据与静态方法的作用通常是为了提供共享数据或方法。但静态成员同样遵循着public、private、protected修饰符的约束。

    静态成员是属于所有的,区别于个别对象。可以在本类或其他类使用类名和“.”运算符调用静态成员。              既:类名.静态成员

    下看看一个代码:

    public class Static1 {
        int n;
        String name;
        static int pages;                       //静态变量
        static int add;
        public  void method1() {
            //static int author;   错误语句                        //方法中不能定义静态变量
            System.out.println(name);
            method2();                          //正确语句,非静态方法中可以调用静态方法
            
        }
        public static void method2() {
            System.out.println(Static1.pages);  //用类名.啥时必须该变量为静态变量
            //method1();                        // 错误语句,静态方法中不能调用非静态方法
        }
        public static void main(String[] args) {
            Static1 book1=new Static1();
            book1.name="钢铁是怎样炼成的";           //对象.调用,区别于类名.调用
            Static1.add=15;                     //类名.调用
            //Static1.n=5;                      //错误语句,非静态变量不能这样调用
            

        }

    以上代码表明了几个注意点:
    1:静态方法中不能直接调用非静态方法,而非静态方法可以直接调用静态方法;
    2:在静态方法中不能实用this关键字;

    3:不能将方法体内的局部变量声名为static;


    实用技巧
    如果在执行类时,希望先执行类的一个初始化部分,可以用static关键字封装起来,并且只会执行一次这部分

        public class example{
            static {
                //some
            }
        }
    这段代码中,会先执行some部分,而且只会被执行一次






















    展开全文
  • 此内容来自于沙行勉的《计算机科学导论-以python为舟》函数调用的基本概念:程序语言中的函数与高中数学中的函数相似。...这样就可以用z+f(x,y)来表示上面的运算,对于f(x,y)运算,将会调用到已经定义的函数f(x,y)=...

    此内容来自于沙行勉的《计算机科学导论-以python为舟》

    • 函数调用的基本概念:程序语言中的函数与高中数学中的函数相似。高中函数,假设要实现z+x*y²这个计算。对于乘法计算,定义一个函数f(x,y)=x*y²,他有两个参数x和y。计算x²+y²后得到一个值,作为函数的返回值,赋给f(x,y)。这样就可以用z+f(x,y)来表示上面的运算,对于f(x,y)运算,将会调用到已经定义的函数f(x,y)=x*y²。程序语言中的函数也有参数和返回值,以及定义与调用。程序中的函数就是将一些程序语句结合在一起的部件,可以多次的调用。
    • 函数中的变量:

    局部变量:函数中的局部变量只能被这个函数访问,不能被其他函数访问。

    全局变量:在函数之外被赋值的变量。

    a = 10
    def fun():
        a = 20
        print(a)    #函数内a内局部变量
    fun()
    print(a)        #函数外a为全局变量复制代码

    • 局部变量的判断:
    1. 不出现在global语句中 (global语句为申明某个变量为局部变量)
    2. 出现在函数参数中
    3. 出现在函数参数语句中的等号左边

    • python函数调用:

    python进行函数调用时,参数的传递都是通过赋值的方式。

    def func(L1):       #定义一个func()函数,参数为L1
        L1.append(1)    #对L1采用.append()方法,结果为[2,1],并且改变全局变量L的值(因为L1和L都指向同一个heap)
    L = [2]             
    func(L)             #func()函数运行,参数为L,进行赋值传递给func()函数中的局部变量L,
    print(L)            func()函数执行完后,局部变量L1指向全局上的值[2,1],L也指向这个全局上的值[2,1](L1与L指向同一块内存区域)复制代码

    其中列表做参数时,传递的是指针,函数中的参数指向的内容为全局变量区域,成为heap。

    stack-栈,heap-堆

    注意事项:

    1. 列表的append、pop、remove等方法,以及给L[i]赋值,对L[i]使用增强赋值等,都会修改列表L所指向的内容,进而对全局产生影响。
    2. 列表的一般合并,或者使用列表的分片(即L[i:j]这种形式)都不会对全局的列表L产生影响。合并与分片的操作会产生新的列表,赋值到一块新的内存区域(heap)上。

    • return(L)返回L的指针:

    def F1():
        L = [3,2,1,]    #L是局部变量,而[3,2,1]是在栈的外面heap上。
        return(L)
    L = f1() 
    print("L=",L)复制代码

    全局变量L调用f1()函数,f1()函数中的局部变量L经return返回到函数外的全局变量L,此时局部变量L和全局变量L都指向同一个heap。

    • L做函数参数传递:

    def F2():                  #参数L是个指针,是存放在栈上的局部变量
        L = [2,1]              #此语句将函数L又赋值为[2,1]
        return(L)              #return(L)将局部变量L的值赋值给了主调函数的全局变量(例如L = F2(),L是主调函数,F2()则是被调函数)
    def F3():               
        L.append(1)            #L指向的是原来的全局内容,会改变全局L
        L[0] = 0
    L = [3,2,1]               
    L = F2(L);print("L=",L)   
    F3(L);print("L=",L)         #调用F3(L)后,L的全局已经被改变复制代码

    • 好的编程习惯:
    1. 尽量避免在函数中使用全局变量
    2. 若在函数中需要使用外部的变量,使用参数传递。
    3. 对函数调用中mutable变量(列表、字典等)



    转载于:https://juejin.im/post/5bd58d266fb9a05cf03a305c

    展开全文
  • 对于有些编译器而言,在同一个函数内可以定义个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量...
  • java虚拟机 jvm 局部变量表实战

    千次阅读 热门讨论 2016-04-02 12:48:36
    java局部变量表是栈帧重要组中部分之...所以,如果函数参数和局部变量比较,会使的局部变量表膨胀,每一次调用会占用更的栈空间。最终结局就是栈空间内存一定的情况下调用的次数减少。 1.1.1. 局部变量表变量影响
  • 关于局部变量和全局变量运行快慢

    千次阅读 2020-04-06 19:09:16
    一开始我想的是局部变量的话,创建销毁的代价不想承担(调用构造函数和析构函数),但是实际而言,这点代价还没有 去寻址该变量所花费的时间代价大。 原因: 从rics角度来说,就是在于局部对象存放在栈中,容易被...
  • static函数修饰全局变量和局部变量

    千次阅读 2019-04-09 17:59:49
    普通的局部变量是在栈上进行分配的,局部变量所处的函数被多次调用时每次调用的位置都不一样的。局部变量可以在堆上进行动态的分配,但须记得释放空间。  静态局部变量和普通局部变量区别如下:  访问权限: ...
  • C++中局部变量可以和全局变量重名吗? 本文章已收录于: 这是一个作用域的问题。一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是从声明的那一点开始,直到这个声明所在的块结束...
  • C++中局部静态变量调用问题

    千次阅读 2015-09-28 10:48:26
    问题背景是这样的,在学习《C++ Primer》的时候,学到 “6.1.1 局部对象”中“局部静态变量”知识,例子: size_t count_called() {  static size_t ctr = 0;  return ++ctr; } int main() {  for(size_t i=0; i!...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    变量与方法 成员变量与局部变量的区别有哪些 在Java中定义一个不做事且没有参数的构造方法的作用 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 一个类的构造方法的作用是什么?若一个类没有...
  • 全局变量与局部变量的使用 全局变量即使声明在函数方法里面,只要该方法被调用过,便可在方法外访问到该变量 局部变量的销毁是在语句块的结束 do a=10 local b=20 print(a,b) end print(a,b) &gt;lua...
  • for循环中的变量是局部变量还是全局变量?

    万次阅读 热门讨论 2019-08-25 20:39:08
    今天写代码时候发现的知识点,对于大神来说可能这不是什么问题,但是对于像我们这样的新手小白而言,发现这个知识点的喜悦难以言表,所以我也同大家分享一下,希望更的人不要再犯相同的错误! 这是我参照《Python...
  • 静态局部变量和静态全程变量static。

    万次阅读 多人点赞 2019-01-01 13:28:04
    我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何...
  • 深入理解javascript全局变量与局部变量的所带来的问题的影响JavaScript通过函数管理作用域。在函数内部声明的变量只在这个函数内部,函数外面不可用。另一方面,全局变量就是在任何函数外面声明的或是未声明直接简单...
  • python3的全局变量和局部变量

    千次阅读 2018-11-19 20:47:03
    局部变量在函数调用时被创建,在函数调用完成后自动销毁 全局变量 定义在函数体外,模块内的变量称为全局变量 全局变量在所有函数体内都可以进行访问 全局变量在函数体内不能直接修改绑定关系 a = 100 def test...
  • Python线程下的全局变量、局部变量 最近开发一个新功能遇到一个问题,就是在一个A.py文件生成2个线程,调用B.py里的函数,B.py里面有若干global定义全局变量,导致程序得不到想要的结果。B.py文件里面的全局变量,...
  • C语言--静态局部变量

    2020-10-05 09:14:29
    静态局部变量定义时前面要加static关键字来标识,静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。...
  • 在一个方法内,可以定义和成员变量同名的局部变量或参数,此时成员变量被屏蔽。此时如果想要访问成员变量,可以通过 this 关键字来访问,this 关键字来访问,this 为当前实例的引用,如果要访问类变量,可以通过类名...
  • 声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。...成员方法一旦被定义,便可以在程序中多次调用,提高了编程效率。声明成员方法的语法格式如下: public clas...
  • Labview 局部变量

    千次阅读 2017-04-07 11:59:40
    局部变量和全局变量是LabVIEW用来传递数据...这时候我们就需要用到局部变量或全局变量,通过局部变量或全局变量你可以在程序框图中的个地方读写同一个控件。 局部变量:只能在同一个VI中使用的变量 创建局部变
  • 下一次调用的时候还可以保持原来的赋值 。这一点是他与 堆栈 变量和堆变量的区别。  2、变量用static告知编译器,自己仅仅在变量的作用域范围内可见。这一点是他与全局变量的区别。 从以上分析可以看出,把...
  • c++ 线程局部变量thread_local

    千次阅读 2020-01-14 10:07:52
     在Linux系统中使用C/C++进行线程编程时,我们遇到最多的就是对同一变量线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的...
  • 全局变量和局部变量的区别

    万次阅读 多人点赞 2018-05-13 16:15:15
    似乎是语句,必须在函数体内才能执行,后来就看到这么一句话:赋值语句需要有函数执行,c语言最基本的执行体是函数,你可以初始化,但不能在函数体外赋值。在VC++中,确实出错,指针的地方出错,错误提示:错误说的是:...
  • 局部内部类的对象可以访问同一个方法中被定义为final的局部变量。定义为final后,编译程序的实现方法:将所有的局部内部类对象要访问的final型局部变量,都拷贝成为该内部类对象中的一个数据成员。这样,即使栈中...
  • 变量又分为局部变量和全局变量,但他们都在内存的静态区,静态变量只能被初始化一。 静态全局变量,作用域仅限于被定义的文件中,其他文件即使用extern声明也没法使用它。准确地说作用域是从定义之处开始,到文件...
  • C语言全局变量和局部变量总结

    千次阅读 2018-08-28 15:01:10
    动态存储区主要存放以下数据:函数的形参、自动变量(没有加static的局部变量)、函数调用的现场现场保护和返回值。 动态存储区的数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。 C语言中...
  • js闭包可以实现局部变量共享

    千次阅读 2017-05-25 15:29:55
    //f1是同一个对象,多次调用,因为函数里面有闭包,所以可以实现局部变量共享  console.log(f1());//第二次调用,此次变量的起始值是上次的变量运行完后的值  console.log(f2()); 结果:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 300,358
精华内容 120,143
关键字:

局部变量可以多次调用吗