精华内容
下载资源
问答
  • 本文主要讲述python全局变量局部变量和导入模块变量的方法。具有很好的参考价值,下面跟着小编一起来看下吧
  • 本文主要讲述全局变量局部变量和导入模块变量的方法。参考:《Python核心编程 (第二版)》一. 局部变量声明适用的程序的范围被称为了声明的作用域。在一个过程中,如果名字在过程的声明之内,它的出现即为过程的...

    定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域。本文主要讲述全局变量、局部变量和导入模块变量的方法。

    参考:《Python核心编程 (第二版)》

    一. 局部变量

    声明适用的程序的范围被称为了声明的作用域。在一个过程中,如果名字在过程的声明之内,它的出现即为过程的局部变量;否则出现即为非局部。例:

    def foo(x):

    print 'x = ',x

    x = 200

    print 'Changed in foo(), x = ',x

    x = 100

    foo(x)

    print 'x = ',x

    输出结果如下:

    >>>

    x = 100

    Changed in foo(), x = 200

    x = 100

    在主块中定义x=100,Python使用函数声明的形参传递x至foo()函数。foo()中把x赋值为200,x是函数的局部变量;所以在函数内改变x的值,主块中定义的x不受影响。

    核心笔记:

    当搜索一个标识符时,Python先从局部作用域开始搜索。如果在局部作用域内没有找到那个名字,那么一定会在全局域找到这个变量,否则会被抛出NameError异常。

    作用域的概念和用于找到变量的名称空间搜索顺序相关。当一个函数执行时,所有在局部命名空间的名字都在局部作用域内;当查找一个变量时,第一个被搜索的名称空间,如果没有找到那个变量,那么就可能找到同名的局部变量。

    二. 全局变量

    全局变量的一个特征是除非删除掉,否则它们存活到脚本运行结束,且对于所有的函数,它们的值都是可以被访问的。然而局部变量,就像它们存放的栈,暂时地存在,仅仅只依赖于定义它们的函数现阶段是否处于活动。当一个函数调用出现时,其局部变量就进入声明它们的作用域。在那一刻,一个新的局部变量名为那个对象创建了,一旦函数完成,框架被释放,变量将会离开作用域。

    X = 100

    def foo():

    global X

    print 'foo() x = ',X

    X = X + 5

    print 'Changed in foo(), x = ',X

    def fun():

    global X

    print 'fun() x = ',X

    X = X + 1

    print 'Changed in fun(), x = ',X

    if __name__ == '__main__':

    foo()

    fun()

    print 'Result x = ',X

    输出结果如下:

    >>>

    foo() x = 100

    Changed in foo(), x = 105

    fun() x = 105

    Changed in fun(), x = 106

    Result x = 106

    核心笔记:

    使用global语句定义全局变量。当使用全局变量同名的局部变量时要小心,如果将全局变量的名字声明在一个函数体内,全局变量的名字能被局部变量给覆盖掉。所以,你应该尽量添加global语句,否则会使得程序的读者不清楚这个变量在哪里定义的。

    你可以使用同一个global语句指定多个全局变量。例如global x, y, z。

    当我在制作Python爬虫时,需要想函数中传递url,循环爬取每个url页面的InfoBox,此时的文件写入操作就可以有两种方法实现:1.通过传递参数file;2.通过定义全局变量file。

    SOURCE = open("F:\\test.txt",'w')

    def writeInfo(i):

    global SOURCE

    SOURCE.write('number'+str(i)+'\n')

    def main():

    i=0

    while i<50:

    writeInfo(i)

    print i

    i=i+1

    else:

    print 'End'

    SOURCE.close()

    main()

    PS:在此种用法中,如果我们在函数writeInfo()中不使用global 声明全局变量SOURCE,其实也可以使用,但是此时应该是作为一个内部变量使用,由于没有初始值,因此报错。Python查找变量是顺序是:先局部变量,再全局变量。

    UnboundLocalError: local variable 'SOURCE' referenced before assignment

    三. 模块导入变量

    主要方法是通过在py文件中模块定义好变量,然后通过import导入全局变量并使用。例:

    import global_abc

    def foo():

    print global_abc.GLOBAL_A

    print global_abc.GLOBAL_B

    print global_abc.GLOBAL_C

    global_abc.GLOBAL_C = global_abc.GLOBAL_C + 200

    print global_abc.GLOBAL_C

    if __name__ == '__main__':

    foo()

    print global_abc.GLOBAL_A + ' ' + global_abc.GLOBAL_B

    print global_abc.GLOBAL_C

    输出如下所示,全局变量结构是可以改变的。

    >>>

    hello

    world

    300

    500

    hello world

    500

    截图如下所示:

    PS:应该尽量避免使用全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误。这种错误是很难发现和更正的。同时,全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量,但某些情况不可避免的需要使用它。

    最后关于闭包和Lambda(相当于函数)就不再介绍。

    以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

    展开全文
  • 1,全局变量 ** 1,在函数和类定义之外声明的变量。 作用域为定义的模块,从定义位置开始,知道模块结束。 2,全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。 3,全局变量一般做常量使用 4...

    **

    1,全局变量

    **

    1,在函数和类定义之外声明的变量。

    作用域为定义的模块,从定义位置开始,知道模块结束。

    2,全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。

    3,全局变量一般做常量使用

    4,在函数内要改变全局变量的值,要使用global声明一下

    全局变量的作用域测试:

    a = 100		#全局变量
    
    
    def f1():
        global a			# 在函数内改变全局变量的值,增加global关键字声明
        print(a)				# 打印全局变量a的值
        a = 400
    
    f1()
    print(a)				# 打印修改后全局变量a的值
    

    运行结果如下:

    100
    400
    

    **

    2,局部变量

    **
    1,在函数体中(包含形式参数)声明的变量

    2,局部变量的引用比全局变量快,优先考虑使用

    3,如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

    全局变量和局部变量的同名测试

    a = 1
    
    
    def f1():
        a = 400
        print(a)
    
    
    f1()
    print(a)
    

    运行结果为:

    400
    1
    

    输出局部变量和全局变量

    a = 100
    
    
    def f1(a, b, c):
        print(a, b, c)
        print(locals())
        print("*" * 20)
        print(globals())
    
    f1(2, 3, 4)
    
    

    运行结果为:

    2 3 4
    {'c': 4, 'b': 3, 'a': 2}
    ********************
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000235B34D4FD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/06_面向对象/LX_15_单例.py', '__cached__': None, 'a': 100, 'f1': <function f1 at 0x00000235B18B4E18>}
    
    

    **

    3,全局和局部变量的效率测试

    **
    局部变量的查询和访问速度比全局变量块,尤其是在循环的时候。应优先考虑
    在特别强调效率的地方或者循环次数较多的地方,可以将全局变量转为局部变量提高运行速度

    效率测试操作如下:

    import time
    import math
    
    
    def test01():
        start = time.time()
        for i in range(1000000):
            math.sqrt(30)
        end = time.time()
    
        print("test01耗时{0}".format(end-start))
    
    
    def test02():
        start = time.time()
        b = math.sqrt
        for i in range(1000000):
            b(30)
        end = time.time()
        print("test02耗时{0}".format(end-start))
    
    test01()
    test02()
    

    运行结果如下图所示:

    test01耗时0.4827232360839844
    test02耗时0.23786211013793945
    
    
    展开全文
  • 本文实例讲述了Python...定义:全局变量:在模块内、在所有函数的外面、在class外面局部变量:在函数内、在class的方法内下面来看看例子一、函数内部调用全局变量a="hello" #全局变量adef test():global a#调用全局...

    本文实例讲述了Python全局变量与局部变量区别及用法。分享给大家供大家参考,具体如下:

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

    定义:

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

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

    下面来看看例子

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

    a="hello" #全局变量a

    def test():

    global a#调用全局变量a

    b =a #test方法里之后再调用a时,都是全局的a

    print(b,a)

    test()

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

    ('hello', 'hello')

    运行后都是全局变量的值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。

    看看运行结果:

    ('hell0 local,', 'hell0 local')

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

    a="hello" #全局变量a

    def test():

    global a

    a="hell0 global" #修改全局变量a的值

    b =a #test方法之里后再调用a时,都是全局的a

    print(b+",",a)

    test()

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

    看看运行结果:

    ('hell0 global,', 'hell0 global')

    注:在方法内部的变量是在=号前面的,那肯定是局部变量。如果是第一次出现在=号后面的,那肯定是调用的全局变量;全局变量可以在函数里面调用,局部变量只能在对应的函数里面调用,在该函数外面任何地方都无法被调用。

    希望本文所述对大家Python程序设计有所帮助。

    展开全文
  • 全局变量局部变量

    2018-08-27 21:29:25
    全局变量局部变量 局部变量: 定义在函数内部的变量称为局部变量(函数的形参也是局部变量局部变量在函数调用时...1.局部变量只能在其被声明的函数内部访问,而全局变量可以在整个模块内部范围内访问 ...

    全局变量和局部变量

    局部变量:

    • 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
    • 局部变量在函数调用时才能被创建,在函数调用后就会自动销毁

    全局变量:

    • 定义在函数外部,模块内部的变量成为全局变量
    • 全局变量所有函数都可以直接访问(但函数内部不能将其赋值)
    • 函数名也是全局变量

      • 说明:
        1.局部变量只能在其被声明的函数内部访问,而全局变量可以在整个模块内部范围内访问
        2.在函数内部赋值语句不会对全局变量产生影响, 会默认将此变量名重新绑定一个局部变量,当前函数结束后会销毁(其余地方没有调用此变量)
        3.一个函数内部的变量,要么都是局部变量,要么都是全局变量,不能混用同一个变量名 一个变量名在同一个函数内,不能即是全局变量,又是局部变量
        1. 如果实参传入的是可变类型(函数外部的(全局)变量),则一般会传入可变类型(函数外部的(全局)变量)的引用,根据接收传入引用的形参进行改变变量值(不是重新绑定),会改变函数外部的(全局)变量的值

    示例:

    L = [1, 2, 3]
    def func():
        L.append(d)  # 局部变量没有L,会到函数外部查找L,修改L
    func()
    print(L)
    
    def func1():
        L = []  # 会常见一个局部变量,和全局变量L无关
    return L
    func1()
    print(L)
    # 最常用的类型
        def func(lst):
        lst.append(d)  # 根据L的id进行修改L
    func()
    print(L)
    展开全文
  • a、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。 b、局部变量:在函数内、在class的方法(构造、类方法、静态方法、实例方法)内(变量未加self修饰),这就是局部变量 ...
  • 本文主要讲述全局变量局部变量和导入模块变量的方法。参考:《Python核心编程 (第二版)》 全局变量的一个特征是除非删除掉,否则它们存活到脚本运行结束,且对于所有的函数,它们的值都是可以被访问的。然而局部...
  • 全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态...
  • 局部变量全局变量

    2020-08-09 14:42:02
    局部变量:定义在函数内部的变量,只有在函数内部才能使用,函数执行完成之后...函数在执行时,会先在函数内部寻找是否有定义的局部变量,如果没有,再找是否有函数外部定义的全局变量;如果在函数内部有一个和全局变量
  • 局部变量:定义在函数内部的变量(包括函数的参数)全局变量:定义在函数外部,模块内部的变量python的作用域作用域也叫命名空间,是访问变量时查找变量名的范围空间python的四个作用域LEGB作用域英文解释英文简写局部...
  • 当前模块中的全局变量->python内置变量 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。 当全局变量局部变量...
  • python3的全局变量局部变量

    千次阅读 2018-11-19 20:47:03
    局部变量 定义在函数体内部的变量称为局部...定义在函数体外,模块内的变量称为全局变量 全局变量在所有函数体内都可以进行访问 全局变量在函数体内不能直接修改绑定关系 a = 100 def test(): a = 50 print(...
  • 单片机全局变量 局部变量

    千次阅读 2018-04-16 20:34:07
    若在C51中定义一个全局变量,编译器将...C51中定义一个的局部变量可以和全局变量同名,但在这种情况下,局部变量的优先级较高,而同名的全局变量在该功能模块内暂时被屏蔽。若在C51中定义一个局部变量,编译器会将该...
  • 1、全局变量在整个工程文件内都有效; 2、静态全局变量只在定义它的文件内有效; 3、静态局部变量只在定义它的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,...
  • day10笔记:局部变量: 1.... 定义在函数外部,模块内部的变量称为全局变量 2. 所有的函数都可以直接访问"全局"变量,但函数内部不能直接通过赋值语句来改变全局变量 示例见: variable.py 局部变...
  • 局部变量全局变量

    2019-11-12 20:16:54
    局部变量 1. 定义在函数内部的变量(形参也是局部变量) 2. 只能在函数内部使用 ...全局变量 1. 定义在函数外部,模块内部的变量。 2. 在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)。 ...
  • python3 全局变量局部变量

    万次阅读 2018-08-10 14:37:56
    全局变量局部变量 局部变量: ...1.定义在函数外部,模块内部的变量称为全局变量 2.全局变量,所有函数都可以直接访问(但函数内部不能直接修改全局变量的绑定关系)   示例: a = 100 b = 200...
  • 变量的作用域(全局变量局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量局部变量全局变量: 1.在函数和类(class)定义之外声明的变量。作用域为定义的...
  • 变量的作用域(全局变量局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量局部变量 全局变量 在函数和类定义之外声明的变量。作用域为定义的模块,从定义...
  • static 声明的变量在C语言中有两方面的特征:  1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还...若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
  • 在“全局”:实际上,“全局”变量相对于定义它们的模块是全局的-有时它们被称为“模块级”变量,而不是全局变量,因为在C语言中使用全局变量的大多数缺点都不适用,因为在使用模块全局变量时,既不会有命名冲突,...
  • Python之全局变量局部变量1. 变量变量:临时存储数据的容器:工具!...当前模块中的全局变量->python内置变量3. 声明全局变量声明了一个全局变量,声明在函数外部的变量:全局变量,从声明的地方开始...
  • a、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。 b、局部变量:在函数内、在class的方法内(未加self修饰的),这就是局部变量。 c、 静态变量:在class内的,但不在class的方法内的,...
  • 最近有很多小伙伴反应,有点搞不清 Python 的全局变量局部变量、类变量和实例变量的区别以及用法,那我们今天详细介绍一下这4种变量的作用域和用法。全局变量听名字就可以知道该变量的作用范围是全局的,全局变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,464
精华内容 585
关键字:

局部变量模块变量全局变量